CH58X_OTA功能使用
- CH58x系列EVT/BLE中提供了两种OTA方式,分别是BackupUpgrade和OnlyUpdateAPP
- 区别是BackupUpgrade是带库升级,该升级方式是“整个镜像替换”,因此静态库会链接进镜像,代价是整个镜像会大,OnlyUpdateAPP是固定库升级,使用ROM自带库,升级时不会升级蓝牙库,如果需要升级库只能使用ISP等方式
- 带库和不带库的内存分配情况:
![image]()
带库升级-BackupUpgrade

BackupUpgrade_JumpIAP
- 该工程没有在主函数中做任何操作,仅在LD文件中分配了4KB内存,并在startup_CH585.s文件中无条件跳转到IAP


BackupUpgrade_IAP
-
该工程起始地址为JumpIAP跳转的地址:0x6D000,大小为12K,通过jumpIAP,每次上电都会运行IAP工程
![image]()
-
IAP工程main函数中主要实现了ReadImageFlag和APP跳转功能
- ReadImageFlag()函数从0x76000读取ImageFlag,空片或非法值一律当 IMAGE_A_FLAG(0x01) 处理
- 在jump_APP()函数中,只有标志等于 IMAGE_IAP_FLAG(0x03)才搬运数据,首先一次性擦除整个IMAGEA,然后将IMAGEB搬运到IMAGEA,切换flag,擦除整个备份区;操作完成后跳转到IMAGEA运行
BackupUpgrade_OTA
- 该工程就是imageA,在LD文件中可以看到起始地址为0x1000,大小为216KB,主要是在从机例程上添加了OTA功能
![image]()
QA:为什么JumpIAP和IAP的起始地址这样设计:ISP最小擦除单位是8KB,用户代码从0x1000开始,ISP工具烧录代码至少会将0~8K这段flash擦除,意味着如果使用ISP工具方式读取flash,用户代码的前4KB一定会被擦除,起到一定的代码保护作用
带库升级流程
- 手机安装升级工具:https://www.wch.cn/downloads/BLE_OTA_Android_ZIP.html
- ISP烧录时需要同时烧录jumpIAP/IAP/OTA三个工程
![image]()
- 打开手机OTA升级工具,选择要连接的设备--点击GETINFO--右上角三个点导入需要OTA文件
![image]()
- 点击IMAGEA,选择需要升级的固件
![image]()
- 点击start选择需要升级的芯片
![8a6ea1f90a30cd6bf92dd9bc27cf63b2]()
- 升级过程中串口不断打印flash校验信息,手机APP有进度条显示,直到升级完成
![fe8774cf15051c3ce5622e7f82745ff2]()
不带库升级-OnlyUpdateApp

Onlyupdate_jumpIAP
- 该工程和带库升级的jumpIAP工程作用是一样的,也是分配一段4KB大小的flash并跳转到IAP
![image]()
Onlyupdate_IAP
-
该工程起始地址为0xc000,大小为16KB
-
与带库升级的IAP工程不同的是
- Onlyupdate_IAP启动文件中跳转到了起始地址为0x00040000 ROM_BLE库(不同芯片库的起始地址不一样)
la a0, 0x00040000 jr a0- Onlyupdate_IAP工程中添加了OTA服务,实现了用户区代码的擦除写入;代码检查是否是软复位,软复位不跳转APP,检查标志位是否需要跳转到 APP 代码执行,如果不跳转到 APP,需要进行 OTA,程序会初始化BLE从机
- 该工程用户区的代码起始地址取决于主机端
OpParaDataLen = iap_rec_data.program.len; OpAdd = (uint32_t)(iap_rec_data.program.addr[0]); OpAdd |= ((uint32_t)(iap_rec_data.program.addr[1]) << 8); OpAdd = OpAdd * 16;
OnlyUpdateApp_Peripheral
- 该工程与OTA相关的是在BLE服务中接收到任意数据后会触发OTA,Jump_OTA会擦除在ROM中OTA标志位,写标志IMAGE_OTA_FLAG,然后软复位,芯片复位;复位后运行到IAP中,在IAP中擦除和写入用户区代码,实现OTA
case SIMPLEPROFILE_CHAR3:
{
uint8_t newValue[SIMPLEPROFILE_CHAR3_LEN];
tmos_memcpy(newValue, pValue, len);
PRINT("profile ChangeCB CHAR3..\n");
PRINT("jump OTA \n");
mDelaymS(5);
Jump_OTA();
break;
}
不带库升级流程
- 不带库升级手机端需要的工具是BLE调试助手和沁恒手机升级工具
- ISP烧录时需要烧录IAP/Jump_IAP/OnlyUpdateApp_Peripheral;以及ROM库
![image]()
![image]()
- 烧录完成后在BLE调试助手中连接simple_peripheral,并在UUID为0xFFE3特征发送任意数据触发OTA
![image]()
- 触发OTA后可以在OTA升级工具中搜索到需要OTA的设备
![image]()
- 后面操作与带库操作流程一致,GETINFO-添加HEX-IMAGEA-选择需要OTA文件-START-等待OTA结束
![9d655b9d1334b6eda35c627f251066cc]()
默认例程中留给APP的空间为44KB,如果APP空间需要更大,则将IAP往后移,为APP腾出空间,相应的跳转地址和flash大小分配进行修改















浙公网安备 33010602011771号