CC2541 Large OAD 空中升级方式

Posted xiaoshideyuxiang

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了CC2541 Large OAD 空中升级方式相关的知识,希望对你有一定的参考价值。

CC2541 OAD 有两种方式,一种是Flash对半分成Image A和Image B的,另一种是Large Image OAD.

Large Image OAD 这种方式的好处是可以通过压缩Image A的方式来提升Image B的存储空间
TI官方的文档是说,可以将Image A压缩至90多KB,因此Image B就有了150多的空间,这相比较于“Flash对半分”的方式就足足多出了30KB,在一些内存资源吃紧的项目上便可发挥作用。

顺便一提,OAD的原理就是利用代码来控制程序的走向,通过在Flash中代码启动处设置一些标志从而控制程序从哪处运行,BIM便充当着控制者的角色,而ImageA和ImageB则是执行的内容相当于一个工程分开两次编译;也正是因为这种特殊的运行模式使得OAD时需要用到BIN文件而不是HEX。

下面介绍如何自己创建一个Large OAD 的Image B:

首先,可以去TI的官方WIKI上面下载一个demo
官方OAD教程

以SimpleBLEPeripheral工程为例,讲述一下在构建过程中要注意的地方

首先去demo中的HIDAdvRemote_OAD_Large_Img_B文件夹里找到source中的cc254x_f256_imgB_Large.xcl放在自己要做的工程的对应位置下


注意:放的位置路径和后面的编译设置有关

打开simple工程rebuild all
建立一个新的编译版本


DEFAULT_ENABLE_UPDATE_REQUEST这个宏可以设置为TRUE
原因是Image B并不参与OAD过程所以自动更新参数会引起升级失败的问题不存在

然后在工程的options设置中弄好预编译路径和预编译宏


FEATURE_OAD_BIM
HAL_IMAGE_B
FEATURE_OAD
OAD_KEEP_NV_PAGES

OAD_IMG_A_PAGE=1
OAD_IMG_A_AREA=47
OAD_IMG_B_PAGE=8
OAD_IMG_B_AREA=(124 - OAD_IMG_A_AREA)

然后在Build Actions中设置

PROJDIR ….\\common\\cc2540\\cc254x_ubl_pp.bat” “ PROJDIR
“ProdUBL” “ PROJDIR \\CC2541_Large_OAD_ImageB\\Exe\\SimpleBLEPeripheral”

注意:这里的路径一定要和“编译版本名”一致,如果不一致会出现如下错误

路径末尾的名称要和生成的hex文件及sim文件保持一致
不一致的话不会出现弹框错误但是也不会生成BIN文件

接下来是Liker里面的设置

PROJDIR ..\\Source\\cc254x_f256_imgB_Large.xcl


下载设置,和“Flash对半分OAD”方式不同,这里可以选择擦除

添加OAD的profile

设置一个版本号

编译,闪过一个运行框就说明OK了,此时BIN文件已生成

至此OAD的Image B部分就完成了,可以升级成功,但是,想要多次升级就需要ImageA和ImageB之间能做到切换自如
因此可以在按键处理函数中或者在蓝牙数据里面定一条数据协议,添加以下代码表示切换成ImageA

uint16 crc[2] =  0x0000, 0xFFFF ;
uint16 addr = OAD_IMG_R_PAGE * ((uint16)(HAL_FLASH_PAGE_SIZE / HAL_FLASH_WORD_SIZE)) + OAD_IMG_CRC_OSET / HAL_FLASH_WORD_SIZE;
HalFlashWrite(addr, (uint8 *)crc, 1);
HAL_SYSTEM_RESET();

OAD方法:
目前只用ios软件测试过
准备工作:给测试模块烧录BIM的hex文件然后用IAR(Download and Debug功能)烧录ImageA的BIN文件;这两个文件使用WIKI中的demo编译出来的就行
首先iphone安装sensorTag,然后连接电脑的itunes,在itunes界面点手机图标->应用里面选择sensorTag然后添加文件。
在手机中打开sensorTag搜索并连接测试模块,进入Sensor View->FW Download->Select FW File 点击要升级的BIN文件即可
整个OAD过程耗时大概两三分钟

以上是关于CC2541 Large OAD 空中升级方式的主要内容,如果未能解决你的问题,请参考以下文章

CC2640之OAD固件升级(外置Flash)

用蓝牙芯片CC2541/CC2540实现一个智能恒温箱

在做cc2541主从一体机时碰到的问题

嵌入式外部中断控制编程方法论—比較CC2541(51核)和S5PV210(ARM核)

CC2540 / CC2541 竟然支持 Bluetooth BLE 5.0?

如何在 Android 和 TI BLE CC2541 之间发送文本?