通常在實現(xiàn)OAD(on-air-download)功能的過程中,TI會提供標準的示例BIM(Boot Image Manager)代碼來進行鏡像校驗和下載。在TI所提供的示例代碼中,BIM代碼一般位于內(nèi)部flash page31,和CCFG相鄰。若用戶根據(jù)自身功能定義不同,需要在BIM代碼區(qū)域增加更多功能(例如自定義UART / SPI boot, 自定義安全校驗功能等等)而導(dǎo)致自定義功能后的BIM代碼超出4k byte,又由于BIM區(qū)域與CCFG及NV Storage Area相鄰,在原有位置不能擴大,只能考慮重新為BIM劃定地址空間來滿足需求。
本文基于LAUNCHXL-CC2650評估板(http://www.ti.com.cn/tool/cn/launchxl-cc2650) 和BLE-STACK-2-2-1 SDK,詳細描述如何將原有的OAD示例代碼所包含的BIM起始地址從0x1F000改到0x1000,并且將BIM的地址區(qū)間從4k擴到8k。
注:所有不同版本的BLE SDK可以在以下網(wǎng)址找到:http://www.ti.com/tool/BLE-STACK-ARCHIVE
此外本文還會談到在進行BIM重定位過程中會遇到的以下問題及其解決方案:
TI RTOS相關(guān)Flash區(qū)域沖突的規(guī)避
新的目標Image有效header的產(chǎn)生
如何修改python工具的腳本生成新的Image
*****************************************************************************************************************
首先關(guān)于BIM起始地址的修改,分以下幾步:
Step1: 修改simple_peripheral project -> cc2650lp_app project的 flash起始地址
Step2: 重新給bim_extflash project 的BIM代碼分配地址空間
Step3: 使用新的BIM分配方式來實現(xiàn)OAD功能
Step1:修改simple_peripheral project -> cc2650lp_app project的 flash起始地址
在IAR7.70/IAR7.8中導(dǎo)入C:\ti\simplelink\ble_sdk_2_02_01_18\examples\cc2650lp\simple_peripheral 文件夾下的項目如下
1) 修改APP_IMAGE_START
打開cc2650lp_app-FlashOnly_OAD_ExtFlash 工程的option--linker—config,將APP_IMAGE_START從0x1000修改成0x3000
2) 修改RTOS運行方式
從項目中打開打開CC2640.cfg,或者直接在以下地址內(nèi)找到這個文件: ble_sdk_2_02_01_18\src\common\cc26xx\kernel\cc2640\config)
注釋掉下圖所示的代碼:
原因:當(dāng)選擇“use BIOS in ROM”方式時,RTOS 的ROM指針會被固定的放在0x1500區(qū)域。這樣就與我們所想要自定義的BIM代碼空間沖突了。而選擇“use BIOS in Flash”的方式可以讓TI-RTOS從FLASH啟動,以避免這個問題。當(dāng)然”use BIOS in Flash”的方式會稍微多占用一些用戶的flash區(qū)域。
3) 修改reset vector的地址
接上一步,在CC2640.cfg中,將m3Hwi.resetVectorAddress 從0x1010修改為0x3010。
原因:這是reset vector的地址,應(yīng)該跟在header后面。
step2:重新給bim_extflash project的BIM代碼分配地址空間
在IAR7.70/IAR7.8中導(dǎo)入C:\ti\simplelink\ble_sdk_2_02_01_18\examples\util\bim_extflash\cc2640文件夾下的項目如下
打開上圖所示的cc26xx_bim_extflash.icf文件,重新定義一個FLASHPAGE1,定義其范圍為8k,把region BIM定義為PAGE1的區(qū)域,并將BIM_START從0x1F000修改到0x1000.
??????
編譯通過后,檢查生成的bim_extflash.map, 確認之前的改成是否有效。
Step3:使用新的BIM分配方式來實現(xiàn)OAD功能
基于step2中的操作,打開同一個項目中如下圖所示的bim_main.c
做如下修改:
重新打開STEP1中修改過的C:\ti\simplelink\ble_sdk_2_02_01_18\examples\cc2650lp\simple_peripheral下的project, 找到
找到圖中所示的oad_target_external_flash.c,做如下修改
以上三步完成后,各自重新編譯成功,即完成了項目需要的所有改動。
*************************************************************************************
其次,為了配合新的地址分配來實現(xiàn)OAD,我們需要生成新的目標Hex待燒錄文件。仍然采用相關(guān)的Python工具(這里使用了Python 2.7.10)來生成需要的新的hex文件(新的文件包含正確的metadata Header)。
注:這里重點說明BIM地址修改后,如何對python腳本進行修改。關(guān)于提到的Python工具的下載和使用說明可以參見BLE SDK中包含的CC2640 BLE OAD User’s Guide.pdf說明文檔中的如下章節(jié),這里不另加贅述。
10.1 Installing Python
10.2 TI OAD Image Tool (Python)
根據(jù)我們之前的修改,已經(jīng)把simple_peripheral project -> cc2650lp_app project的代碼起始地址改成了0x3000,而原來采用的python工具腳本所生成的hex文件,是配置成將header的imgAddr改成0x1000的,與我們需要把起始代碼改成0x3000的需求不符。所以,我們需要對原有python 工具的腳本和相關(guān)操作進行修改,分成以下兩步:
1) 修改oad image的腳本文件( oad_image_tool.py)
該腳本文件位于:C:\ti\simplelink\ble_examples-ble_examples-2.2\tools\scripts\oad文件夾
用PythonGUI打開該文件,將startAddr賦值為0x3000,如下:
2) 修改python 工具的腳本的相關(guān)操作
這里我們會用到兩個Python的argument: -m –r, 來完成修改目標Image的metadata header地址 的目的。
?????
在命令行界面輸入如下命令:
> set PATH=%PATH%;C:\python27\
> Python C:\ti\simplelink\ble_examples-ble_examples-2.2\tools\scripts\oad\oad_image_tool.py C:\Users\x0269290\Downloads\Desktop\ble_sdk_2_02_01_18\examples\cc2650lp\simple_peripheral\iar\app\FlashOnly_OAD_ExtFlash\Exe\simple_peripheral_cc2650lp_app.hex -o C:\Users\x0269290\Downloads\Desktop\ble_sdk_2_02_01_18\examples\cc2650lp\simple_peripheral\iar\app\FlashOnly_OAD_ExtFlash\Exe\Simple_peripheral_cc2650lp_app.hex -m 0x3000 -r :0xD000
(注:根據(jù)python腳本、目標hex、輸出hex所在位置及名稱的不同需要對命令做出對應(yīng)的更改。)
如圖所示:
得到結(jié)果如下:
注:以上例子中的“-m”是用命令給metaAddr賦值。但因為metaAddr(0x3000)大于imgStartAddr(0x1000)導(dǎo)致錯誤,所以在1)中修改python腳本中的對應(yīng)代碼。
審核編輯:何安
-
嵌入式處理
+關(guān)注
關(guān)注
0文章
341瀏覽量
10511
發(fā)布評論請先 登錄
請問如何在 i.MX RT1050 上從多個起始地址運行相同的引導(dǎo)加載程序?
STM32C0x1 基于 Arm? 內(nèi)核的 32 位高級 MCU參考手冊
示例3x3矩陣求和簡析
N9H30如何從SPI閃存將應(yīng)用程序加載到RAM地址0x0?
請問如何使用 NUC220 將應(yīng)用程序從 APROM 0x0000切換到 APROM 0x4000?
Texas Instruments LMR664x0/LMR664x0-Q1降壓轉(zhuǎn)換器數(shù)據(jù)手冊
Texas Instruments LM708x0/LM708x0-Q1 直流-直流降壓轉(zhuǎn)換器數(shù)據(jù)手冊
Texas Instruments MSPM0C110x/MSPM0C110x-Q1/MSPS003混合信號MCU數(shù)據(jù)手冊
如何將源地址 FCANFDx FiF 0 加載到 DMA 線的 SRC 寄存器中?
Texas Instruments LM706x0/LM706x0-Q1降壓轉(zhuǎn)換器數(shù)據(jù)手冊
Texas Instruments MSPM0Lx22x/MSPM0Lx22x-Q1混合信號MCU特性/應(yīng)用/框圖
如何將原有的OAD示例代碼所包含的BIM起始地址從0x1F000改到0x1000
評論