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