【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.定义、缩写语、首字母缩写
Term | Definition |
---|---|
API | Application Programming Interface 应用程序接口 |
BIM | Boot Image Manager 通过复位中断向量表并且判断哪一个有效Image运行 |
BEM | Boot Encrypted Manager 编码BIM的版本号 |
DL | Down-Loaded |
INSTALL_DIR | The installation directory path of the protocol stack |
ISR | Interrupt Service Routine 中断服务程序 |
IVEC | Interrupt Vectors中断向量表 |
LPRF | Low Power RF低功耗射频 |
NV | Non-volatile storage 非易失存储 |
OSAL | Operating System Abstraction Layer操作系统抽象层 |
OA | Over-the-Air |
OBL | OAD Boot Loader |
OAD | Over-the-Air Download |
PM | Power-Mode |
SOC | System on a Chip |
SNV | Simple Non-volatile memory manager |
TI | Texas 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 设备建立连接。
相关文章推荐
- Dev-Cpp/Mingw32 开发环境介绍(3):程序调试
- User Interface Process 中文使用手册(三)(本程序代码是在.Net2005开发的)
- GeoServer开发手册3 介绍、工具、源代码三章
- Android开发二:我的第一个程序及框架介绍
- 韩顺平_轻松搞定网页设计(html+css+javascript)_第19讲_js运行原理_js开发工具介绍_js程序(hello)_js基本语法_学习笔记_源代码图解_PPT文档整理
- 手机程序开发技术介绍
- Objective-C开发环境介绍以及Cocoa,以及第一个程序
- 《PL/SQL 语言开发参考手册》之二:PL/SQL 程序结构
- 网页制作程序开发学习手册大全
- 使用Lucene开发自己的搜索引擎–(3)indexer索引程序中基本类介绍
- 手机程序开发技术介绍
- [黑莓开发之路][01][黑莓开发平台介绍][04][Java Application Development][JavaME程序开发]
- [黑莓开发之路][01][黑莓开发平台介绍][03][Rapid Application Development][快速程序开发]
- 《PL/SQL 语言开发参考手册》之二:PL/SQL 程序结构
- 系统分析师UML实物手册-MDA开发程序
- 手机程序开发技术介绍
- 手机程序开发技术介绍
- Symbian OS 开发初级手册 (3)GUI程序中的4个基本类
- 用WPF+MongoDB开发房产信息收集器(4)——房产信息采集器总体介绍附程序下载
- [置顶] Objective-C开发环境介绍以及Cocoa,以及第一个程序