【问题标题】:How to recover from infinite reboot loops in NodeMCU?如何从 NodeMCU 中的无限重启循环中恢复?
【发布时间】:2015-06-25 15:24:49
【问题描述】:

我的 NodeMCU 程序进入了无限重启循环。

我的代码在功能上正常工作,但我尝试执行的任何操作,例如file.remove("init.lua") 甚至只是 =node.heap(),它会惊慌并重新启动说:PANIC: unprotected error in call to Lua API (not enough memory)

因此,我无法更改任何代码或删除 init.lua 以停止自动执行代码。

我该如何恢复?

【问题讨论】:

  • 不要在开发阶段使用初始化文件。将其命名为 init_start.lua 或类似名称并使用 dofile-command 手动执行它。一旦您的开发完成并且一切正常,您就可以重命名它并使用自动执行。
  • 我一直在关注,但我为独立测试编写了 init.lua,现在我被锁定了:(

标签: loops reboot


【解决方案1】:

我尝试重新刷新另一个版本的 NodeMCU,但它开始在串口中发出垃圾。

然后,我想起 NodeMCU 有两个额外的文件:blank.binesp_init_data_default.bin

我分别在0x7E0000x7C000 刷了它们。

它们也可以在 NodeMCU flasher 中以 INTERNAL://BLANKINTERNAL://DEFAULT 的形式使用。

这启动了新的 NodeMCU 固件,我的所有文件都消失了,我已经退出了无限重启循环。

【讨论】:

  • nodemcu 没有正确清除内存的问题。这就是导致无限重启的原因。
  • 写于 2016 年 1 月 - NodeMCU 中仍然存在上述问题,上述解决方案仍然有效。
  • 您在哪里找到这些地址(0x7e000 和 0x7c000) - 有没有我能找到更多关于这些地址的文档?
  • 您可以在这里参考内存映射:github.com/esp8266/esp8266-wiki/wiki/Memory-Map 地址可能会根据您的闪存大小而变化。
【解决方案2】:

唯一对我有用的是ubuntu中的python flash tool esptool,windows flashtool从不删除init.lua和reboot loop。

命令(ubuntu):

git clone https://github.com/themadinventor/esptool.git
cd esptool
python esptool.py -h
ls -l /dev/tty*

nodemcu_latest.bin 可以从 github 或任何地方下载。

sudo python esptool.py -p /dev/ttyUSB0 --baud 460800 write_flash --flash_size=8m 0 nodemcu_latest.bin

【讨论】:

    【解决方案3】:

    刷入以下文件:

    0x00000.bin 到 0x00000

    0x10000.bin 到 0x10000

    而且,esp_init_data_default.bin 的地址取决于您的模块闪存的大小。

    0x7c000 用于 512 kB,模块如 ESP-01、-03、-07 等。

    0xfc000 为 1 MB,模块如 ESP8285、PSF-A85

    0x1fc000 为 2 MB

    0x3fc000 为 4 MB,模块如 ESP-12E、NodeMCU devkit 1.0、WeMos D1 mini

    然后,在刷新这些二进制文件后,格式化其文件系统(使用ESPlorer 运行“file.format()”),然后再刷新任何其他二进制文件。

    Downloads Link

    【讨论】:

      【解决方案4】:

      我刚刚解决了一个类似的问题。就我而言,最终用户错误导致需要强制擦除init.lua,但我认为这两个问题都可以类似地解决。 (为了完整起见,我的问题是在init.lua 中打了一个太短的dsleep() 调用,让电路板在启动init.lua 时立即自行重置。)

      我尝试刷新新的 NodeMCU 固件,将 blank.binesp_init_data_default.bin 写入 0x7E0000x7C000,并将 0x00000.bin 写入 0x000000x10000.bin0x10000。在我的情况下,这些事情都没有帮助。

      我的硬件是 Adafruit Huzzah ESP8266 breakout (ESP-12),带有 4MB 闪存。

      对我有用的是:

      1. 从 Espressif 下载 NONOS SDK(我使用的是 http://bbs.espressif.com/viewtopic.php?f=46&t=1702 的 1.5.2 版)。
      2. 解压到boot_v1.2.binuser1.1024.new.2.binblank.binesp_init_data_default.bin(在bin/和bin/at/下)。
      3. 将以下文件闪存到指定的内存位置:
        1. boot_v1.2.bin0x00000
        2. user1.1024.new.2.bin0x010000
        3. esp_init_data_default.bin0xfc000
        4. blank.bin0x7e000
        5. 关于闪烁的注意事项:
          • 我使用了esptool.py 1.2.1。
          • 由于我的问题的性质,我只能在编程模式下(即在 GPIO0 按住到 GND 的情况下启动后)将更改写入闪存。
          • 我发现我需要在每个步骤之间重置板(否则在第一个步骤之后调用 esptool.py 会失败)。
      4. 擦除了闪光灯。 esptool.py --port <your/port> erase_flash
      5. 然后我就可以编写新固件了。我使用股票 nodeMCU 0.9.5 只是为了隔离变量,但我强烈怀疑此时任何固件都可以工作。

      【讨论】:

        猜你喜欢
        • 2015-09-27
        • 1970-01-01
        • 1970-01-01
        • 2010-09-20
        • 1970-01-01
        • 1970-01-01
        • 2014-09-18
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多