2

我是这些设备的新手,即使它们非常便宜,我也不想不必要地把它们变砖。

我使用esptool将 NodeMCU 固件刷写到我的模块上。这样做时,我需要指定写入文件的地址,通常是 0x00000。这是否意味着固件实际上包含引导加载程序?还是它位于闪存上的单独区域?

如果引导加载程序本身包含在固件文件中,那么中断的闪烁过程会导致模块无用,我想?

感谢您的澄清!

4

1 回答 1

7

您不能以这种方式损坏模块。我大概做了一百次闪光,其中一些失败了(例如,由于波特率太高)。固件本身确实包含引导加载程序0x000000,但这是一个可以任意交换的第二阶段引导加载程序。您不应该能够覆盖第一阶段引导加载程序。引用创建者的话,这是http://richard.burtons.org/rBoot上专有的 Espressif bootloader 的开源替代方案:

引导加载程序被写入 SPI 闪存的第一个扇区并像任何其他程序一样执行,内置的第一阶段引导加载程序不知道它正在加载第二阶段加载程序而不是任何其他程序。

那么接下来会发生什么?好吧,第二阶段引导加载程序不是开源的,它是作为二进制 blob 提供给我们的,可以盲目使用。

简而言之:你不能通过写废话来损坏你的模块0x00000。它可能会在发现无效操作码之前执行一些任意代码,但这还不足以导致 CPU 爆炸或模块损坏。刷新固件足以从损坏的第二阶段引导加载程序中恢复。

那么第一阶段引导加载程序到底在哪里呢?从richard.burtons.org/2015/05/17/esp8266-boot-process的评论中,创建者自己回答了这个问题:

评论员:我一直在弄清楚第一阶段引导加载程序是在处理器的 ROM 中还是在 Flash 中。我猜它在ROM中。如果这是在 ROM 中,那么就不存在弄乱闪存并使设备无用的风险。请您确认一下。

理查德:没错。第一阶段在 rom 中,您无法做任何事情来破坏它。

于 2016-11-23T10:00:05.593 回答