OAD升级原理

1. OAD升级原理

oad升级有2个文件,都是bin格式的文件,imagA和imagB,两个镜像文件,为了防止蓝牙升级出错,需要先查询当前蓝牙的镜像类型是哪个,如果是A镜像就用B文件去升级,如果是B镜像就用A去升级。

2. 蓝牙镜像类型和版本查询

查询类型和版本需要使用相关的service和characteristic,下面是我的项目中使用到的,具体是那个还要看自己的情况
BT_OAD_SERVICE
@“F000FFC0-0451-4000-B000-000000000000” //服务
BT_OAD_IMAGE_NOTIFY
@“F000FFC1-0451-4000-B000-000000000000” //查询版本,发送升级通知
BT_OAD_IMAGE_BLOCK_REQUEST
@“F000FFC2-0451-4000-B000-000000000000” //发送升级文件

3. 发送查询镜像版本信息

写入0或1,回复我们01 00 00 7C 42 42 42 42类似这样的信息,一共8个字节(我们后面发的升级通知给蓝牙设备其实也就是发这种形式的信息),这些都是16进制表示。第一个字节01是镜像版本,7C*4其实就是镜像文件的真正大小,42是镜像类型,ASCII码代表的是字母"B",也就是说蓝牙设备现在是镜像B,我们升级的话就要发给他镜像A文件。

4. 发送升级通知

获得了版本号和镜像类型,对比版本后如果可以升级,就先加载升级文件,查询到是镜像B就用A去升级,反之亦然。
要发送的升级通知消息 12个字节
设置要发送的内容,从文件数组下标4开始读取8个字节,如: 01 00 00 7C 42 42 42 42
一定包含这样类型的字节信息,其实就是通知蓝牙设备发送的镜像版本01,大小7C(嵌入式那边7C*4就是文件长度,镜像“B”。剩余四个字节为0,完整例子即为:01 00 00 7C 42 42 42 42 00 00 00 00;

5.发送升级文件

从对应的下载.bin文件读取,每次发送包的大小为18个字节, 前两个字节自定义,为包号,从0开始,低位在前;后16个字节从下载文件中读取,以此发送。每包数据如:00 00 39 48 FF FF 01 00 00 7C 42 42 42 42 00 00 00 00;
NOTIFY:发送成功会返回包号;(本人项目)

6.升级成功

数据传输完成,重新连接判断版本是否更新

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值