CC2541 OAD升级实现
BLE_OAD升級
1、軟件版本:IAR ?for ?8051 ?10.10.1
2、協議棧:BLE 1.4.0
?
一、獲得BIM。
3、\BLE-CC254x-1.4.0\Projects\ble\util\BIM\cc254x\BIM.eww,編譯出BLE-CC254x-1.4.0\Projects\ble\util\BIM\cc254x\CC254xF256\Exe\BIM_CC254xF256.hex文件
當 A 不存在時,在等待 IAR 或者 Flash Programmer 將 A 通過物理方法寫入芯片內部。?OAD 的實現必須要有 BIM, BIM 負責管理 IMAGE-A 和IMAGE-B,當有合適的 IMAGE-B 存在, BIM 會啟動 B,否則啟動 A。
?
二、自己新建OAD的ImgeA配置
注意:BLE-CC254x-1.4.0\Projects\ble\SimpleBLEPeripheral\CC2541DB\SimpleBLEPeripheral.eww工程默認具有OAD。
1、IAR 中,選擇 Project→Edit Configurations,選擇 New…,如圖 2 所示,添加一個新的配置,起名就叫 Image_A,點擊 OK,這時 IAR 界面的左邊導航部分,就變成 Image_A 了,如圖 3。
?
2、IAR 中左側導航中,找到 App 文件夾下的 simpleBLEPeripheral.c 文件,雙擊打開,找到宏定義DEFAULT_ENABLE_UPDATE_REQUEST,將其改為 FALSE(原來是 TRUE),見圖 4。 否則會影響BLE Device Monitor 對其進行空中升級, 到時可以再改回來。 (有時候不該也可以,不知道原因)
?
3、?IAR 左側導航中找到 Profile 文件夾,點擊右鍵添加 oad_target.c 和 oad_target.h 兩個文件,見圖 5, 二文件位于 C:\Texas Instruments\BLE-CC254x-1.4.0\Projects\ble\Profiles\OAD 中。
4、在 剛 才 的 simpleBLEPeripheral.c 文 件 中 , 找 到 SimpleBLEPeripheral_Init() 函 數 , 在 里 面 添 加OADTarget_AddService()函數,見圖 7.
?
#if defined FEATURE_OAD ??VOID OADTarget_AddService(); ???????????????????// OAD Profile #endif |
#if defined FEATURE_OAD ??#include "oad.h" ??#include "oad_target.h" #endif |
?
5、在 keyfobdemo.c 的前面,添加引用 OAD 的頭文件, OAD.h 和 OAD_target.h,見圖 8.
6、點擊 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
?
$PROJ_DIR$\..\..\Profiles\OAD |
FEATURE_OAD_BIM HAL_IMAGE_A FEATURE_OAD OAD_KEEP_NV_PAGES |
?
7、點擊 Project→Option…,或直接按 Alt+F7,選擇 Build Actions,在 Post-build command line中添加如下路徑字符串。
注意,各雙引號之間只有一個空格。 見圖 10. 注意圖中紅框標的部分, Image_A 是和之前第1 步對應的。
"$PROJ_DIR$\..\..\common\cc2540\cc254x_ubl_pp.bat" "$PROJ_DIR$" "ProdUBL" "$PROJ_DIR$\CC2541-OAD-ImgA\Exe\SimpleBLEPeripheral" |
?
8、點擊 Project→Option…,或直接按 Alt+F7,選擇 Linker,選擇 Config, Linker Configurationfile中 勾 選 Override default , 添 加 $PROJ_DIR$\..\..\common\cc2540\cc254x_f256_imgA.xcl,如圖 11
?
$PROJ_DIR$\..\..\common\cc2540\cc254x_f256_imgA.xcl |
?
9、點擊 Project→Option…,或直接按 Alt+F7,選擇 Linker,選擇 Output,按圖 12 進行設置。
10、點擊 Project→Option…,或直接按 Alt+F7,選擇 Linker,選擇 Extra Output,如圖 13 所示。
?
11、點擊 Project→Option…,或直接按 Alt+F7,選擇 Texas Instruments,選擇 Download,如圖 14 所示。
12、編譯,下載板子中,編譯時可能會出現如圖 15 所示的腳本錯誤,忽略即可。
?
13、文件夾下獲得文件如圖16.則成功。
?
二、自己新建OAD的ImgeB配置
步驟如上。區別如下:
l?IAR 中,選擇 Project→Edit Configurations,選擇 New…,如圖 2 所示,添加一個新的配置,起名就叫 Image_B,點擊 OK,這時 IAR 界面的左邊導航部分,就變成 Image_B 了,如圖 3。
l?點擊 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_B?
l?點擊 Project→Option…,或直接按 Alt+F7,選擇 Build Actions,在 Post-build command line中添加如下路徑字符串。
"$PROJ_DIR$\..\..\common\cc2540\cc254x_ubl_pp.bat" "$PROJ_DIR$" "ProdUBL" "$PROJ_DIR$\CC2541-OAD-ImgB\Exe\SimpleBLEPeripheral" |
?
l?點擊 Project→Option…,或直接按 Alt+F7,選擇 Linker,選擇 Config, Linker Configurationfile中 勾 選 Override default , 添 加 $PROJ_DIR$\..\..\common\cc2540\cc254x_f256_imgB.xcl,如圖 11
$PROJ_DIR$\..\..\common\cc2540\cc254x_f256_imgB.xcl |
?
三、使用SmartRF Flash Programmer 工具燒寫
1、燒寫啟動鏡像管理文件BIM_CC254xF256.hex。 Erase, program and verify OK成功。
?
2、燒寫ImgA鏡像。注意這里燒錄的是 hex 文件, 而 OAD 燒錄用的是 bin 文件;且為append and verify選項。
?
四、使用BLE Device Monito+USB Dongler空中升級。(也可使用 iso 手機應用商店的TI BLE Multitool 工具)
1、連接BLE Device Monitor與USB Dongle
2、使用設備管理器找到USB Dongler 被分配的COM口
3、Options->Serial port 中設定COM
?
4、點擊“scan”掃描設備。
?
5、選中設備,點擊“connect”連續設備。會發現可OAD升級的設備服務。
?
6、OAD升級。點擊File-Program(OAD),選擇要下載的ImageB的bin后,點Start。
?
五、軟件版本和用戶ID管理。
方法1:直接更改buildConfig.cfg
//?OAD?Image?Version?(0x0000-0x7FFF)? -DOAD_IMAGE_VERSION=0x0000?? |
方法2:屏蔽掉buildConfig.cfg中的-DOAD_IMAGE_VERSION=0x0000后;點擊 Project→Option…,或直接按 Alt+F7,選擇 C/C++ Compiler,選擇 Defined symbols 中添加宏:OAD_IMAGE_VERSION=1
方法3:屏蔽掉buildConfig.cfg中的-DOAD_IMAGE_VERSION=0x0000后;oad_target.c 文件中直接設置:
版本 | #if !defined (OAD_IMAGE_VERSION) ??#define OAD_IMAGE_VERSION ???0x0000 #endif |
用戶ID | #if !defined (OAD_IMAGE_A_USER_ID) ??#define OAD_IMAGE_A_USER_ID ?{'A', 'A', 'A', 'A'} #endif ? #if !defined (OAD_IMAGE_B_USER_ID) ??#define OAD_IMAGE_B_USER_ID ?{'B', 'B', 'B', 'B'} #endif |
?
?
問題記錄
問題1: | 2018-01-01 |
現象 | Error[e16]: Segment ISTACK (size: 0xc0 align: 0) is too long for segment definition. At least 0xd more bytes needed. The problem occurred while processing the segment placement command ?"-Z(IDATA)ISTACK+_IDATA_STACK_SIZE#_IDATA_BEG-_IDATA_END", where at the moment of placement the available memory ranges were "IDATA:4d-ff" |
解決1 | Options..->General Options中的Stark/Heap 選項卡,將IDATA 0xC0 改為 0xB0 |
解決2 | C:\Texas Instruments\BLE-CC254x-1.4.0\Projects\ble\common\cc2540\ti_51ew_cc2540b.xcl 將下面-Z(DATA)VREG+_NR_OF_VIRTUAL_REGISTERS=08-7F 改成-Z(DATA)VREG=08-7F |
原因 | IAR版本問題:8.30后會出現本問題。 |
?
?
總結
以上是生活随笔為你收集整理的CC2541 OAD升级实现的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Python运行助手安装
- 下一篇: 《精益思想》