Loops 如何从NodeMCU中的无限重启循环中恢复?
我的NodeMCU程序进入无限重启循环 我的代码在功能上正常工作,但我尝试执行的任何操作,例如Loops 如何从NodeMCU中的无限重启循环中恢复?,loops,reboot,Loops,Reboot,我的NodeMCU程序进入无限重启循环 我的代码在功能上正常工作,但我尝试执行的任何操作,例如file.remove(“init.lua”)或甚至只是=node.heap(),它会崩溃并重新启动,并说:崩溃:调用lua API时出现未受保护的错误(内存不足) 因此,我无法更改任何代码或删除init.lua以停止自动代码执行 如何恢复?我尝试重新刷新另一个版本的NodeMCU,但它开始在串行端口中释放垃圾 然后,我回忆起NodeMCU有两个额外的文件:blank.bin和esp\u init\u
file.remove(“init.lua”)
或甚至只是=node.heap()
,它会崩溃并重新启动,并说:崩溃:调用lua API时出现未受保护的错误(内存不足)
因此,我无法更改任何代码或删除init.lua
以停止自动代码执行
如何恢复?我尝试重新刷新另一个版本的NodeMCU,但它开始在串行端口中释放垃圾 然后,我回忆起NodeMCU有两个额外的文件:
blank.bin
和esp\u init\u data\u default.bin
我分别在0x7E000
和0x7C000
处闪烁它们
它们还可以在NodeMCU闪光器中作为INTERNAL://BLANK
和INTERNAL://DEFAULT
使用
这启动了新的NodeMCU固件,我所有的文件都不见了,我退出了无限重启循环。唯一对我有效的想法是ubuntu中的python flash工具esptool,windows flash工具从未删除init.lua和重启循环 命令(ubuntu): nodemcu_latest.bin可以从github或任何地方下载
sudo python esptool.py -p /dev/ttyUSB0 --baud 460800 write_flash --flash_size=8m 0 nodemcu_latest.bin
刷新以下文件: 0x00000.bin到0x00000 0x10000.bin到0x10000 而且,esp_init_data_default.bin的地址取决于模块闪存的大小 512 kB的0x7c000,如ESP-01、-03、-07等模块 0xfc000表示1 MB,模块如ESP8285、PSF-A85 0x1fc000用于2 MB 0x3fc000用于4MB,模块如ESP-12E、NodeMCU devkit 1.0、WeMos D1 mini 然后,在刷新这些二进制文件之后,在刷新任何其他二进制文件之前,格式化其文件系统(使用运行“file.format()”
我刚刚解决了一个类似的问题。在我的例子中,是最终用户错误导致需要强制擦除
init.lua
,但我认为这两个问题可以类似地解决。(为了完整起见,我的问题是在init.lua
中调用了一个太短的dsleep()
我尝试刷新新的NodeMCU固件,将blank.bin
和esp_init_data\u default.bin
写入0x7E000
和0x7C000
,并将0x00000.bin
写入0x00000
和0x10000.bin
写入0x10000
。在我的情况下,这些事情都没有帮助
我的硬件是Adafruit Huzzah ESP8266(ESP-12),带有4MB闪存
对我起作用的是:
从Espressif下载NonosSDK(我使用了来自的1.5.2版)
将其解压缩到boot\u v1.2.bin
,user1.1024.new.2.bin
,blank.bin
,和esp\u init\u data\u default.bin
(在bin/和bin/at/下)
将以下文件闪存到指定的内存位置:
boot_v1.2.bin
到0x00000
user1.1024.new.2.bin
to0x010000
esp_init_data_default.bin
到0xfc000
blank.bin
至0x7e000
关于闪烁的注意事项:
- 我使用了
esptool.py
1.2.1
- 由于我的问题的性质,我只能在编程模式下(即在GPIO0保持为GND的情况下引导)写入闪存的更改
- 我发现我需要在每个步骤之间重置电路板(否则在第一步之后调用
esptool.py
会失败)
擦掉闪光灯<代码>esptool.py--端口擦除\u闪存
不要在开发阶段使用init文件。将其命名为init_start.lua或类似名称,并使用dofile命令手动执行。一旦您的开发完成并且一切正常,您就可以重命名它并利用自动执行。我遵循了这些,但我编写了init.lua用于独立测试,现在我被锁定了:(nodemcu没有正确清除ram存在问题。这就是导致无限重新启动的原因。从2016年1月开始写这篇文章-上述问题仍然存在于nodemcu中,并且上述解决方案仍然有效。您在哪里找到这些地址(0x7e000和0x7c000)-是否有关于这些的更多文档?您可以在此处参考内存映射:地址可能会根据您的闪存大小而变化。
sudo python esptool.py -p /dev/ttyUSB0 --baud 460800 write_flash --flash_size=8m 0 nodemcu_latest.bin