首页 文章

加载spiffsimg文件的正确地址是什么

提问于
浏览
0

我用spiffsimg创建了一个包含多个lua文件的文件:

# ./spiffsimg -f lua.img -c 262144 -r lua.script
f   4227 init.lua
f    413 cfg.lua
f   2233 setupWifi.lua
f   7498 configServer.lua
f    558 cfgForm.htm
f   4255 setupConfig.lua
f  14192 main.lua
#

然后我使用esptool.py将NodeMCU固件和包含lua文件的文件刷新到esp8266(NodeMCU开发工具包):

c:\esptool-master>c:\Python27\python esptool.py -p COM7 write_flash -fs 32m -fm dio 0x00000 nodemcu-dev-9-modules-2016-07-18-12-06-36-integer.bin 0x78000 lua.img
esptool.py v1.0.2-dev
Connecting...
Running Cesanta flasher stub...
Flash params set to 0x0240
Writing 446464 @ 0x0... 446464 (100 %)
Wrote 446464 bytes at 0x0 in 38.9 seconds (91.9 kbit/s)...
Writing 262144 @ 0x78000... 262144 (100 %)
Wrote 262144 bytes at 0x78000 in 22.8 seconds (91.9 kbit/s)...
Leaving...

然后我运行ESPLorer来检查状态并得到:

PORT OPEN 115200

Communication with MCU..Got answer! AutoDetect firmware...

Can't autodetect firmware, because proper answer not received.


NodeMCU custom build by frightanic.com
    branch: dev
    commit: b21b3e08aad633ccfd5fd29066400a06bb699ae2
    SSL: true
    modules: file,gpio,http,net,node,rtctime,tmr,uart,wifi
 build  built on: 2016-07-18 12:05
 powered by Lua 5.1.4 on SDK 1.5.4(baaeaebb)
lua: cannot open init.lua
> 
----------------------------
No files found.
----------------------------
> 
Total : 3455015 bytes
Used  : 0 bytes
Remain: 3455015 bytes

NodeMCU固件正确闪烁,但无法找到lua文件 .

我已经尝试过闪存到其他位置(0x84000,0x7c000),但我只是根据github上的读取线程来猜测这些位置 .

我使用NodeMCU file.fscfg()例程来获取flash地址和大小 . 如果我只刷新NodeMCU固件,我会得到以下信息:

print (file.fscfg())
524288  3653632

534288是0x80000,所以我尝试只将spiffsimg文件(lua.img)闪存到0x8000,然后运行相同的print语句并得到:

print (file.fscfg())
786432  3391488

闪存地址增加了lua.img中的确切字节数 - 我不明白,为什么闪存地址会改变? file.fscfg返回的第一个数字不是起始闪存地址,而是结束闪存地址吗?

闪存图像文件的正确地址是什么,包含由spiffsimg创建的lua文件?

2 回答

  • -1

    发现spiffsimg的版本here将提供正确的地址,用于刷新包含lua文件的图像文件 .

    不要使用this版本的spiffsimg,因为它已经过时了 .

    要安装spiffsimg实用程序,需要下载并安装整个nodemcu-firmware软件包(进入linux环境,使用make安装 - 注意:make在我的debian linux框中生成错误,但我能够进入 . ./tools/spiffsimg子目录并在该目录中找到的Makefile上运行make以创建该实用程序) .

    spiffsimg指令发现here非常清楚,但有一个例外:您指定的文件名与-f参数一起需要包含字符%x . %x将替换为图像文件应闪烁的地址 .

    例如,命令

    spiffsimage -f%x-luaFiles.img -S 4MB -U 465783 -r lua.script

    将在本地目录中创建一个文件,名称如下:80000-luaFiles.img . 这意味着您应该在ESP8266上的地址0x80000处安装该映像文件 .

  • 0

    我有理由相信可以从the docs中提取正确的答案 .

    -f指定磁盘映像的文件名 . '%x'将替换为文件系统的计算偏移量 .

    再往下走了一点

    磁盘映像文件放在bin目录中,它名为0x <offset> - <size> .bin,其中offset是应该闪存的位置,大小是flash部分的大小 .

    但是,'s a slight mismatch between the two statements. We may have a bug in the docs. If 936524 then I' d预计最终名称将不再包含 0x .

    此外,在构建固件时可以定义固定的SPIFFS位置 .

    #define SPIFFS_FIXED_LOCATION 0x100000这指定SPIFFS文件系统从闪存开始时的1Mb开始 . 除非另有说明,否则它将运行到闪存的末尾(不包括SDK保留的16k空间) .

相关问题