CC2640之OAD固件升級(內置Flash)手動配置ImageB

測試環境


協議棧版本:BLE-STACK V2.1

IAR開發環境版本:IAR for Arm 7.40

硬件設備:Amo-SmartRF v2.0 開發板(對應TI官方的SmartRF06EB 開發板)

示例測試Demo工程:HeartRate工程

測試工具:BLE Device Monitor(PC)




配置ImageB

 

我們選擇HeartRate工程來做演示,因爲協議棧中的一些工程本身就已經配置ImageB,而HeartRate工程本身默認是沒有配置ImageB的

 

1.CC2640App中基於現有工程配置FlashROM創建一個新的工程配置,點擊IAR菜單欄上Project,下拉菜單中選擇Edit Configurations...,操作截圖如下:



點擊之後,彈出如下對話框:




輸入新的工程配置名FlashOnly_OAD_ImgB,然後點OK之後顯示如下:



繼續點OK,當前的工程配置就會切換到FlashOnly_OAD_ImgB。如下所示:



2.在工程名CC2640App-FlashOnly_OAD_ImgB上點擊鼠標右鍵,下拉菜單中選擇Options...,彈出工程配置對話框,截圖如下:



在上圖的配置框中,我們對其中的選項做如下配置:

(1)點擊C/C++ Compiler---->Preprocessor

在下面的Additional include directories:(one per line)中輸入:

$PROJ_DIR$/../../../../../../../Projects/ble/Profiles/OAD/CC26xx

Defined symbols:中輸入:

ICALL_STACK0_ADDR=0xF000
FEATURE_OAD_ONCHIP
IMAGE_INVALIDATE
HAL_IMAGE_B

操作截圖如下:



另外,注意HeartRate的工程默認是不廣播的,我們爲了方便測試,修改爲開機啓動就廣播,所以我們需要將ADVERTISE_WHEN_NOT_CONNECTED定義爲TRUE,截圖如下:



注意:這個地方要根據你自己的工程情況來定,不是ImageB配置過程中必須嚴格參照修改的。


(2)點擊Build Acions

Post-build command line:下的輸入框中輸入:

python "C:\Python27\Scripts\hex2bin.py" -r "6000:EFFF" 
"$PROJ_DIR$\FlashOnly_OAD_ImgB\Exe\HeartRateAppFlashROM.hex"
"$PROJ_DIR$\FlashOnly_OAD_ImgB\Exe\OADbin.bin"

這裏有幾點需要注意的:

首先,上面三行輸入進去的時候,每兩行之間是一個空格,如果最後沒有編譯成功,就把全部命令複製出來確認一下。其次,注意路徑和文件名,比如:

"$PROJ_DIR$\FlashOnly_OAD_ImgB\Exe\HeartRateAppFlashROM.hex"

這一條中的路徑是我工程中的路徑,確定下你的是不是,不是就改一下,而HeartRateAppFlashROM.hex文件是編譯生成的hex文件,確定下你的工程生成的文件名,然後對應修改一下。

 

上述操作截圖如下:


(3)點擊Linker---->Config

Linker configuration file”下選擇或者直接輸入:

$PROJ_DIR$\..\..\..\..\..\common\cc26xx\IAR\cc26xx_ble_app_oad.icf

Configuration file symbol definitions:下輸入:

FLASH_ONLY_BUILD=1

操作截圖如下:



(4)點擊Linker---->Checksum

默認的配置截圖如下:



首先,將Fill unused memory前的小框打上勾,然後將Start的值改爲0x6004,將End address的值改爲0xEFFF。其次,將Generate checksum前的小框打上勾,確定Algorith選擇的是CRC16,並且其值爲0x1021,默認的值並不是這個,而在CRC16模式下不能改這個值,所以我們先將Algorith選擇爲CRC polynomial,然後將後面的值修改爲0x1021,然後再將Algorith選擇爲CRC16

 

修改之後的截圖如下:



這樣,工程配置文件中的修改就結束了。

 

3.在IAR左側工作區,右鍵點擊PROFILES文件夾,下拉菜單選擇Add,然後選擇Add Files...,操作截圖如下:



點擊之後,彈出如下文件選擇框,然後到

C:\ti\simplelink\ble_cc26xx_2_01_00_44423\Projects\ble\Profiles\OAD\CC26xx路徑下選擇oad.coad.hoad_target_internalFlash.coadResetService.c四個文件,操作截圖如下:



選中之後,點打開即可。

 

4.當ImageB升級的時候,如果Flash中的page 0不能被升級,那ImageB就不應該使用ROM中的TI-RTOS,所以需要將

C:\ti\simplelink\ble_cc26xx_2_01_00_44423\Projects\ble\SimpleBLEPeripheral\CC26xx\IAR\Config目錄下的appBLE.cfg文件開頭的如下兩行代碼屏蔽掉:

//var ROM = xdc.useModule('ti.sysbios.rom.ROM');
//ROM.romName = ROM.CC2650;

操作截圖如下:



5.配置添加使ImageB無效化的服務和特徵值

打開

C:\ti\simplelink\ble_cc26xx_2_01_00_44423\Projects\ble\HeartRate\CC26xx\Source\Application目錄下的heartRate.c文件。

 

(1)頭文件引用部分添加如下代碼:

#if defined(FEATURE_OAD) || defined(IMAGE_INVALIDATE)
#include "oad_target.h"
#include "oad.h"
#endif //FEATURE_OAD || IMAGE_INVALIDATE

(2)在HeartRate_init初始化函數中添加如下代碼:

#ifdef IMAGE_INVALIDATE
	Reset_addService();
#endif //IMAGE_INVALIDATE  

操作截圖如下:



6.重新編譯CC2640App,會在如下路徑下:

C:\ti\simplelink\ble_cc26xx_2_01_00_44423\Projects\ble\HeartRate\CC26xx\IAR\Application\

CC2640\FlashOnly_OAD_ImgB\Exe

下生成OADbin.bin文件,這就說明配置編譯完成了。




修改ImageB的版本號

 

打開C:\ti\simplelink\ble_cc26xx_2_01_00_44423\Projects\ble\Profiles\OAD\CC26xx目錄下的oad_target_internalFlash.c文件,在文件的開頭有個定義版本的宏:

#if !defined (OAD_IMAGE_VERSION)
  #define OAD_IMAGE_VERSION    0x0000
#endif // OAD_IMAGE_VERSION

如果我們想把ImageB的版本修改爲1,那我們就如下修改即可:

#if !defined (OAD_IMAGE_VERSION)
  #define OAD_IMAGE_VERSION    0x0001
#endif // OAD_IMAGE_VERSION

修改之後,重新編譯ImageB即可。

 

 

這樣,我們的ImageB手動配置的過程就瞭解完了,如果你的工程本身沒有配置ImageB,那你就可以參照上面的方法進行配置。至於燒錄過程以及整個OAD的過程可以參看另一篇博文,鏈接地址如下:


點擊打開OAD配置升級的博文鏈接








發佈了66 篇原創文章 · 獲贊 207 · 訪問量 64萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章