發布日期:2022-04-28 點擊率:30
Other Parts Discussed in Post: LAUNCHXL-CC2650, CC2640
通常在實現OAD(on-air-download)功能的過程中,TI會提供標準的示例BIM(Boot Image Manager)代碼來進行鏡像校驗和下載。在TI所提供的示例代碼中,BIM代碼一般位于內部flash page31,和CCFG相鄰。若用戶根據自身功能定義不同,需要在BIM代碼區域增加更多功能(例如自定義UART / SPI boot, 自定義安全校驗功能等等)而導致自定義功能后的BIM代碼超出4k byte,又由于BIM區域與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的地址區間從4k擴到8k。
注:所有不同版本的BLE SDK可以在以下網址找到:http://www.ti.com/tool/BLE-STACK-ARCHIVE
此外本文還會談到在進行BIM重定位過程中會遇到的以下問題及其解決方案:
TI RTOS相關Flash區域沖突的規避
新的目標Image有效header的產生
如何修改python工具的腳本生成新的Image
*****************************************************************************************************************
首先關于BIM起始地址的修改,分以下幾步:
Step1: 修改simple_peripheral project -> cc2650lp_app project的 flash起始地址
Step2: 重新給bim_extflash project 的BIM代碼分配地址空間
Step3: 使用新的BIM分配方式來實現OAD功能
Step1:修改simple_peripheral project -> cc2650lp_app project的 flash起始地址
在IAR7.70/IAR7.8中導入C: isimplelinkle_sdk_2_02_01_18examplescc2650lpsimple_peripheral 文件夾下的項目如下
1) 修改APP_IMAGE_START
打開cc2650lp_app-FlashOnly_OAD_ExtFlash 工程的option--linker—config,將APP_IMAGE_START從0x1000修改成0x3000
2) 修改RTOS運行方式
從項目中打開打開CC2640.cfg,或者直接在以下地址內找到這個文件: ble_sdk_2_02_01_18srccommoncc26xxkernelcc2640config)
注釋掉下圖所示的代碼:
原因:當選擇“use BIOS in ROM”方式時,RTOS 的ROM指針會被固定的放在0x1500區域。這樣就與我們所想要自定義的BIM代碼空間沖突了。而選擇“use BIOS in Flash”的方式可以讓TI-RTOS從FLASH啟動,以避免這個問題。當然”use BIOS in Flash”的方式會稍微多占用一些用戶的flash區域。
3) 修改reset vector的地址
接上一步,在CC2640.cfg中,將m3Hwi.resetVectorAddress 從0x1010修改為0x3010。
原因:這是reset vector的地址,應該跟在header后面。
step2 :重新給bim_extflash project 的BIM代碼分配地址空間
在IAR7.70/IAR7.8中導入C: isimplelinkle_sdk_2_02_01_18examplesutilim_extflashcc2640文件夾下的項目如下
打開上圖所示的cc26xx_bim_extflash.icf文件,重新定義一個FLASHPAGE1,定義其范圍為8k,把region BIM定義為PAGE1的區域,并將BIM_START從0x1F000修改到0x1000.
編譯通過后,檢查生成的bim_extflash.map, 確認之前的改成是否有效。
Step3:使用新的BIM分配方式來實現OAD功能
基于step2中的操作,打開同一個項目中如下圖所示的bim_main.c
做如下修改:
重新打開STEP1中修改過的C: isimplelinkle_sdk_2_02_01_18examplescc2650lpsimple_peripheral下的project, 找到
找到圖中所示的oad_target_external_flash.c,做如下修改
以上三步完成后,各自重新編譯成功,即完成了項目需要的所有改動。
*************************************************************************************
其次,為了配合新的地址分配來實現OAD,我們需要生成新的目標Hex待燒錄文件。仍然采用相關的Python工具(這里使用了Python 2.7.10)來生成需要的新的hex文件(新的文件包含正確的metadata Header)。
注:這里重點說明BIM地址修改后,如何對python腳本進行修改。關于提到的Python工具的下載和使用說明可以參見BLE SDK中包含的CC2640 BLE OAD User’s Guide.pdf說明文檔中的如下章節,這里不另加贅述。
10.1 Installing Python
10.2 TI OAD Image Tool (Python)
根據我們之前的修改,已經把simple_peripheral project -> cc2650lp_app project 的代碼起始地址改成了0x3000,而原來采用的python工具腳本所生成的hex文件,是配置成將header的imgAddr改成0x1000的,與我們需要把起始代碼改成0x3000的需求不符。所以,我們需要對原有python 工具的腳本和相關操作進行修改,分成以下兩步:
1) 修改oad image的腳本文件( oad_image_tool.py)
該腳本文件位于:C: isimplelinkle_examples-ble_examples-2.2 oolsscriptsoad文件夾
用PythonGUI打開該文件,將startAddr賦值為0x3000,如下:
2) 修改python 工具的腳本的相關操作
這里我們會用到兩個Python的argument: -m –r, 來完成修改目標Image的metadata header地址 的目的。
在命令行界面輸入如下命令:
> set PATH=%PATH%;C:python27
> Python C: isimplelinkle_examples-ble_examples-2.2 oolsscriptsoadoad_image_tool.py C:Usersx0269290DownloadsDesktople_sdk_2_02_01_18examplescc2650lpsimple_peripheraliarappFlashOnly_OAD_ExtFlashExesimple_peripheral_cc2650lp_app.hex -o C:Usersx0269290DownloadsDesktople_sdk_2_02_01_18examplescc2650lpsimple_peripheraliarappFlashOnly_OAD_ExtFlashExeSimple_peripheral_cc2650lp_app.hex -m 0x3000 -r :0xD000
(注:根據python腳本、目標hex、輸出hex所在位置及名稱的不同需要對命令做出對應的更改。)
如圖所示:
得到結果如下:
注:以上例子中的“-m”是用命令給metaAddr賦值。但因為metaAddr(0x3000)大于imgStartAddr(0x1000)導致錯誤,所以在1)中修改python腳本中的對應代碼。
完成上述步驟后,將修改好的APP image用燒寫工具(如:flashprogram2)燒寫進launchpad(注意:燒寫順序和之前一樣,先BIM,再stack,再App)就可以進行OAD操作了。然后照常用BLE device monitor對App進行操作,可以看到如圖所示,App的代碼段已經下面是燒錄完正確image后BLE device monitor參考界面。
下一篇: PLC、DCS、FCS三大控
上一篇: 汽車新熱點: T-BOX系