NODEMCU文档翻译

升级固件

从一个NodeMCU版本升级(或降级!)固件到另一个NodeMCU版本有三个潜在问题:

  •   为一个NodeMCU版本(如0.9.x)编写的Lua脚本在最新的固件上可能无法正常工作。例如,Espressif将操作更改为socket:send异步,即非阻塞。有关详细信息,请参阅API文档

  •   NodeMCU闪存文件系统可能需要重新格式化,特别是如果其地址已更改,因为新固件的大小与旧固件不同。如果它不是自动格式化,那么它应该是有效的,并且具有与闪光操作之前相同的内容。您仍然可以file.format()手动运行以重新格式化您的Flash文件系统。你会知道如果你需要这样做,如果你的闪存文件存在,但似乎是空的,或者是数据不能写入新文件。但是,这应该是一个例外情况。在大型闪存设备上格式化文件系统(例如,16MB部分)可能需要一些时间。所以,在第一次启动,你不应该担心,如果没有什么似乎发生一分钟。有一条消息打印到控制台,让你知道这一点。

  •   Espressif SDK初始数据可能在每个NodeMCU固件版本之间变化,并且可能需要被擦除或重新刷新。有关详细信息,请参阅SDK Init Data(下面的这个部分)在升级固件之前完全擦除模块将避免此问题。

SDK Init数据

注意

通常,NodeMCU将在需要时处理写入SDK初始化数据。大多数用户可以忽略此部分。

NodeMCU版本针对特定版本的Espressif SDK进行编译。SDK在闪存中保留用于存储校准和其他数据的空间。此数据在SDK版本之间更改,如果它无效或不存在,则固件可能无法正确引导。症状包括消息,例如rf_cal[0] !=0x05,is 0xFF,无尽的重新启动循环和/或快速闪烁模块LED。


如果您遇到上述一种或多种症状,请确保您的芯片在闪烁前完全擦除,例如:

esptool.py --port <serial-port-of-ESP8266> erase_flash

  还要验证您使用的是最新的NodeMCU版本,因为某些早期版本的NodeMCU 1.5.4.1没有将SDK初始化数据写入新擦除的芯片。

Espressif将该区域称为“系统参数”,并且它驻留在闪存的最后四个4kB扇区中。从SDK 1.5.4.1开始,第五个扇区保留用于RF校准(并且其位置由NodeMCU控制),如本补丁通知所述至少,Espressif指出,从末端开始的第4个扇区需要用“init数据”闪存,而从末尾开始的第2个扇区应该为空白。

  默认的init数据作为SDK文件中的一部分提供esp_init_data_default.bin如果扇区显示为空,则NodeMCU将在首次引导时自动将此文件闪存到正确的位置。

如果您需要自定义init数据,那么首先下载Espressif SDK 2.0.0并解压缩esp_init_data_default.bin然后闪存(flash)该文件就像你刷新固件那样。init数据的正确地址取决于闪存芯片的容量。

  • 0x7c000 对于512 kB,像大多数ESP-01,-03,-07模块等
  • 0xfc000 对于1 MB,如ESP8285,PSF-A85,一些ESP-01,-03模块等。
  • 0x1fc000 为2 MB
  • 0x3fc000 为4 MB,模块如ESP-12E,NodeMCU devkit 1.0,WeMos D1 mini

有关初始数据地址和自定义的详细信息,请参见“ ESP8266入门指南 ”的“4.1非FOTA闪存映射”和“6.3 RF初始化配置” 

确定闪存大小

要确定安装固件之前闪存芯片的容量,您可以运行

esptool.py --port <serial-port> flash_id

它将返回制造商ID和芯片ID,如:

Connecting...
Manufacturer: e0
Device: 4016

芯片ID可以在https://code.coreboot.org/p/flashrom/source/tree/HEAD/trunk/flashchips.h查找。可查找到制造商名称和芯片型号名称/编号例如AMIC_A25LQ032然后,可以输入该信息到您最喜欢的搜索引擎中,以查找芯片说明和数据表。

按照规定,模块名称中的最后两位或三位表示容量(兆位)。因此,A25LQ032在上面的示例中是一个32Mb(= 4MB)模块。



猜你喜欢

转载自blog.csdn.net/qq_36965134/article/details/55107650