我使用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文件?
答案 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空间。)