您的位置:首页 > 其它

【BLE】-CC2541 OTA 程序开发手册介绍

2016-10-08 10:56 696 查看

1.目的

使开发者能够快速的使用TI BLE 协议栈在CC2541 的SOC上进行TI OAD Profile 功能的开发。

2.功能概要

BLE 协议栈有一个可拓展的特性 OAD,它提供了一种增值服务通过访问编程头的方式并且无需访问物理内存来更新部署设备的代码。OAD是一种客户端-服务器端机制,一个设备作为OAD镜像服务器端(OAD manager),另一个设备作为OAD镜像的客户端(OAD Client)。

3.假设

BLE 的 BIM 从不需要更新。

4.定义、缩写语、首字母缩写

TermDefinition
APIApplication Programming Interface 应用程序接口
BIMBoot Image Manager 通过复位中断向量表并且判断哪一个有效Image运行
BEMBoot Encrypted Manager 编码BIM的版本号
DLDown-Loaded
INSTALL_DIRThe installation directory path of the protocol stack
ISRInterrupt Service Routine 中断服务程序
IVECInterrupt Vectors中断向量表
LPRFLow Power RF低功耗射频
NVNon-volatile storage 非易失存储
OSALOperating System Abstraction Layer操作系统抽象层
OAOver-the-Air
OBLOAD Boot Loader
OADOver-the-Air Download
PMPower-Mode
SOCSystem on a Chip
SNVSimple Non-volatile memory manager
TITexas Instruments Incorporated

5.参考

略,见原文。

6.历史版本

略,见原文

7.设计的约束条件

7.1外部约束

如果应用程序的镜像不满足小于等于一半的内部内存的大小,则必须要给RC-image提供外部的NV内存;本文档暂时不提供该方式的描述。

7.2内部约束

OAD 镜像必须是一个有着完整的BLE 协议栈的应用程序。

8.OAD 设计

8.1 OAD 系统概要

OAD系统,如表1,由两个部分组成:OAD Target 和 OAD Manager。

OAD Target 包含三个部分:启动代码(Boot Image Manager)和两个不同的应用程序区域。启动程序必须在page0因为需要截获8051可复位的复位中断向量。其他的应用程序在接下来的page上,被锁的page,不可以进行写操作或者擦操作。ImageA和ImageB是两个应用程序,也需要占用bank0上的部分 non-banked code区域。这将会在一下描述。

OAD manger包含了空中升级的镜像文件和执行OAD过程的应用程序。



8.2 OAD 目标文件概述

下面是OAD Target使用了BIM功能的环境图表。BIM允许一个imageA只是具有基本的BLE协议栈和OAD升级功能,用来作为升级程序,这样的话imageB就可以尽可能的大了。



【注意】上面说了那么多,反正就是说了有两种升级的方式:

1. ImageA 升级 ImageB,然后ImageB 再升级Image A。条件就是两个程序都要比较小。

2. ImageA 只具有BLE基本的协议栈和OAD功能,每次都是破坏以前的ImageB然后用ImageA来反复的升级ImageB。

8.3功能描述

OAD方式是要求永久启动代码在page0提供一种safe-fail检查的机制决定具体的哪一个image运行。

为了验证image的有效性,一个指定的4-byte的区域作为CRC和CRC-shadow需要被询问。如果2-byte的CRC与2-byte的CRC shadow匹配,该镜像就可以被允许执行。如果CRC是非0值或者非0xFFFF(擦写完的flash值)并且CRC-shadow是0xFFFF(擦写完的flash的值),那么CRC值可以被计算通过整个image大小(该4-byte除外),并且结果和有效的CRC比较然后决定是否image可以被运行。

8.3.1启动镜像管理器(BIM)

1. BIM负责选择要运行的Image,是Image-A,还是Image-B.

2. BIM首先判断Image-B是否存在,如果存在则直接运行Image-B;如果不存在,检测ImageA是否存在,如果存在,则直接运行Image-A;

3. 如果都不存在,则进入PM3模式,也即休眠模式。

伪代码实现如下:
unsigned char image = boot_get_image_Type();
if(image == 'B'){
Jump(B);
}else if(image == 'A'){
Jump(A);
}else{
Jump(PM3);
}


8.3.3.1启动镜像管理 ISR 潜在因素

BIM的IVEC-relay逻辑可以被运行是因为通过优化的集合代码和快速访问IDATA内存区域。每次中断消耗20个cycles在32M-Hz或者是625nano-seconds(纳秒)。(20/(32*10^6) = 0.625*10^-6)。

8.3.2下载码镜像

镜像文件是Image-manager通过无线升级的方式下载到Image-Target中替代Image-Target中的需要被升级的程序。为了是一个有效的镜像文件,CRC-shadow必须是0xFFFF而且CRC必须是非0并且非0xFFFF(CRC是通过整个镜像文件计算的,并且计算不包含4-byte的CRC和CRC-shadow)。该镜像必须运行到指定的imageA/B 位置。

8.3.3ImageA和ImageB

为了能够一个Image(i.e.A)通过OAD升级另外的Image(i.e.B),首先Image(A)必须包含OADTargetProfile。

8.3.4Image-A 概念



8.3.5Image-B 概念



8.4外部接口

8.4.1CRC

每一个image,CRC被IAR编译器计算在指定的内存区域。一下是imageA:

-D_CODE_BEG=0x0830
…
-Z(CODE)CHECKSUM=0x0800-0x0801


8.4.2Image Header

image Header结构体

typedef struct {
uint16 crc1; // CRC-shadow must be 0xFFFF.
uint16 ver; // User-defined Image Version Number
uint16 len; // Image length in 4-byte blocks (i.e.HAL_FLASH_WORD_SIZE blocks).
uint8 uid[4]; // User-defined Image Identification bytes.
uint8 res[4]; // Reserved space for future use.
} img_hdr_t;


镜像的header以CRC struct结构体的方式相邻的放置在一起,因此CRC和CRC-shadow在内存中相邻的靠在一起。如果相应的位置发生改变,所有定义的#define和相关的linker 文件也必须发生改变。镜像的头文件被发送通过OAD Manager与OAD Target 设备建立连接。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: