ESP8266 OTA固件启动日志里分区解析【2M flash】
ESP8266 启动日志中分区表的内容及其解释
分区表日志:
I (136) boot: Partition Table:
I (147) boot: ## Label Usage Type ST Offset Length
I (170) boot: 0 nvs WiFi data 01 02 00009000 00004000
I (193) boot: 1 otadata OTA data 01 00 0000d000 00002000
I (217) boot: 2 phy_init RF data 01 01 0000f000 00001000
I (240) boot: 3 ota_0 OTA app 00 10 00010000 000f0000
I (263) boot: 4 ota_1 OTA app 00 11 00110000 000f0000
I (286) boot: End of partition table
分区表字段说明:
Label:分区的名称。
Usage:分区的用途。
Type:分区的类型(十六进制)。
ST:分区的子类型(十六进制)。
Offset:分区在 Flash 中的起始地址(十六进制)。
Length:分区的大小(十六进制)。
分区表内容解析:
1. nvs 分区:
Label: nvs
Usage: WiFi data
Type: 0x01(数据分区)
SubType: 0x02(NVS 数据)
Offset: 0x00009000
Length: 0x00004000(16 KB)
作用:用于存储 WiFi 配置和其他非易失性数据。
2. otadata 分区:
Label: otadata
Usage: OTA data
Type: 0x01(数据分区)
SubType: 0x00(OTA 数据)
Offset: 0x0000d000
Length: 0x00002000(8 KB)
作用:用于存储当前 OTA 分区的信息(例如当前运行的 OTA 分区是 ota_0 还是 ota_1)。
3. phy_init 分区:
Label: phy_init
Usage: RF data
Type: 0x01(数据分区)
SubType: 0x01(RF 数据)
Offset: 0x0000f000
Length: 0x00001000(4 KB)
作用:用于存储 RF 校准数据。
4. ota_0 分区:
Label: ota_0
Usage: OTA app
Type: 0x00(应用程序分区)
SubType: 0x10(OTA 分区 0)
Offset: 0x00010000
Length: 0x000f0000(960 KB)
作用:用于存储 OTA 固件的第一份副本。
5. ota_1 分区:
Label: ota_1
Usage: OTA app
Type: 0x00(应用程序分区)
SubType: 0x11(OTA 分区 1)
Offset: 0x00110000
Length: 0x000f0000(960 KB)
作用:用于存储 OTA 固件的第二份副本。
分区表总结:
nvs:存储 WiFi 配置和其他非易失性数据。
otadata:存储当前 OTA 分区的信息。
phy_init:存储 RF 校准数据。
ota_0 和 ota_1:两个 OTA 分区,用于存储固件。设备可以在两个分区之间切换以实现 OTA 升级。
OTA 升级流程:
设备启动时,检查 otadata 分区,确定当前运行的 OTA 分区(ota_0 或 ota_1)。
如果需要升级,将新固件写入另一个 OTA 分区。
更新 otadata 分区,指向新的 OTA 分区。
重启设备,运行新固件。
注意事项:
1. 分区大小:
确保 OTA 分区的大小足够存储固件。
如果固件过大,可能需要调整分区表。
2. 分区顺序:
分区表中的分区顺序必须与 Flash 的物理布局一致。
3. OTA 数据分区:
otadata 分区必须存在,否则 OTA 功能无法正常工作。
4. Flash 布局:
分区的起始地址和长度不能重叠,否则会导致数据损坏。
通过以上分区表配置,ESP8266 可以支持 OTA 升级功能,并在两个 OTA 分区之间切换以运行新固件