测试说明一下沁恒微蓝牙的 BLE OTA 流程 ...... 矜辰所致 ...增加 bin 文件OTA说明 2026/7/20前言
在之前博主已经测试过 CH58x 移植 IAP ,当时因为应用需求,要使用 USB IAP 方式 。 实际上,无线升级的方式应用更加广泛,基本上是蓝牙产品的必备方式。
所以本文我们就来测试说明一下 CH58x 无线 OTA 的升级方式。
相关文章:
CH58x 普通例程移植 IAP 示例(USB_IAP)
沁恒 RISC-V 蓝牙芯片 Flash 分区管理及操作
系列博文目录:
【导航】沁恒微 RISC-V 蓝牙 入门教程目录 【快速跳转】
.
我是矜辰所致,全网同名,尽量用心写好每一系列文章,不浮夸,不将就,认真对待学知识的我们,矜辰所致,金石为开!
目录
- 前言
- 一、 WCH BLE OTA 基础介绍
- 1.1 相关资料
- 1.2 方式说明
- 二、 流程测试
- 2.1 带库升级
- 2.2 不带库升级
- 三、其他说明
- 3.1 不是目标设备
- 3.2 关于 OTA 实现方式
- 3.3 Bin 文件 OTA 异常
- 结语
一、 WCH BLE OTA 基础介绍
1.1 相关资料
在沁恒微官方芯片 EVT 包中, 有一份《WCH蓝牙空中升级(BLE OTA)》:
在文档中,介绍了三种芯片的固件升级方式,其中有两种是无线方式,这个大家可以自行下载查看,本文也会将必要的部分专门说明。
在文档最后,介绍了需要用到的 手机端的 APP 工具:
在沁恒微官方搜索关键字,比如 OTA ,可以搜索到上面提到的手机端的 APP :
下载好解压出来会有一个手机 APP 安卓包 和一份说明文档《 安卓OTA升级工具使用说明 》:
其中会有手机APP OTA 升级工具的使用步骤说明,目前文档中并没有涵盖 CH584/CH585 ,但是流程和文档上是一致的。
1.2 方式说明
在上面提到的文档中,已经对 BLE OTA 的方式有详细的说明,这里我通过图片形式说明一下:
在上图中我标明了 内存占用情况,所有的这些 JumpIAP 、IAP、OTA、APP 代码占用的都是 Codeflash ,这是必须要知道的,这样才能在自己写应用的时候知道如何分配控制 APP 的大小。
在博主以前的博文《 沁恒 RISC-V 蓝牙芯片 Flash 分区管理及操作 》中有关于 Flash 分布的说明:
同时,博主也标出了两种方式所对应的代码,和烧录需要的文件 ,带 OTA 的程序时多个 Hex 同时烧录的:
Hex 文件是带存放地址的
Bin 文件时不带存放地址的,需要手动设定地址
多个 Hex 文件烧录,只要存放地址不同,而且大小不会覆盖其他的 Hex 文件,是可以同时烧录的
二、 流程测试
基本的说明介绍完毕,我们按照官方给的步骤做个示例测试 。
2.1 带库升级
先来测试一下带库升级,手机需要用到的 APP:
我们需要烧录 3 个 Hex 文件,如下图 :
烧录完毕,通过串口查看 Debug 信息如下:
我们同时再准备一个需要升级的程序,我这里就简单的在原始的 OTA 例程上加一个打印,表示是新的 APP,把新的 这个 Hex 文件准备好 :
接下来手机安装好 APP(APP 权限要给),然后把需要升级的 Hex 文件保存至手机对应位置,这个步骤在上面提到的官方《 安卓OTA升级工具使用说明 》中写的很详细,按照官方手册流程继续正常操作即可:
打开 APP —> 扫描附件蓝牙设备 —> 选择我们需要 OTA 的蓝牙设备 —> GETINFO —> IMAGEA —> 选择 Hex 文件 —> 最下方 START—> 手动选择芯片类型(需要的话)
.
说明:带库升级是直接使用 OTA 升级工具扫描连接,如果是不带库升级时需要先通过蓝牙调试助手发送指令让设备进入 OTA 模式再来使用 OTA 升级工具扫描连接
选好 Hex,点击软件最下面的 START ,会弹出选择芯片界面:
选好芯片 OTA 流程自动就会开始,此时通过串口可以看到对应的 DEBUG 输入如下,直到更新完成自动运行程序:
OK ! 成功,操作还是很简单的。
2.2 不带库升级
下面来测试一下不带库升级,手机需要用到的 APP:
我们需要烧录 4 个 Hex 文件,如下图 :
烧录完毕,通过串口查看 Debug 信息如下(和 Peripheral 从机例程一样打印出扫描自己的设备的 MAC 地址):
然后就是把需要升级的 APP hex 文件放置于手机对应文件夹目录下,这个和上面一样,可以通过微信,或者手机直连PC ,新的 APP 也是简单的修改了一下区分原始的:
这里我使用了手机直接连接 PC 操作,把我们需要更新的Hex 放置手机内部存储设备
\Android\data\cn.wch.bleota\files\OTAFile
里面的 imageA 或者 imageB 文件夹下面(这里建议大家都放在 A 里面,因为个人测试的时候好像不能选择,只能放在imageA,根据硬件当前信息,选取用来升级的imageA 或者imageB 文件,软件会自动区分):
说明一下:
准备完毕!
这里与带库升级不同的地方来了,我们需要通过蓝牙调试助手连接上需要升级的设备发送指令才会进入 OTA 模式,这个在我们的 APP 示例中代码体现如下:
所以我们时通过蓝牙调试助手连接上设备,给对应特征值发送任意数据,流程如下图:
接下来,我们再打开 OTA 升级工具,扫描蓝牙,选择目标设备:
接下来的流程就和上面一样了,点击 GETINFO 按钮,选择 IMAGEA文件,最后点击软件最下面的 START ,选择一下目标芯片 ,就会开始 OTA 流程 ,等到完成程序会自动运行 :
OK ! 完成,操作依然是很简单的,只是对于测试示例而言,不带库升级方式需要先发送一个指令进入,可能有些小伙伴没注意到,这时候软件会提示,不是目标设备。
三、其他说明
本小节补充一些使用过程中可能遇到的问题说明。
3.1 不是目标设备
这个问题上面已经说清楚了,不带库升级方式,是需要先通过蓝牙调试助手 连接上设备给 CHAR3 特征值发送任意数据让他进入 OTA 模式,才能使用 OTA 升级工具 进行连接,此时的广播名称应该为 OTAOTA_OTAOTA_xxxx 。
3.2 关于 OTA 实现方式
本小节主要为了简单说明一下为什么多个 Hex 可以烧录,然后程序为什么能跳转的。
其实在上一篇 IAP 文章也有体现,两个文件,Link.ld 和 Start_CH585.s (针对 585 而言,其他芯片也是这两个文件)。
大家可以自行查看一下示例代码中,连接文件都是写好自己的起始地址和长度(占用大小):
它们是分别放置于 Flash 的不同地址,所以不会有冲突。
跳转就是直接指向目的地址去运行程序:
同时为了支持跳转,需要保证启动文件下面配置为 0x1888 (不支持跳转的配置为 0x88):
另外,官方示例中的这几个 JumpIAP 工程中,什么事情都没干,是直接在启动文件中,直接跳到 IAP 工程的地址执行的(有起到一定的保护作用,防止代码被盗):
3.3 Bin 文件 OTA 异常
在使用 bin 文件升级的时候,不能使用 MounRiver Studio 生成的 bin 文件,需要使用 Hex 转成的 bin 文件。
在沁恒官网有一个 HexBinStudio 工具,搜索下载即可:
然后选择对于的 hex 文件,选择输出文件夹,点击生成 bin 文件即可:
生成的 bin 文件,按照上面的 OTA 流程,放置手机对应的文件夹下面:
\Android\data\cn.wch.bleota\files\OTAFile
升级的时候选择 bin 文件,正常开始操作后 APP 会弹出偏移地址填写,我们填写的地址,就是 APP LD 文件设定的地址(通过上面的HexBinStudio 工具也可以直观的看出偏移地址为 0x1000),如下图:
结语
本文主要按照沁恒官方的给的 BLE OTA 资料测试了一下空中升级的流程,按照官方的资料整体走下来都没有遇到什么问题,体验感还不错。除了不带库升级方式,大家需要注意一下,其他也没什么好总结的,按照手册流程正常操作就行了。
好了,本文就到这里。谢谢大家!