WQ7033 固件空中升级OTA
WQ7033 空中升级介绍
OTA(Over The Air)空中升级, 是通过无线的方式对固件进行升级DFU(Device Firmware Update), 升级固件经过打包后 手机通过SPP或BLE的方式传给芯片端, 芯片接收到新固件的会放在芯片的FOTA区域, 数据接收并校验完成后重启, 开机启动时解压复制到对应的FW区域
WQ7033官方的OTA可以支持无感升级, 可以一边播放音乐一边升级. 还可以支持升级失败可以回退, 不影响旧程序的使用. 因为是经过压缩的, 所以需要的FLASH资源也比传统双备份升级的方式要少
WQ7033 OTA BIN文件打包
在物奇UI工具中选择OTA选项导入wpk, 可根据需要选择升级的images区域来生成OTA bin文件, 这里只选择了tws_core0的images, 选择完成后点击export导出OTA BIN文件放入手机内存中, 以便后面手机上选择升级的文件
WQ7033 OTA 升级
WQ7033的OTA代码主要是放在app_wqota.c文件中, OTA代码在SDK中是开放可见的. 下面从SDK代码简单看WQ7033 OTA升级的流程
WQ7033 OTA 初始化
SDK代码在app_main_task_func()初始化的时候就会进入app_wqota_init(), 进行OTA SPP和BLE数据通道的初始化
SPP的OTA可以不需要特殊的操作, 直接配对手机使用SPP升级即可. BLE的OTA需要使用按键配置一个OTA用户事件打开BLE OTA的广播
WQ7033 OTA 命令
目前SDK中支持的OTA过程中手机下发给设备的命令
OTA命令在handle_command()函数中解析
WQ7033 OTA 升级步骤
-
设备与手机APP连接(貌似目前只有安卓APP), 这里选择的是SPP连接, 先连接上系统蓝牙, 再APP进行SPP扫描界面可以扫描到已经连接的设备
-
点击连接后进入升级界面, 选择将要升级的OTA BIN文件, 然后点击右上方的升级按钮
-
升级开始过程, 手机APP端会依次发送 读取固件信息指令(OPCODE_OTA_GET_DEVICE_INFO), 读取设备升级文件标识信息(OPCODE_OTA_GET_FILE_INFO_OFFSET), 查询设备是否可升级命令(OPCODE_OTA_INQUIRY_IF_CAN_UPDAT). 耳机会回复VID/PID信息, 将耳机电量信息、耳机ota空间是否不足等信息返回给手机, 手机APP端会根据耳机端回复的信息决定是否能继续升级
-
当满足条件, 可以升级的时候, 手机APP端会不断发送升级固件数据块命令给到耳机(OPCODE_OTA_SEND_FIRMWARE_BLOCK), 设备端接收到手机发来的OTA固件数据块会做校验, 同步, 存储等处理.
-
OTA BIN文件全部接收完成, APP端会依次下发读取设备升级状态命令(OPCODE_OTA_GET_REFRESH_FIRMWARE_STATUS)和 获取双耳同步状态命令(OPCODE_OTA_GET_SYNC_STATE = 0xE8), 设备端判断主从同步校验结果并将结果返回给APP端, 当双耳校验都成功时, 则APP提示升级成功
-
升级完成手机APP端下发重启命令(OPCODE_OTA_REBOOT), 耳机重启完成后会由SBL切换解压固件, 覆盖原来固件区域