一、简介
本篇以SimpleBLEPeripheral工程为例,使用空中升级功能。
二、实验平台
协议栈版本:BLE-CC254x-1.4.0
编译软件:IAR 8.20.2
硬件平台:cc2541 最小蓝牙模块、ios9.0以下版本的手机、手机端升级工具:TI BLE Multitool App
空中升级大概的过程就是:得到三个文件,一个BIM、一个image_A、一个image_B。
BIM 在协议栈中有现成的工程,不需要改动可以直接用,编译即可,得到hex文件,烧录到2541中,到这一部,为OAD建立好了地基。
image_A文件可以是Hex,也可以是bin文件,hex文件是通过烧录器append到BIM上,bin文件是通过手机端软件替换以后的B文件。从而达到A文件替换B文件、B文件替换A文件的无数次循环升级。
image_B文件和A文件类似。
简单的说 一个BIM.hex+一个image_A.hex 通过烧录器烧到2541中,一个完整的具有空中升级功能的工程就OK了,下次升级用image_B.bin文件替换A文件;再下一次升级用A.bin文件替换B,依次循环。
再来说说我在生成image_A的时候遇到的问题,
1、
解决方法,如图,把16改成8
2、
解决方法: 说Sk_AddService,没有定义,一查这个在文件#include "simplekeys.h" 被定义过了,于是将simpleBLEPeripheral.c中
改成 #include "simplekeys.c"
3、编译没有错以后,一直等在这个地方不动了。
解决方法:问题出在我把协议栈放到了其它盘,不在原来的C盘,所以造成批处理文件路径错误,需要改之前设置的 cc254x_ubl_pp.bat 文件。用文本格式打开,
@echo off
chdir %1\..\..\common\cc2540
start cc254x_ubl_pp.js %2 %3 %4 %5
改成
@echo off
%~d1
chdir %1\..\..\common\cc2540
start cc254x_ubl_pp.js %2 %3 %4 %5
4、要注意的地方是:生成A或者B文件的时候,添加宏编译条件的时候必须是在原有工程设置的基础上添加,就是说要生成正确的A、B文件必须要包含和原工程所有的宏编译条件。
5、如果把 调成了打开更新连接参数,会让空中升级变得非常缓慢,原本只要1分钟左右,会变成需要半小时。解决方法还没有,等待交流。