加载spiffsimg文件

时间:2016-09-17 21:03:46

标签: lua esp8266 firmware nodemcu flash-memory

我使用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 个答案:

答案 0 :(得分:0)

找到的spiffsimg版本here将为闪存包含lua文件的图像文件提供正确的地址。

请勿使用this版本的spiffsimg,因为它已过期。

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

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

例如,命令

  

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

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

答案 1 :(得分:-1)

我自己从未这样做,但我有理由相信可以从the docs中提取正确答案。

  

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

进一步下来

  

将磁盘映像文件放入bin目录并命名   0x<offset>-<size>.bin其中偏移量是它的位置   应该闪烁,尺寸是闪光​​部分的大小。

但是,这两个陈述之间存在轻微的不匹配。我们可能在文档中有错误。如果“'%x'将被替换......”那么我预计最终名称将不再包含0x

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

  

#define SPIFFS_FIXED_LOCATION 0x100000

     

这指定SPIFFS文件系统从闪存开始时的1Mb开始。除非   否则指定,它将运行到闪存的末尾(不包括   SDK保留的16k空间。)