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。

Byte0

Byte1

Byte2

Byte3

Byte4

Byte5

Byte6

Byte7

版本低字节

版本高字节

-

镜像大小

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写入状态)。

android ble oad,android ble OTA升级(Ti OAD 方案)相关推荐

  1. Android系统(237)---OTA升级基本信息介绍

    OTA升级基本信息介绍 Common types of OTA upgrade include GOTA(Google OTA),MOTA(MTK OTA),  Adups Fota(广升FOTA), ...

  2. Android 系统(208)---OTA升级后概率性出现卡在开机动画界面无法退出

    OTA升级后概率性出现卡在开机动画界面无法退出 OTA升级之后,手机会概率性卡在开机动画界面,log 显示 media.player died: 01-01 20:06:46.273062 288 2 ...

  3. Android 系统(167)----OTA升级常见问题

    OTA升级常见问题 问题现象:在进行 OTA 升级测试时,下载成功了升级包,在点击立即更新后,手机一直处于提示"正在更新中",没能重启进行升级. 问题分析:经过分析发现,因为OTA ...

  4. android怎么ota升级,Android OTA升级过程

    通过网络或直接本地获取到OTA升级包之后,通过程序就可开始Android的升级.本文描述这一过程. 在获取到OTA升级包之后,可以直接通过android.os.RecoverySystem.insta ...

  5. Android OTA升级(2):开启升级过程

    通过网络或直接本地获取到OTA升级包之后,通过程序就可开始Android的升级.本文描述这一过程.   在获取到OTA升级包之后,可以直接通过android.os.RecoverySystem.ins ...

  6. CC2540 Large OAD实现程序无线升级

    CC254x代码量小于128K的可以使用ImageA和ImageB互切的方案,这个是TI比较标准的方案,但是有两个缺点:一是代码量限制的太小了,仅例程编译下来都要110K了,给用户可以扩展的空间太小: ...

  7. android蓝牙4.0 BLE低功耗应用

    转自    http://www.cnblogs.com/zdz8207/archive/2012/10/17/bluetooth_ble_android.html 谈谈几个月以来开发android蓝 ...

  8. 谈谈几个月以来开发android蓝牙4.0 BLE低功耗应用的感受

    谈谈几个月以来开发android蓝牙4.0 BLE低功耗应用的感受 谈谈几个月以来开发android蓝牙4.0 BLE低功耗应用的感受,注明下时间:2012-10-17写的博客,后期更新的也注明了时间 ...

  9. 开发android蓝牙4.0 BLE低功耗应用的感受

    文章转自: http://www.cnblogs.com/zdz8207/archive/2012/10/17/bluetooth_ble_android.html 谈谈几个月以来开发android蓝 ...

最新文章

  1. AIFramework框架Jittor特性(上)
  2. 让协同工作更加轻松——Office 2007面面观之(8)
  3. boost::regex模块部分正则匹配相关的测试程序
  4. Storage API简介和存储限制与逐出策略
  5. 第三次学JAVA再学不好就吃翔(part35)--多态向上转型和向下转型
  6. python的特殊方法介绍
  7. BZOJ-1055 玩具取名
  8. linux服务器安装centos7,Linux服务器Centos7安装搭建FTP服务器的方法步骤
  9. [Java]zxing生成qrcode二维码,带水印图片,中间带一个logo
  10. Roslyn 如何获得一个类的引用
  11. 纳韦斯托克斯方程的推导_纳维-斯托克斯方程(N-S方程)详细推导.ppt
  12. 关于DSP28335CCS6编译报错error #10099-D: program will not fit into available memory.
  13. 微型计算机原理及接口技术张云龙答案,电子职业技能训练报告2.docx
  14. LaTeX 参考文献的处理
  15. hazy的面试小笔记之Java(持续更新)
  16. Vue v-modle理解
  17. Matlab2014b GUI封装exe方法
  18. JAVA有关NFC读卡器读取数据
  19. 广告发布内容审核与广告违禁词检测工具的原理
  20. 锐捷睿易RAP100全新上市 WALL AP也有超高性能

热门文章

  1. 加密解密系列文章之 - ASCII 加密解密(最简单的加密解密) 上
  2. 88是python语言的整数类型_Python学习系列之数据类型(三)
  3. 0 17在c语言中什么意思,exit(0)在c语言中是什么意思
  4. BSOJ2909 Vijos 1474 南邮OJ1573 雷曼兔
  5. 评估指标(Metric)(二)
  6. PalmOS开发教程-5
  7. java:单位长度的转换
  8. 时隔两年陈奕迅推新歌《娱乐天空》 歌词尝鲜
  9. 万字长文详解:2023年手机银行MAU和AUM双增实操宝典
  10. NTP时钟同步服务器在厂站自动化系统中应用探讨