流程介绍
Flash布局
如下图所示,默认Bootrom会根据flash config table跳转到0x10020000(具体参考 安全引导加载),固件升级服务需要单独创建工程OTA manager,用户工程User Code需要放在OTA manager后。
Bootrom跳转到OTA manager以后,再根据当前状态:若不需要升级则跳转到用户工程;若需要升级则等待升级。
用户工程的起始地址、固件升级包存放的Upgrade bin地址均可通过工程的 memory_map.h 、 custom_memory_map.h 进行配置。Upgrade bin建议放在Flash的最后。
流程简介
下图介绍了OTA的基本流程。完整的OTA升级文件包含携带验证信息的 ctrl_packet.bin 以及随后的固件包,资源包和字体包。
步骤1. 远端设备将 ctrl_packet.bin 传给user bin来确认是否可以进行OTA,如果可以,继续步骤2
步骤2. user bin需要重启进入ota manger bin,并和远端设备重新建立蓝牙连接。如果一定时间内没有连接,会重新返回user bin。
步骤3. 建立蓝牙连接后,远端设备会一直传输升级包直到所有升级包传输完成。
如果固件升级包下载失败,会重新回到user bin。
如果资源和字体下载失败,会强制留再ota manager bin,直到下载成功为止。
下载失败后,OTA支持resume和强制从头升级两种方式,由远端设备决定采用哪种方式。
步骤4. 解压缩固件升级包并完成安装。
步骤5. 安装完成后跳转到user bin,完成OTA。
注意事项
OTA的升级包采用加密方式,须确保使用携带加密信息的flash config table;如果解密存在efuse,须确保efuse有正确烧录相关内容。若校验失败,远端设备会收到09(DFU_ERR_CONTROL_PACKET_INVALID)的错误代码。
如果OTA整个过程中因为BLE断连或其他原因导致失败,远端设备会收到10(DFU_ERR_OTA_ONGOING)的错误代码,远端设备可以决定resume或从头升级。
工程配置
用户工程配置:
双核均需要配置:
LCPU配置: 如果ble service放在LCPU,需要配置LCPU的port service以便于OTA manager能获取到BLE数据
OTA Manager工程配置:
除了用户工程双核均需配置的内容为,还需要加入zlib