【BLE】-CC2541 OTA 程序开发手册介绍
来源:互联网 发布:淘宝c店店招全屏代码 编辑:程序博客网 时间:2024/05/23 01:22
1.目的
使开发者能够快速的使用TI BLE 协议栈在CC2541 的SOC上进行TI OAD Profile 功能的开发。
2.功能概要
BLE 协议栈有一个可拓展的特性 OAD,它提供了一种增值服务通过访问编程头的方式并且无需访问物理内存来更新部署设备的代码。OAD是一种客户端-服务器端机制,一个设备作为OAD镜像服务器端(OAD manager),另一个设备作为OAD镜像的客户端(OAD Client)。
3.假设
BLE 的 BIM 从不需要更新。
4.定义、缩写语、首字母缩写
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 设备建立连接。
- 【BLE】-CC2541 OTA 程序开发手册介绍
- 【BLE】-CC2541 GAP API 介绍
- CYPRESS BLE OTA详细介绍
- 【BLE】-CC2541 OSAL操作系统抽象层应用程序接口API介绍
- (BLE)CC2541按键程序大致处理流程
- CC2541 BLE上层架构
- 【BLE】CC2541之notify
- BLE CC2541串口调试
- 【BLE】CC2541之按键
- 【BLE】CC2541之RSSI
- 【BLE】CC2541之OLED
- 【BLE】CC2541之indicate
- 【BLE】CC2541之timer3
- 【BLE】CC2541之看门狗
- 【BLE】CC2541之SNV
- 【BLE】CC2541之OAD
- 【BLE】CC2541之PWM
- 【BLE】CC2541之OAD
- vnc服务
- C# AES加密解密
- 第七周 项目3 负数把正数赶出队列
- is Not on Any Development Teams in Xcode7.2
- Spring数据库数据源JDBC连接池连接MySQL的超时问题
- 【BLE】-CC2541 OTA 程序开发手册介绍
- 8大排序算法图文讲解
- "xliff:g"标签
- MYSQL定时调度执行SQL语句
- 有了深度学习,传统的机器学习算法没落了吗,还有必要去学习吗?
- [数据结构与算法]二叉树与二叉树遍历
- BST中第K小的元素
- 如何学习
- HDOJ 5339 Untitled