0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

CC2640R2: 面向Bluetooth Smart應(yīng)用的低功耗無線MCU

星星科技指導(dǎo)員 ? 來源:TI ? 作者:張彥 ? 2023-04-04 10:35 ? 次閱讀

CC2640 R2是一款面向 Bluetooth Smart 應(yīng)用的低功耗無線 MCU。該芯片運(yùn)行TI的BLE協(xié)議棧,同時(shí)具有OAD(Over the Air Download)空中固件升級功能。

CCS是TI提供的強(qiáng)大的MCU/Processor免費(fèi)軟件開發(fā)IDE,支持TI全系列的MCU和Processor。IAR是IAR公司提供的商用軟件開發(fā)IDE。CC2640R2可以選用CCS或者IAR任意一款進(jìn)行開發(fā)。

為了提高OAD的效率,同時(shí)為了更合理的代碼架構(gòu),TI的BLE例程都分為Application和Stack兩個(gè)工程。但是兩個(gè)工程和兩個(gè)固件,往往會造成生產(chǎn)或者OAD的不便,在此我們提供一個(gè)小竅門來改善一下這個(gè)不便。

首先我們看一下IAR/CCS的編譯結(jié)果:

IAR和CCS是開發(fā)TI的BLE方案的IDE工具。在代碼編譯完成后,都能生供下載調(diào)試用的.out文件,還有.hex文件和.bin文件。

其中.out文件帶了調(diào)試信息,主要是下載調(diào)試用。.hex文件和.bin文件都可以用于生產(chǎn)下載,但是.hex文件又帶了地址信息,crc校驗(yàn)等額外信息,所以.out和.hex都會比.bin文件大很多。因此最理想的生產(chǎn)下載文件其實(shí)還是.bin文件,同樣,對于目前CC2640R2F的OAD功能來說,.bin文件也依然是最佳選擇。

poYBAGQrjO-AEf2XAAAkhBJ0ovw252.png

圖 1. 編譯結(jié)果

我們再來看一下CC2640R2帶OAD特性的工程:

CC2640R2帶OAD特性的工程由三個(gè)子工程構(gòu)成,BIM,application和stack。

BIM其實(shí)就是bootloader,app就是application,stack就是協(xié)議棧。

這樣的好處是升級的時(shí)候可以只單獨(dú)更新application部分,并且能大大提高OAD的速度(因?yàn)閷Υ蠖鄶?shù)客戶來說實(shí)際只需要更新application部分)。

但是這樣做的結(jié)果就有了三個(gè)獨(dú)立image文件,這會對最終的生產(chǎn)造成困擾。好在IAR或CCS等IDE工具提供了一些方法,能使我們靈活在.hex文件和.bin文件之間互相轉(zhuǎn)換,合并等等,這就是它們提供的post-build工具:post-build顧名思義就是build之后的動作。

先來看一下IAR/CCS的Post-build工具:

以Application工程為例。

IAR的Post-build工具:

pYYBAGQrjPCAKJbAAADIULhxW60797.png

圖 2. IAR Post-build

CCS的Post-build 工具:

poYBAGQrjPCAAu6RAADYX2ZVFOM445.png

圖 3. CCS Post-build

把IAR和CCS的Post-build 內(nèi)容拿出來,分別是:

IAR的Post-build內(nèi)容:

cmd /C "$TOOLS_BLE_DIR$output_converteroutput_converter.exe

$EXE_DIR$sp_oad_offchip_$PROJ_FNAME$_$CONFIG_NAME$.bin & $TOOLS_BLE_DIR$oadoad_image_tool.exe

iar $PROJ_DIR$ 1 $EXE_DIR$$TARGET_BNAME$.hex $PROJ_DIR$..configiar_boundary.xcl

$PROJ_DIR$..stackFlashROMExesp_oad_offchip_cc2640r2lp_stack_FlashROM.hex -o

$EXE_DIR$$TARGET_BNAME$_oad"

CCS的Post-build內(nèi)容:

${TOOLS_BLE_DIR}/oad/oad_image_tool ccs ${PROJECT_LOC} 1 FlashROM/${ProjName}_${ConfigName}.hex ${WORKSPACE_LOC}/simple_peripheral_cc2640r2lp_oad_offchip_stack/TOOLS/ccs_compiler_defines.bcfg ${WORKSPACE_LOC}/simple_peripheral_cc2640r2lp_oad_offchip_stack/FlashROM/simple_peripheral_cc2640r2lp_oad_offchip_stack_FlashROM.hex -o ${WORKSPACE_LOC}/simple_peripheral_cc2640r2lp_oad_offchip_app/FlashROM/${ProjName}_${ConfigName}_oad

上面標(biāo)紅的就是CC2640R2的SDK提供的一些腳本工具,可以在這個(gè)目錄中找到:C:TIsimplelink_cc2640r2_sdk_1_40_00_45toolsblestack。分別是

output_converter.exe和

oad_image_tool.exe。

SDK提供的這幾個(gè).exe文件都是Python文件轉(zhuǎn)換過來的,我們也可以把自己用Python轉(zhuǎn)成的.exe文件放這里來執(zhí)行。

上述腳本工具在Post-build中的應(yīng)用

output_converter.exe的用法:

output_converter.exe的作用:把.bin文件轉(zhuǎn)換成.hex文件。

用windows的command line可以看到它的參數(shù)配置:

poYBAGQrjPGANqu9AAEEypM_Fno363.png

圖 4. output_converter.exe的參數(shù)配置

oad_image_tool.exe的用法:

oad_image_tool.exe的作用:把特定的1個(gè),或者多個(gè).hex文件合并,新生成一個(gè).hex文件,并轉(zhuǎn)換成加上CRC32校驗(yàn)信息的.bin文件,注意的是,新生成的.hex文件是沒有加上CRC32校驗(yàn)信息的,只有新生成的.bin文件帶。

它是特別指定了OAD要用的BIM,application,stack三個(gè)工程的某種組合,且合并的話,只能合并application和stack工程的image,所以這個(gè)工具并不是通用.hex轉(zhuǎn).bin工具,只能配合OAD用(文章后面會有通用.hex轉(zhuǎn).bin工具介紹)。

poYBAGQrjPKABLFJAADf1ji9f-Y327.png

圖 5. oad_image_tool.exe的參數(shù)配置

*注意:這里說的都是application工程,編譯application工程之前,stack工程必須先編譯完成。因?yàn)楹茱@然,stack工程的.hex文件是其中的一個(gè)參數(shù)。

output_converter.exe & oad_image_tool.exe的配合:

IAR的工程配置里面,配置的是編譯好默認(rèn)輸出.bin文件,所以需要先用output_converter.exe把.bin文件轉(zhuǎn)換成.hex。

CCS則是直接生成.hex文件,CCS只要調(diào)用oad_image_tool.exe轉(zhuǎn)換成帶CRC32校驗(yàn)信息的.bin文件就可以了。

所以最后總結(jié),不管是IAR還是CCS,都是通過post-build來轉(zhuǎn)換application和stack工程的編譯結(jié)果,并產(chǎn)生這兩個(gè)工程單個(gè)合并的.hex和.bin文件(BIM工程并不在合并之列),產(chǎn)生的.bin文件是帶OAD需要的CRC32的image校驗(yàn)信息的,而.hex文件是不帶這個(gè)CRC32校驗(yàn)信息的。

在Post-build中活用腳本工具:

用hex的方法燒錄

如果用.hex的方式去燒錄,這中間就有兩個(gè)問題:

第一就是還是得燒錄兩個(gè).hex文件:BIM的.hex,和application+stack合并的.hex。

第二就是,默認(rèn)的post-build產(chǎn)生的.hex文件不帶CRC32信息,如果直接把最終產(chǎn)生的單個(gè).hex文件和BIM工程的.hex文件燒錄至芯片,由于application鏡像的起始位置不帶有效的CRC32信息,因此BIM會認(rèn)為這是無效的鏡像,最后造成無法跳轉(zhuǎn)到application去執(zhí)行。

要解決這兩個(gè)問題,就得在application+stack的.hex起始位置加上有效CRC32校驗(yàn)信息,然后把BIM的.hex文件和application+stack的.hex文件合并,變成真正的單個(gè).hex,這樣直接下載就沒問題了。

解決方法:

首先,給application+stack的.hex文件頭部相應(yīng)位置加入CRC32信息。

實(shí)際上經(jīng)過oad_image_tool.exe合并的application+stack的.bin文件的頭部已經(jīng)有CRC32校驗(yàn)信息,而且output_converter.exe能把.bin文件轉(zhuǎn)成.hex文件,所以最快的方法自然是用output_converter.exe把已經(jīng)合并的application+stack的.bin文件再轉(zhuǎn)換成.hex就行了:

$TOOLS_BLE_DIR$output_converteroutput_converter.exe -o

$EXE_DIR$$TARGET_BNAME$_oad_merged_crc32.hex $EXE_DIR$$TARGET_BNAME$_oad_merged.bin"

這個(gè)產(chǎn)生的.hex就是application+stack,并帶CRC32信息。

接下來就是把BIM的.hex和application+stack帶CRC32信息的.hex 合并。

由于SDK提供的oad_image_tool.exe是一個(gè)特殊的工具,并不能隨意合并任意的.hex文件,所以不能用這個(gè)工具來合并BIM和application+stack的.hex文件。這里提供一個(gè)能合并任意.hex文件的工具:hexmerge.exe,這個(gè)也是通過python轉(zhuǎn)換的.exe文件,后面會介紹怎么轉(zhuǎn)換的。

把hexmerge.exe放到對應(yīng)目錄下,比如:C:TIsimplelink_cc2640r2_sdk_1_40_00_45toolsblestackoad

用法:

$TOOLS_BLE_DIR$oadhexmerge.exe -o $EXE_DIR$bim_app_stack_crc32.hex $PROJ_DIR$..bim_offchip

FlashOnly Exesp_oad_offchip_cc2640r2lp_bim_offchip_FlashOnly.hex

$EXE_DIR$$TARGET_BNAME$_oad_merged_crc32.hex

把上面兩條命令加入到post-build中去,下面藍(lán)色部分:

cmd /C "$TOOLS_BLE_DIR$output_converteroutput_converter.exe $EXE_DIR$sp_oad_offchip_$PROJ_FNAME$_$CONFIG_NAME$.bin & $TOOLS_BLE_DIR$oadoad_image_tool.exe iar $PROJ_DIR$ 1 $EXE_DIR$$TARGET_BNAME$.hex $PROJ_DIR$..configiar_boundary.xcl $PROJ_DIR$..stackFlashROMExesp_oad_offchip_cc2640r2lp_stack_FlashROM.hex -o $EXE_DIR$$TARGET_BNAME$_oad & $TOOLS_BLE_DIR$output_converteroutput_converter.exe -o $EXE_DIR$$TARGET_BNAME$_oad_merged_crc32.hex $EXE_DIR$$TARGET_BNAME$_oad_merged.bin & $TOOLS_BLE_DIR$oadhexmerge.exe -o $EXE_DIR$bim_app_stack_crc32.hex $PROJ_DIR$..bim_offchipFlashOnlyExesp_oad_offchip_cc2640r2lp_bim_offchip_FlashOnly.hex $EXE_DIR$sp_oad_offchip_cc2640r2lp_app_FlashROM_oad_merged_crc32.hex"

這樣,最終就能產(chǎn)生出一個(gè)bim+application+stack三個(gè)工程合并后的.hex文件,并且?guī)RC32校驗(yàn),一次性下載到芯片后能直接運(yùn)行。

用bin的方法燒錄

如果用.bin的方式燒錄,那么CRC32的問題是不存在的,存在的唯一問題就是:

BIM的.bin和application+stack的.bin是兩個(gè)獨(dú)立的文件,沒法同時(shí)燒錄,也沒法分別燒錄,因?yàn)?bin文件是不帶地址信息的,比較麻煩。

最好的方法當(dāng)然是把這幾個(gè).bin文件合成一個(gè),再進(jìn)行燒錄。但SDK提供的oad_image_tool.exe又不能直接把BIM合并進(jìn)去產(chǎn)生.bin文件,所以還是需要借助其他工具。

其實(shí)根據(jù)前面的啟發(fā),最快的方法,只要把前面的過程中產(chǎn)生的BIM+application+stack并帶CRC32校驗(yàn)的.hex文件直接轉(zhuǎn)換成.bin文件就行了。我們借用hex2bin.exe這個(gè)工具,同樣,也是python轉(zhuǎn)換過來的.exe。

解決方法:

首先,比如也把hex2bin.exe放到下面目錄中:

C:TIsimplelink_cc2640r2_sdk_1_40_00_45toolsblestackoad

用法:

$TOOLS_BLE_DIR$oadhex2bin.exe $EXE_DIR$bim_app_stack_crc32.hex $EXE_DIR$bim_app_stack_crc32.bin

那么把這條命令加到post-build中去:

cmd /C "$TOOLS_BLE_DIR$output_converteroutput_converter.exe $EXE_DIR$sp_oad_offchip_$PROJ_FNAME$_$CONFIG_NAME$.bin & $TOOLS_BLE_DIR$oadoad_image_tool.exe iar $PROJ_DIR$ 1 $EXE_DIR$$TARGET_BNAME$.hex $PROJ_DIR$..configiar_boundary.xcl $PROJ_DIR$..stackFlashROMExesp_oad_offchip_cc2640r2lp_stack_FlashROM.hex -o $EXE_DIR$$TARGET_BNAME$_oad & $TOOLS_BLE_DIR$output_converteroutput_converter.exe -o $EXE_DIR$$TARGET_BNAME$_oad_merged_crc32.hex $EXE_DIR$$TARGET_BNAME$_oad_merged.bin & $TOOLS_BLE_DIR$oadhexmerge.exe -o $EXE_DIR$bim_app_stack_crc32.hex $PROJ_DIR$..bim_offchipFlashOnlyExesp_oad_offchip_cc2640r2lp_bim_offchip_FlashOnly.hex $EXE_DIR$sp_oad_offchip_cc2640r2lp_app_FlashROM_oad_merged_crc32.hex & $TOOLS_BLE_DIR$oadhex2bin.exe $EXE_DIR$bim_app_stack_crc32.hex $EXE_DIR$bim_app_stack_crc32.bin"

所以總結(jié)起來,只要把上面的這一整段命令復(fù)制,粘帖到IAR的post-build配置中去,我們就能通過IAR的一次編譯,自動同時(shí)可以得到一個(gè)合并了BIM,application,stack的完整的.hex和.bin文件(bim_app_stack_crc32.hexbim_app_stack_crc32.bin),可以用于燒錄。

pYYBAGQrjPOADYflAAD_gPy1Bxs338.png

圖 6. IAR 最終生成的編譯結(jié)果

在CCS中的靈活用法

前面是基于IAR的配置方式,基于CCS的本質(zhì)上也是一樣,在post-build中,加入:

${TOOLS_BLE_DIR}/oad/oad_image_tool ccs ${PROJECT_LOC} 1 FlashROM/${ProjName}_${ConfigName}.hex ${WORKSPACE_LOC}/simple_peripheral_cc2640r2lp_oad_offchip_stack/TOOLS/ccs_compiler_defines.bcfg ${WORKSPACE_LOC}/simple_peripheral_cc2640r2lp_oad_offchip_stack/FlashROM/simple_peripheral_cc2640r2lp_oad_offchip_stack_FlashROM.hex -o ${WORKSPACE_LOC}/simple_peripheral_cc2640r2lp_oad_offchip_app/FlashROM/${ProjName}_${ConfigName}_oad

${TOOLS_BLE_DIR}/output_converter/output_converter -o

${WORKSPACE_LOC}/simple_peripheral_cc2640r2lp_oad_offchip_app/FlashROM/${ProjName}_${ConfigName}_oad_merged_crc32.hex ${WORKSPACE_LOC}/simple_peripheral_cc2640r2lp_oad_offchip_app/FlashROM/${ProjName}_${ConfigName}_oad_merged.bin

${TOOLS_BLE_DIR}/oad/hexmerge -o ${WORKSPACE_LOC}/simple_peripheral_cc2640r2lp_oad_offchip_app/FlashROM/bim_app_stack_crc32.hex ${WORKSPACE_LOC}/bim_oad_offchip_cc2640r2lp_app/FlashOnly/bim_oad_offchip_cc2640r2lp_app.hex ${WORKSPACE_LOC}/simple_peripheral_cc2640r2lp_oad_offchip_app/FlashROM/${ProjName}_${ConfigName}_oad_merged_crc32.hex

${TOOLS_BLE_DIR}/oad/hex2bin

${WORKSPACE_LOC}/simple_peripheral_cc2640r2lp_oad_offchip_app/FlashROM/bim_app_stack_crc32.hex

${WORKSPACE_LOC}/simple_peripheral_cc2640r2lp_oad_offchip_app/FlashROM/bim_app_stack_crc32.bin

這樣,編譯完application工程后,就能自動得到合并了BIM+application+stack的.hex和.bin文件(bim_app_stack_crc32.hexbim_app_stack_crc32.bin)。

poYBAGQrjPOAdhiHAAI_D4qHGOQ610.png

圖 7. CCS 最終生成的編譯結(jié)果

結(jié)論:

IDE工具的Post-build往往在實(shí)際開發(fā)過程中容易被忽略,其實(shí)只要靈活應(yīng)用,還是能幫助我們做很多事情的,比如本文所說針對CC2640R2F的固件的生成,靈活應(yīng)用Post-build功能就能方便產(chǎn)生我們自己需要的固件,提高工作效率。

審核編輯:郭婷

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報(bào)投訴
  • mcu
    mcu
    +關(guān)注

    關(guān)注

    146

    文章

    16667

    瀏覽量

    347800
  • 代碼
    +關(guān)注

    關(guān)注

    30

    文章

    4671

    瀏覽量

    67770
  • BLE
    BLE
    +關(guān)注

    關(guān)注

    12

    文章

    634

    瀏覽量

    59179
收藏 人收藏

    評論

    相關(guān)推薦

    淺談CC2640低功耗無線MCU

    淺談CC2640低功耗無線MCUSimpleLink超低功耗無線MCU平臺的首批成員是用于
    發(fā)表于 03-08 14:32

    CC2640R2F低功耗MCU器件的技術(shù)說明與核心架構(gòu)

    CC2640R2F 器件是一款無線微控制器 (MCU),主要適用于 Bluetooth ?4.2 和 Bluetooth 5
    發(fā)表于 02-17 10:56

    新型SimpleLink?藍(lán)牙低功耗CC2640R2F無線MCU必知

    以下是關(guān)于TI最新藍(lán)牙?低功耗設(shè)備所需了解的前5大事項(xiàng):SimpleLink? CC2640R2F無線微控制單元(MCU)。 5.擴(kuò)展SimpleLink?
    發(fā)表于 04-01 15:20

    面向 Bluetooth Smart 應(yīng)用的無線 MCU——CC2640

    `簡單介紹CC2640 是一款面向 Bluetooth Smart 應(yīng)用的無線 MCU。此器件屬
    發(fā)表于 07-17 10:20

    TI最新CC2640R2L與CC2640、CC2640R2F有何區(qū)別? 精選資料推薦

    TI(德州儀器)最近推出的CC2640R2L是2.4 GHz無線微控制器(MCU),支持低功耗Bluetooth 5.1和專用2.4 GHz
    發(fā)表于 07-27 08:22

    CC2640 R2在Android和iOS上的APP流程和代碼解讀

    CC2640 R2是一款面向 Bluetooth Smart 應(yīng)用的低功耗
    發(fā)表于 11-11 06:02

    CC2640 R2資料介紹

    CC2640 R2是一款面向 Bluetooth Smart 應(yīng)用的低功耗
    發(fā)表于 11-11 06:36

    CC2640R2的外設(shè)功能介紹

    設(shè)。 ? 《SensorController 協(xié)處理器教程》 SensorController 是 CC2640R2 內(nèi)部的一顆協(xié)處理器,可以使用該協(xié)處理器開發(fā)超低功耗的傳感器采集程序。協(xié)處理器教程,從介紹
    發(fā)表于 09-22 07:30

    CC2640 SimpleLink? Bluetooth? Smart 無線 MCU

    CC2640 是一款面向 Bluetooth Smart 應(yīng)用的無線 MCU。 此器件屬于
    發(fā)表于 11-09 16:19 ?44次下載

    TI 最新 SimpleLink CC2640R2F 無線 MCU 需要了解的 5 個(gè)真相

    以下是關(guān)于TI最新藍(lán)牙低功耗設(shè)備所需了解的前5大事項(xiàng):SimpleLinkCC2640R2F無線微控制單元(MCU)。5. 擴(kuò)展 SimpleLink
    發(fā)表于 04-26 11:15 ?3342次閱讀

    一文詳解CC2640低功耗無線MCU

    SimpleLink 超低功耗無線 MCU 平臺的首批成員是用于 Bluetooth SmartC
    的頭像 發(fā)表于 05-12 07:41 ?7374次閱讀

    CC2640R2F無線微控制器的數(shù)據(jù)手冊免費(fèi)下載

    CC2640R2F 器件是一款無線微控制器 (MCU),主要適用于 Bluetooth? 4.2 和 Bluetooth 5
    發(fā)表于 05-31 08:00 ?12次下載
    <b class='flag-5'>CC2640R2</b>F<b class='flag-5'>無線</b>微控制器的數(shù)據(jù)手冊免費(fèi)下載

    面向 Bluetooth Smart 應(yīng)用的低功耗無線 MCU

    ,Holly Gu ?????? CC2640 R2是德州儀器推出的一款面向 Bluetooth Smart 應(yīng)用的
    的頭像 發(fā)表于 12-29 14:32 ?969次閱讀

    新型SimpleLink?藍(lán)牙低功耗CC2640R2F無線MCU

    以下是關(guān)于TI最新藍(lán)牙?低功耗設(shè)備所需了解的前5大事項(xiàng):SimpleLink??CC2640R2F無線微控制單元(MCU)。 ? 5.擴(kuò)展SimpleLink?
    的頭像 發(fā)表于 11-10 09:38 ?936次閱讀

    淺談CC2640低功耗無線MCU

    SimpleLink超低功耗無線MCU平臺的首批成員是用于Bluetooth SmartCC2640
    的頭像 發(fā)表于 08-04 14:35 ?703次閱讀