我是这些设备的新手,即使它们非常便宜,我也不会毫无不必要地想要这些设备。
我已经使用 esptool 将NodeMCU固件刷新到我的模块上。这样做时,我需要指定文件写入的地址,通常是0x00000。这是否意味着固件实际上包含引导加载程序?或者它位于闪光灯的单独区域?
如果引导加载程序本身包含在固件文件中,那么中断的闪存过程会使模块无效,我想?
感谢您的澄清!
答案 0 :(得分:5)
您不能以这种方式损坏模块。我可能做了一百次闪烁,其中一些失败(例如由于波特率太高)。固件本身 包含0x000000
的引导加载程序,但它是可以任意交换的第二阶段引导加载程序。你不应该能够覆盖第一阶段的引导加载程序。引自rBoot
创建0x00000
的人,这是http://richard.burtons.org/上适当的Espressif booatloader的开源替代品:
引导加载程序被写入SPI闪存的第一个扇区并像任何其他程序一样执行,内置的第一阶段引导加载程序不知道它正在加载第二阶段加载程序而不是任何其他程序。
接下来会发生什么?那么第二阶段引导加载程序不是开源的,它是作为二进制blob提供给我们盲目使用的。
简而言之:您不能通过向if (something)
写废话来破坏您的模块。它可能会在找到无效的操作码之前执行一些任意代码,但这不足以使CPU爆炸或模块被损坏。重新刷新固件足以从损坏的第二阶段引导加载程序中恢复。
那么第一阶段的引导加载程序究竟在哪里?根据{{3}}的评论,创作者自己回答:
评论员:我一直在弄清楚第一阶段引导加载程序是在处理器ROM还是在Flash中。我猜它在ROM中。如果这是在ROM中,那么就没有弄乱闪存的风险并使设备无用。 你能否确认一下。
理查德:这是对的。第一阶段是在rom,你无法做任何事情来打破它。