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

我使用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
连接...
运行Cesanta flasher stub...
设置Flash参数为0x0240
写入446464 @ 0x0... 446464 (100 %)
在38.9秒内在0x0处写入了446464字节(91.9 kbit/s)。
写入262144 @ 0x78000... 262144 (100 %)
在22.8秒内在0x78000处写入了262144字节(91.9 kbit/s)。
跳出...

然后我运行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)烧写到0x80000,然后运行相同的打印语句并得到:

print (file.fscfg())
786432  3391488

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

烧写一张包含由spiffsimg创建的lua文件的图像文件的正确地址是什么?

点赞
用户131929
用户131929

我从未亲自完成过这项工作,但我相当有信心正确的答案可以从 docs 中提取。

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

还有更进一步的解释:

磁盘映像文件放在 bin 目录下,并命名为 0x<offset>-<size>.bin,其中偏移量是应该被刷写的位置,大小是闪存部分的大小。

然而,这两个陈述之间存在轻微的不一致。我们的文档可能存在错误。如果“'%x' 将被替换为……”,那么我期望最终的名称将不再包含 0x

此外,当您构建固件时,可以定义固定的 SPIFFS 位置。

#define SPIFFS_FIXED_LOCATION 0x100000

这指定了 SPIFFS 文件系统从闪存起始位置的 1MB 处开始。除非另有指定,否则它将运行到闪存的末尾(不包括 SDK 保留的 16K 空间)。

2016-09-17 21:36:05
用户6220957
用户6220957

以下是翻译后的中文: 在 此处 找到的 spiffsimg 版本可以提供包含 lua 文件的映像文件的正确烧写地址。

不要使用 此处 的 spiffsimg 版本,因为它已经过时了。

要安装 spiffsimg 工具,您需要下载并安装整个 nodemcu-firmware 包(在 Linux 环境下,使用 make 安装 - 注意:在我的 Debian Linux 上,make 生成了一个错误,但我能够进入 ../tools/spiffsimg 子目录并在那个目录中找到的 Makefile 上运行 make 来创建该工具)。

此处 找到的 spiffsimg 指令非常清晰,只有一个例外:在 -f 参数中指定的文件名需要包括字符 %x。 %x 将会替换成映像文件应该烧写到的地址。

例如,以下命令:

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

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

2016-10-05 15:58:29