ESP8266 RTOS SDK项目:从旧版本SDK升级到新版本IDF风格SDK的FOTA指南
什么是FOTA升级
FOTA(Firmware Over The Air)是指通过无线网络(如Wi-Fi)对设备固件进行远程升级的技术。在ESP8266 RTOS SDK项目中,从V3.0版本开始,SDK架构进行了重大重构,采用了与ESP-IDF相似的风格。本文将详细介绍如何从非OS或V3.0之前的RTOS固件升级到新的IDF风格RTOS固件。
新旧SDK分区结构对比
旧版ESP8266 SDK分区结构
旧版SDK采用简单的分区布局:
| 分区 | 大小 | 说明 | |------|------|------| | Boot | 4KB | 引导加载程序 | | APP1 | 可变 | 主应用程序分区1 | | APP2 | 可变 | 主应用程序分区2(用于OTA回滚) | | System Parameter | 16KB | 系统参数存储区 |
新版IDF风格SDK分区结构
新版SDK采用更灵活的分区方案:
| 分区 | 大小 | 说明 | |------|------|------| | Boot | 16KB | 增强版引导加载程序 | | Partition Table | 4KB | 分区表配置 | | NVS | 可变 | 非易失性存储区 | | APP1 | 可变 | 主应用程序分区1 | | APP2 | 可变 | 主应用程序分区2 |
注意:在新版SDK中,除Boot分区外,其他分区的基地址都可以通过menuconfig进行配置。
固件兼容性说明
从旧版SDK升级到新版IDF风格SDK时,需要注意以下几点:
- API不兼容:新版SDK的API与旧版不兼容,应用程序需要进行相应修改
- 分区处理:升级过程中需要下载新版固件的所有必要分区(包括新Bootloader、新分区表和新应用程序)
- 空间占用:升级完成后,旧分区不会被完全覆盖,导致部分闪存空间无法使用(约40KB)
FOTA升级工作流程
准备工作
- 网络连接:确保PC和ESP8266设备连接到同一个Wi-Fi网络
- 示例选择:根据闪存大小选择合适示例:
- 1MB闪存:使用
system/ota/native_ota/1MB_flash/new_to_new_with_old
- 2MB或更大闪存:使用
system/ota/native_ota/2+MB_flash/new_to_new_with_old
- 1MB闪存:使用
配置步骤
-
启用OTA兼容功能:
Component config ---> ESP8266-specific ---> [*] (**Expected**)ESP8266 update from old SDK by OTA
-
闪存大小配置(ESP8285/ESP8266):
Serial flasher config ---> Flash size (x MB) ---> 实际闪存大小
-
示例参数配置:
Example Configuration ---> (myssid) WiFi SSID (mypassword) WiFi Password (192.168.0.3) HTTP Server IP (8070)HTTP Server Port (/hello_world.ota.bin) HTTP GET Filename
-
可选配置:如需连接到旧版SDK使用的AP:
Example Configuration ---> [*] Connect to the original AP
编译与部署
-
编译项目:
make ota
编译完成后会生成
ota.v2_to_v3.ota.bin
固件文件。 -
启动HTTP服务器:
cd build python -m SimpleHTTPServer 8070
升级过程注意事项
- 首次解包耗时:新版Bootloader首次解包固件需要较长时间,需耐心等待
- 日志监控:
- "I (281) boot: Start unpacking V3 firmware ...":开始解包
- "Pack V3 firmware successfully and start to reboot":解包成功
- 升级类型:此解包流程仅适用于从旧版SDK升级到新版SDK的情况,后续版本间的OTA升级将采用标准流程
数据继承处理
新版SDK可以继承旧版SDK的部分配置数据,如Wi-Fi连接信息。开发者可以参考以下文件了解实现细节:
ota_example_main.c
:查看如何加载原始AP信息esp_system_internal.h
:查看old_sysconf
结构体定义,了解信息组织结构
总结
从旧版ESP8266 RTOS SDK升级到新版IDF风格SDK是一个需要谨慎处理的过程。开发者需要特别注意API的兼容性问题,并按照本文介绍的步骤进行配置和升级。升级完成后,设备将获得新版SDK的所有功能和改进,为后续开发奠定良好基础。
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考