分类: 嵌入式
2015-12-11 12:05:24
原文地址:TI蓝牙BLE空中固件升级(OAD) 作者:awenltp
硬件平台:TI的BLE开发套件 CC2541 Mini Development Kit,包括CC-Debugger、USB Dongle、CC2541 Keyfob Demo
软件环境:IAR Embedded Workbench for 8051 IDE V8.20.2和TI的BLE Device Monitor V1.1.3,同时安装TI的BLE协议栈BLE-CC254x-1.4.0.
一:配置BIM(Boot Image Manger)
打开IAR,打开BLE-CC254x-1.4.0下的工程C:\Texas Instruments\BLE-CC254x-1.4.0\Projects\ble\util\BIM\cc254x\BIM.eww,然后编译,下载到Keyfob Demo中。
图1
二、配置Image A
1. IAR中,选择Project→Edit Configurations,选择New…,如图2所示,添加一个新的配置,起名就叫Image_A,点击OK,这时IAR界面的左边导航部分,就变成Image_A了,如图3。
图2
图3
2. IAR中左侧导航中,找到App文件夹下的keyfobdemo.c文件,双击打开,找到宏定义DEFAULT_ENABLE_UPDATE_REQUEST,将其改为FALSE(原来是TRUE),见图4。否则会影响BLE Device Monitor对其进行空中升级,到时可以再改回来。
图4
3. IAR左侧导航中找到Profile文件夹,点击右键添加oad_target.c和oad_target.h两个文件,见图5,二文件位于C:\Texas Instruments\BLE-CC254x-1.4.0\Projects\ble\Profiles\OAD中。
图5
4. 在IAR导航中找到HAL→Target→CC2540EB→Driver,右键添加文件hal_crc.c,见图6,该文件位于C:\Texas Instruments\BLE-CC254x-1.4.0\Components\hal\target\CC2540EB中。
图6
5. 在刚才的keyfobdemo.c文件中,找到KeyFobApp_Init()函数,在里面添加OADTarget_AddService()函数,见图7.
图7
6. 在keyfobdemo.c的前面,添加引用OAD的头文件,OAD.h和OAD_target.h,见图8.
图8
7. 点击Project→Option…,或直接按Alt+F7,选择C/C++ Compiler,选择Preprocessor,在Additional include directories中添加路径$PROJ_DIR$\..\..\Profiles\OAD,在Defined symbols中添加:
FEATURE_OAD
OAD_KEEP_NV_PAGES
FEATURE_OAD_BIM
HAL_IMAGE_A
图9
8. 点击Project→Option…,或直接按Alt+F7,选择Build Actions,在Post-build command line中添加:
"$PROJ_DIR$\..\..\common\CC2540\cc254x_ubl_pp.bat" "$PROJ_DIRquot; "ProdUBL" "$PROJ_DIR$\Image_A\Exe\KeyFobDemo"
注意,各双引号之间只有一个空格。见图10. 注意图中红框标的部分,Image_A是和之前第1步对应的。
图10
9. 点击Project→Option…,或直接按Alt+F7,选择Linker,选择Config,Linker Configurationfile中勾选Override default,添加C:\Texas Instruments\BLE-CC254x-1.4.0\Projects\ble\common\cc2540\cc254x_f256_imgA.xcl,如图11.
图11
10. 点击Project→Option…,或直接按Alt+F7,选择Linker,选择Output,按图12进行设置。
图12
11. 点击Project→Option…,或直接按Alt+F7,选择Linker,选择Extra Output,勾选Override file,Output format选择Intel-Extended,如图13所示。
图13
12. 点击Project→Option…,或直接按Alt+F7,选择Texas Instruments,选择Download,去掉Erase flash,如图14所示。
图14
13. 编译,下载板子中,编译时可能会出现如图15所示的脚本错误,忽略即可。
图15
三、配置Image B
方法如Image A,也是选择Project→Edit Configurations,选择New…,添加Image_B,如图16. 其他的,在工程中添加文件,文件中添加代码等都已经在配置Image A时完成。
图16
其他要注意的几个地方:
1. 点击Project→Option…,或直接按Alt+F7,选择C/C++ Compiler,选择Preprocessor,将Defined symbols中的HAL_IMAGE_A改成B,见图17.
图17
2. 点击Project→Option…,或直接按Alt+F7,选择Build Actions,修改Post-build command line中的路径,改为Image_B,如图18所示。
图18
3. 点击Project→Option…,或直接按Alt+F7,选择Linker,选择Config,将Linker Configuration file中的文件改为B,如图19所示。
图19
可以编译生成Hex文件后下载,注意,配置Image B生成Hex文件这一步并不是必须的。
四、生成bin文件
这一步是非常重要的,因为空中升级,目前只支持bin文件。以Image B为例,当然,也可以是Image A.
1. 在Image B工程中,点击Project→Option…,或直接按Alt+F7,选择Linker,选择Extra Output,勾掉Override file,Output format选择simple-code,如图20所示。
图20
2. 打开之前添加的OAD_target.c文件,找到宏定义OAD_IMAGE_VERSION,将其改为0x0002(原来是0x0000),如图21所示。
图21
编译后,在EXE文件夹中会生成bin文件。
五、空中升级
有了bin文件就可以进行空中升级了,找开BLE Device Monitor,同时打开KeyFobDemo,按键广播,Monitor会扫描到KeyFobDemo,点击connect之后,在Event log中会出现:
图22
点击file,选择Progame(OAD),选择生成的bin文件,可以看到版本的不同:
图23
点击start,当进行到100%,就完成了固件空中升级。
图24
记录:
1)要把 BLE协议栈BLE-CC254x-1.4.0 安装在C盘,在其他盘符下没有生成bin文件,不知道什么原因。我的系统是win7的,不知道有没有关系。
2)IAR要用8.20版的,血的教训。我用最新的8.30的折腾好几天,没有生成bin文件。8.20版本的下载: 或
附件是我的上下两篇博文的PDF档及TI的官方OAD的文档