SimpleBLEPeripheral OAD Profile
1.概述:
先对应工程编译准备好BIM.hex和ImageA.hex、ImageB.bin,可用SmartRF Flash Programmer直接烧录BIM.hex和ImageA.hex,先烧录BIM,选择,然后烧录ImageA,选择
。再在PC端用BLE Device Monitor或者苹果手机端用TI BLE Multitool软件进行ImageB.bin文件的升级。
2.配置步骤:
打开相应的工程BIM,BIM工程无需配置。SimpleBLEPeripheral从机工程进行相关工程配置,如下:
ImageB.bin需要在应用开发完成后手动添加OADprofile,使能OAD空中升级功能。
第一步:在Projects\ble\common\cc2540路径下添加cc254x_f256_imgB.xcl文件。打开工程,在HAL目录下添加hal_crc.c文件,在PROFILES目录下添加oad_target.c,oad_target.h,oad.h三个文件。
第二步:在option C/C++Compiler-Preprocessor添加OAD头文件路径$PROJ_DIR$\..\..\Profiles\OAD
添加预处理宏:
FEATURE_OAD
OAD_KEEP_NV_PAGES
FEATURE_OAD_BIM
HAL_IMAGE_B
在linker-config中选择正确的链接文件$PROJ_DIR$\..\..\common\CC2540\cc254x_f256_imgB.xcl。
其他配置如下图:
在Build Actions选项Post-build command line栏中填写:
"$PROJ_DIR$\..\..\common\cc2540\cc254x_ubl_pp.bat""$PROJ_DIR$" "ProdUBL""$PROJ_DIR$\CC2541-OAD-ImgB\Exe\SimpleBLEPeripheral"
最后一对双引号中的参数是生成的bin文件的保存路径及文件名,请根据实际工程自行修改。
第三步:在主simpleBLEPeripheral.c文件中添加头文件包含:
#ifdefined FEATURE_OAD
#include "oad.h"
#include "oad_target.h"
#endif
在Init函数结尾添加oad profile注册函数:
#ifdefined FEATURE_OAD
VOID OADTarget_AddService(); // OAD Profile
#endif
在oad_target.c中修改OAD_IMAGE_VERSION版本,便于区别。
至此,应该可以成功编译并产生bin文件。
另外,ImageA.hex的编译跟ImageB一样,需要注意几点:
1.Options中将C/C++Compiler-Preprocessor里的HAL_IMAGE_B换成 HAL_IMAGE_A
2.BuildActions-post- build command line中OAD-ImgB修改为OAD-ImgA。
3.Linker-configurationlfile中xcl需要替换成如下:
$PROJ_DIR$\..\..\common\CC2540\cc254x_f256_imgA.xcl。
现在可以用BLE Device Monitor或者TI BLE Multitool进行ImageB.bin文件的升级了。
如图是用BLE Device Monitor进行bin文件的升级,整个过程大概一分钟左右,主要看文件大小和传输速度来决定。
补充几点:
1.工程要放在C盘,否则无法生成bin文件;修改批处理文件也可以放在其它盘:
Projects\ble\common\cc2540中cc254x_ubl_pp.bat需要修改为:
@echooff
%~d1
chdir%1\..\..\common\cc2540
startcc254x_ubl_pp.js %2 %3 %4 %5
2.编译优化建议打开。
3.代码中对flash的操作,一定要重新计算合适的操作地址,避免破坏代码。
4.ImageA/ImageB的连接参数决定了OAD的速度,根据需求自行修改。比如:
-
//Minimum connection interval (units of 1.25ms, 80=100ms) if automatic parameterupdate request is enabled
#defineDEFAULT_DESIRED_MIN_CONN_INTERVAL 16//80
//Maximum connection interval (units of 1.25ms, 800=1000ms) if automaticparameter update request is enabled
#defineDEFAULT_DESIRED_MAX_CONN_INTERVAL 16//800
//Slave latency to use if automatic parameter update request is enabled
#defineDEFAULT_DESIRED_SLAVE_LATENCY 0
//Supervision timeout value (units of 10ms, 1000=10s) if automatic parameterupdate request is enabled
#defineDEFAULT_DESIRED_CONN_TIMEOUT 50//1000
//Whether to enable automatic parameter update request when a connection isformed
#defineDEFAULT_ENABLE_UPDATE_REQUEST FALSE //TRUE
更多技术文章浏览请关注:
百家号:
https://author.baidu.com/home?context=%7B%22app_id%22%3A%221646108714303504%22%7D&wfr=bjh
头条号:
https://www.toutiao.com/c/user/8115738721/#mid=1646025109246987