【BLE】OTA基础知识详解

【BLE】OTA基础知识详解

一、 概念

1. 缩写

  • BIM
    Boot Image Manager , the software bootloader
  • CRC
  • cyclic redundancy check
  • Client Characteristic Configuration Descriptor
  • SNV
  • Simple Non-Volatile storage
  • CCFG
  • Customer Configuration Area, contains lock-bits on flash page 31

2. OAD类型

1) On-chip

  • Image存放在内部Flash中,是单芯片OAD解决方案
    2) Off-chip

  • Image存放在外部Flash中,是双芯片OAD解决方案
    这里写图片描述

3. OAD元数据

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-HyoWL9Pu-1657622397185)(https://myphotos-1257188211.cos.ap-shanghai.myqcloud.com/img/202207120118490.png)]

1) CRC和CRC影子

CRC,即循环冗余校验,是一种检查image文件的方式,用以确保image文件完好无损。检查过程分作两步:首先,当映像文件从工具链生成的时候,必须计算CRC并将其存储在元数据向量区的CRC字段,这份初始的CRC将会通过OAD服务被发送出去;然后,目标机需要确认映像在传输的过程中没有发生错误,所以目标机会重新计算下载映像的CRC并将其存储在元数据向量区的CRC影子字段。

如果CRC和CRC影子的内容相同,目标机会认为映像在空中传输过程中没有损坏。

CRC计算使用的算法叫做CRC-16-CCITT,这是一种至少能够排查出99.9984%错误的16位CRC计算方法。

2) Version

image version字段用来追踪映像的版本并确保升级的兼容性,用户可以实现它们自己的版本管理方案。至于具体的版本检查是如何实现的,请参考Off-chip和On-chip的具体实例。

3) Length

Length字段用来描述image的长度,单位是words,关于word的具体长度,在On-chip中是EFL_OAD_ADDR_RESOLUTION,在Off-chip中是HAL_FLASH_WORD_SIZE.

使用不同外部Flash的OAD用户可能需要调整EFL_OAD_ADDR_RESOLUTION的长度来来匹配他们的器件,对于On-chip用户,CC2640的word是固定长度的。

4) UID

TI OAD配置没有用到该字段,但是如果用户想要添加他们自己的基于UID的映像验证的实现,这是很好的引子。

对于On-chip OAD,惯例是Image A嵌入‘A’, ‘A’, ‘A’, ‘A’,Image B嵌入‘B’,‘B’, ‘B’, ‘B’,Off-chip默认嵌入‘E’, ‘E’, ‘E’, ‘E’。

5) Start Address

Start Address是image在内部Flash中存储的首地址,和length字段相似,该字段用words计量。Off-chip的解决方案是根据映像的类型在start address处放置限制条件。

注意:对于On-chip的解决方案,该字段在元数据区被保留,因为它使用一种基于the internal flash memory map (OAD_IMG_D_PAGE)的混合起始地址。

6) Image Type

在带有外部Flash的Off-chip OAD系统中,有多种类型的image可以被上传,这些映像类型包括:App + Stack, App only, Network Processor, or Stack only.

注意:当使用Stack only设置时,用户必须确保在已有的image和上传的image之间App/Stack边界没有发生改变。因为在APP/Stack边界之间没有实时检查,如果Stack边界增长,就会覆盖已有的APP内容。在使用这项设置时用户尤其要注意。

如果需要改变边界(比如Stack增长或缩小),用户最好将App+Stack合并上传以确保image可以运行。

注意:对于On-chip的解决方案,该字段在元数据区被保留,因为它基于上面提到的image version字段的最小有效位(the least significant bit)来确定Image Type。

支持的映像类型如下:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-t9iMMLSY-1657622410429)(https://myphotos-1257188211.cos.ap-shanghai.myqcloud.com/img/202207120118837.png)]

7) Image State

Image state是只能在Off-chip解决方案中使用的一比特元数据区字段。该状态告诉BootLoader映像是否准备好运行或正在运行中。这避免了在每次引导程序启动时BootLoader会从外部Flash拷贝相同的image到内部Flash。
注意:对于On-chip的解决方案,该字段在元数据区被保留,因为the OAD reset service handles switching between images in the bootloader.

4. OAD特征值

1) Image Identify

映像识别特征值用来在下载器和目标机之间交换映像元数据。当下载器发送OAD映像的16比特元数据到目标机时,OAD过程开始。收到元数据之后,目标机会做一些计算来决定是否下载该映像。向该特征值的客户端特性配置描述符写“01:00”,拒绝元数据的通知将会启动。

注意:在On-chip和Off-chip两种方式之间,OAD是否被接收的条件是相似的,关于映像拒收条件的更多信息请参考各自相关部分。

如果目标机接收映像,它会通过向image Block特征值发送一个通知来请求第一块存储区的方式继续OAD传输。另外,目标机会通过发回部分现有映像元数据的方式来拒收映像。拒收元数据信息包括映像版本、长度和用户ID字段,关于这些字段的更多信息请参考元数据部分。

2) Image Block

映像区块特征值用来请求和传输OAD映像区块,向该特征值的客户端特性配置描述符写“01:00”,区块请求的通知将会启动。目标机通过向下载器发送一个带有区块请求序号的GATT通知来请求下一个映像区块,下载器会根据区块序号和16比特的OAD映像区块来发出响应信号。映像区块包含从OAD映像偏移区块序号个的真实的二进制数据。

3) Image Count

映像计数特征值用来设置将被下载的OAD映像的数量,这只在Off-chip方式中被用到,默认值是1。注意:On-chip方式在每次会话时只支持单次映像下载。

4) Image Status

映像状态特征值被用来标志OAD过程中可能发生的各种各样的错误,下载器可以利用这些信息判断出OAD失败的原因,然后纠正错误再次尝试。向该特征值的客户端特性配置描述符写“01:00”,状态更新的通知将会启动。默认情况下,定义了四种不同的状态信息,如果需要用户可以添加这些信息,并使用OAD_sendStatus()函数向下载器发送状态更新。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-T5MNyvLz-1657622418818)(https://myphotos-1257188211.cos.ap-shanghai.myqcloud.com/img/202207120119869.png)]

5. OAD过程

1) OAD过程的初始化

在建立新的连接之后,为了更快的进行OAD传输需要更新连接间隔,同时在OAD目标机上建立OAD映像识别和OAD映像区块特征值的通知服务,下载器将会向位于OAD目标机上的映像识别特征值写信息。这条信息就是将要下载的OAD映像信息的起始部分。

这里写图片描述

在收到向映像识别特征值写请求的前提下,OAD目标机会比较即将下载的OAD映像和已有的OAD映像。默认情况下,只有映像大小和标识映像类型(A/B)的版本号被检查后,才能决定新的映像是否被接收下载。
如果OAD目标机决定接收OAD映像,目标机会通过向下载器通知映像区块传输特征值来请求第一块新映像的方式对OAD过程进行初始化。相反,如果目标机发现新的映像不符合启动OAD过程的条件,它会通过使用它已有的映像头部数据作为拒收信号通知映像识别特征值的方式来响应。在这种情况下,OAD过程会在图11中画大X的地方停止。

2) 映像区块传输

映像区块传输特征值允许两个器件对OAD映像进行请求和回应,一次一个区块。映像区块大小被定义为16比特——see OAD_BLOCK_SIZE in oad.h. OAD目标机会通过使用相应的区块信号通知OAD映像区块特征值的方式向下载器请求映像区块,下载器会通过向OAD映像区块特征值写信息的方式对此作出回应,信息的内容是随后的相应16比特映像区块的被请求的区块序号。不过什么时候,只要OAD目标机准备好了接收OAD映像的另一个区块,它就会使用想要的映像区块序号来通知映像区块传输特征值,下载器随后就会响应。

3) OAD过程的完成

在OAD目标机接收完最后一个映像区块之后,会通过计算存储在OAD映像中的CRC来验证映像是否被正确接收和存储。OAD目标机接下来就会废除已有的映像然后重启,BIM引导程序会启动新的映像。接下来的重点在下载器上,它在验证和安装过程中会先失去跟OAD目标机的连接,然后重新开始扫描,重新建立连接,并验证新的映像是否正确运行。

二、 Off-chip OAD

1. Off-chip OAD的限制和要求

使用CC2640F128内部Flash的第一页和最后一页,或者说总共用了8KB,这部分是为了中断向量和BIM程序专门保留的。该Flash的第31页,或者说最后一页(起始地址0x1F000)是BIM程序和CCFG共享的。不管是第一页还是BIM程序都不是为Off-chip OAD上传而专门设计的。

如果要进行整个Flash区域的升级,需要一个至少拥有120KB以上空间的外部Flash器件来存储一个16比特的映像元数据区块。

被下载到外部Flash存储区的OAD映像可以是一个应用层映像、一个协议栈映像、一个应用层和协议栈混合的hex映像、一个为NP升级设计的映像或者任何其他类型的映像,只要该映像支持替换掉片上Flash 120KB区域(位于第一页和最后一页之间)的功能即可。在系统启动紧接着执行BIM引导程序把已经下载的映像从外部Flash存储区拷贝到内部Flash存储区之前,可以下载不止一份映像。

因为在外部Flash上第0页不能被更新,所以应用程序必须在Flash中包含他自己的TI-RTOS实例,而不是依赖于TI-RTOS存储在ROM中的实现(更多信息请参考10.3)。另外,应用程序还必须包含OAD配置,这是为了下一次在内部Flash上运行时的OAD升级做准备,因为外部Flash不需要任何类似于内部Flash上Image A的OAD应用程序。

任何时候都不要尝试对Flash的第一页和最后一页进行更新,因为对其中任何一页的更新操作都会使器件崩溃,除非对其进行重新编程(physically reprogrammed)。

On-chip OAD目标机只能接收一份应用层OAD映像,但是Off-chip OAD目标机可以接收多达3份OAD映像。通常情况下,下载器都会生成适合Off-chip OAD的映像元数据,但是Python脚本也能够嵌入元数据到映像中(详情见10.2),该元数据在传输时被嵌入到Off-chip OAD映像的开头处,在存储时被单独存储在外部Flash中。

2. OAD目标机

1) Off-chip OAD目标机的存储详情

这里写图片描述

Off-chip OAD目标机同时拥有内部Flash和外部Flash存储器件,内部Flash包含中断向量表、BLE协议栈、嵌入OAD配置的应用层程序、BLE协议栈映像、NV存储区、BIM引导程序和CCFG(用户配置区域)。

外部Flash包含高达3个OAD映像和相应的3个元数据区,每个OAD映像占用128KB的Flash空间,Off-chip OAD目标机的存储区域划分如上图所示。每一个OAD映像,如果既不是APP only也不是APP+Stack,就必须支持OAD Profile,这是为了以后的OAD升级做准备。

3. Off-chip OAD的BIM

OAD解决方案需要一个永久驻留的引导程序,BIM(Boot Image Manager)的存在提供了一个故障安全的机制,它可以决定是运行已有的映像程序还是从外部Flash拷贝一个新的映像文件/文件包到内部Flash。假设一个有效的存储在外部Flash上的映像文件准备好了被拷贝或者在任何给定的时间可以被转移到内部Flash上,基于该假设,内部Flash中初始的image文件在外部Flash中并不存在,所以它拥有无效的外部映像元数据,所以Boot-Loader会选择跳到已有映像的入口点。

一开始,BIM会检查外部Flash上的APP映像元数据的status字段来决定是否将image拷贝到内部Flash上。如果status = 0xFF,在发现有效CRC和CRC影子的情况下会拷贝映像;如果status != 0xFF,我们认为内部Flash上的应用程序正在运行中。如果发现一个两比特的值既不是0x0000也不是0xFFFF,而是0xFFFF的影子校验和,BIM会计算该映像的CRC,映像长度由元数据决定,也被存储在内部Flash紧邻CRC的区域,这些都在第一次从外部Flash写入映像时被拷贝过来了。

如果外部Flash中有一个坏掉的映像文件即将被上传,BIM程序就会被添加NO_COPY 标志来跳过映像检查,直接跳到已经被放到内部Flash上的image,内部image可以是坏掉映像的元数据无效,或者重新OAD一个新的映像文件放在坏掉映像的位置上。BIM不能够下载任何新的映像,除非在build的时候没有定义NO_COPY。

BIM只在启动时对APP映像的故障安全负责,这里的APP指的是APP only或者是APP+STACK,BIM只针对APP映像有一个入口。
BIM和CCFG共享Flash的最后一页,并且使用位于Flash第一页的中断向量表,该表有一个复位中断向量负责BIM程序的启动,以确保在启动之后BIM对系统的控制权。

这里写图片描述

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: ESP32 BLE OTA是指使用蓝牙低功耗BLE)技术进行在线固件升级(OTA)。ESP32是一款功能强大的微控制器,具有集成的蓝牙功能,可以通过BLE连接与其他设备进行通信。 蓝牙低功耗BLE)是一种无线通信协议,用于设备之间短距离的通信,具有低功耗和低延迟的特点。通过BLE连接,ESP32可以与其他设备进行数据传输,比如智能手机、电脑等。 OTA是指通过网络将设备的固件升级到最新版本的过程。传统的OTA需要通过WiFi或以太网连接到服务器下载升级包,然后将其写入设备中。然而,ESP32 BLE OTA可以通过BLE连接直接从远程服务器下载和安装升级包,无需额外的网络连接。 ESP32 BLE OTA可以使设备实现即时更新,提供更好的用户体验。通过BLE连接,可以在没有网络连接的情况下完成OTA,这对于一些特定场景(如智能家居设备)是非常有用的。 为了实现ESP32 BLE OTA,需要进行以下步骤: 1. 在设备上实现BLE连接和基本的数据传输功能。 2. 设计OTA协议,定义升级包的格式和传输方式。 3. 开发远程服务器,存储设备的固件升级包。 4. 设计客户端应用程序,通过BLE连接设备并发送OTA升级请求。 5. 设备接收升级请求后,连接到远程服务器并下载升级包。 6. 下载完成后,设备将升级包写入其存储器中,并进行相关验证。 7. 设备在确认升级包正确后,启动固件升级过程,更新自身的固件版本。 总而言之,ESP32 BLE OTA利用蓝牙低功耗技术实现在线固件升级,提供了便捷和即时更新的方式,适用于各种嵌入式设备和物联网应用。 ### 回答2: ESP32的BLE OTA(Over-the-Air)是指通过蓝牙低功耗BLE)无线技术对ESP32固件进行远程更新的方法。在传统的固件更新过程中,我们通常需要通过连接电脑或其他设备来更新固件,而使用BLE OTA可以通过蓝牙连接,使得固件更新更加方便和灵活。 BLE OTA的实现主要依赖于ESP32的蓝牙传输特性和OTA技术。首先,ESP32作为一个支持蓝牙的芯片,可以通过BLE连接与其他设备进行通信。其次,OTA技术是指在不连接物理线缆的情况下,对设备固件进行更新的技术。 具体实现BLE OTA的步骤如下: 1. 首先,确保ESP32已经连接上了蓝牙设备,比如手机或电脑。 2. 通过编程在ESP32上配置BLE特性和服务,以便与蓝牙设备建立连接并进行数据传输。 3. 在蓝牙设备上开发一个应用程序,用于通过BLE与ESP32进行通信和固件更新。 4. 当需要更新ESP32固件时,蓝牙设备将新固件文件传输到ESP32上。 5. ESP32通过OTA技术将接收到的固件文件进行验证和加载,完成固件更新的过程。 BLE OTA的优点是提供了一种灵活、方便且不受物理线缆限制的固件更新方式。通过蓝牙连接,可以在不接触设备的情况下对其进行远程更新,节省了时间和人力资源。此外,BLE OTA还可以与其他蓝牙应用程序进行集成,实现更多的功能和应用场景,为用户提供更好的体验。 综上所述,ESP32 BLE OTA是一种利用蓝牙低功耗无线技术对ESP32固件进行远程更新的方法。它的实现依赖于ESP32的蓝牙特性和OTA技术,通过BLE连接与蓝牙设备通信,实现灵活、方便的固件更新。这种方法不仅节省了时间和人力资源,还可以与其他蓝牙应用程序集成,提供更多的功能和应用场景。 ### 回答3: ESP32 BLE OTA是指基于蓝牙低功耗BLE)的固件升级技术。ESP32是一款由乐鑫科技推出的低功耗、高性能的Wi-Fi和蓝牙芯片。OTA代表“Over-The-Air”,即通过无线网络进行固件升级。 使用ESP32 BLE OTA可以实现远程固件升级,无需通过有线连接设备进行升级操作。这种技术在物联网应用中非常有用,特别是当设备分布在不同位置,无法方便地进行有线连接时。 ESP32 BLE OTA的工作原理是,首先,将待升级的固件文件上传到中央服务器。然后,通过蓝牙连接将固件文件传输到ESP32设备。设备会确认文件的完整性和正确性,并进行固件升级。这个过程通常是自动化的,并且可以通过手机应用或其他远程控制设备进行操作。 ESP32 BLE OTA具有以下优点: 1. 便捷性:不需要通过有线连接设备进行固件升级,节省了时间和精力。 2. 灵活性:可以通过蓝牙连接实现远程升级,适用于设备分布在不同位置的场景。 3. 可靠性:升级过程中会进行文件完整性和正确性的检查,确保固件的安全性和正确性。 需要注意的是,在实施ESP32 BLE OTA时,需要确保设备具备蓝牙连接功能,并对固件升级过程进行充分的测试和验证,以确保升级的安全性和稳定性。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值