android ble OTA升级(Ti OAD 方案)

1、概念

硬件存储中可存放两个镜像:镜像A和镜像B。

关于双镜像,目前有两种做法:

2、方案一: 一个镜像作为 Load 镜像,一个作为功能。

将镜像B作为主要镜像,而镜像A只是作为升级到镜像B的桥梁,可以把A的大小降低,以此增加B的可使用空间。但实际使用过程中,由于A只作为桥梁,不包含正常使用需要的功能,所以每次升级都需要写入2个固件,但经常在升级固件时可能由于外部或内部因素,如电量不足等,导致镜像已经开始写入硬件,但无法完全写入而出现问题。

3、方案二: 两个镜像功能相同 ( 选用 )

将A、B两个镜像做到功能一致,每次升级都只需要写入一个固件即可,且一旦写入失败,硬件仍可使用原来的固件,而不影响使用,目前多数都是采用第二种方式,使用两个相同功能的镜像,作为一种保险措施。

其中,升级时需要镜像A、B交替式升级,若当前硬件中正常使用的是镜像A,则升级固件时只能写入镜像B,反之,则只能写入镜像A。

硬件在每次升级完固件后会自动选择更新后的固件启动。

2.1、固件当前使用镜像类型判断

包含固件升级功能的固件中都会有OAD服务
(UUID:0xF000FFC0-0451-4000-B000-000000000000),
OAD服务中有两个特征:
OAD Image Identify(UUID:0xF000FFC1-0451-4000-B000-000000000000)
OAD Image Block(UUID:0xF000FFC2-0451-4000-B000-000000000000)

2.2、OAD Image Identify是作为镜像识别

可写(0或1)、监听(返回8bytes数据)。当写入0时若有8bytes数据返回,则说明当前硬件固件为镜像A,若写入0无返回数据,而写入1有8bytes数据返回,则说明当前硬件固件为镜像B。

Byte0Byte1Byte2Byte3Byte4Byte5Byte6Byte7
版本低字节版本高字节-镜像大小

Byte0 Byte1:镜像版本标志位(image version):
其中byte1作为高字节,byte0作为低字节,即若byte0为0xE2,byte1为0x01,则实际应为V = 0x01E2,由于镜像分为A、B镜像,故实际计算版本时,需除以2取整,即0x01E2 = 482,那么实际版本为image version = 241。此为固件代码编译时形成,即若在固件中设置版本为15,则实际镜像A中该版本标志位为:0x001E,而镜像B中该标志位为:0x001F。根据此同样也可判断,若此标志位为双数,则为镜像A,反之则为镜像B。

Byte3:镜像大小,若byte3为0x7C时,则表示该镜像大小为124KB。
Byte4-byte7:用户在固件中可自定义,默认情况下,镜像A中这4bytes均为A的ASCII码(即4个0x41),而镜像B中均为B的ASCII码(即4个0x42)。

2.3、OAD Image Block特征

OAD Image Block特征作为实际固件升级时文件数据流写入的特征,每次写入18bytes数据,其中,2bytes作为block id,16byes作为实际文件流数据。同时,此特征同样可监听,一般情况下,每次写入成功后,硬件会返回3bytes数据(2bytes block id,1byte写入状态)。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值