吴忠躺衫网络科技有限公司

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

面向 Bluetooth Smart 應用的低功耗無線 MCU

電子設計 ? 來源:網友電子設計發布 ? 作者:網友電子設計發布 ? 2021-12-29 14:32 ? 次閱讀

CC2640 R2是德州儀器推出的一款面向 Bluetooth Smart 應用的低功耗無線 MCU。該芯片集成有Cortex M3內核,可以運行TI的BLE協議棧,具有功耗低,外設種類豐富,射頻性能好等特點。與CC2640相比,R2版本的芯片將部分協議棧遷移到了片內的ROM中,留給客戶的應用程序更多的Flash空間。CC2640R2芯片架構及核心特點如下圖1所示。

而CC2640R2F本身集成有可以支持藍牙5.0的PHY,TI協議棧支持部分藍牙5.0的協議,如High speed,Long Range等等。基于CC2640R2F可以實現很多炫酷的應用。不過有時候,有些應用并沒有按鍵或者屏幕等輸入設備,要求APP輸入密碼與BLE從機配對后方可讀取BLE設備的數據,這篇文章就跟大家詳細聊聊如何用用戶自定義的密碼進行配對。

本文所使用的軟硬件平臺如下:

IDE環境 IAR 8.11.2
藍牙協議棧版本 1_50_00_62
實驗所用工程 .\examples\rtos\CC2640R2_LAUNCHXL\bleapps\hid_emu_kbd
硬件平臺 LAUNCHXL-CC2640R2
手機Android版本 4.4.4
手機IOS版本 11.3.1

本文是以hid_emu_kbd例程為參考。其他工程比如SimpleBLEPeripheral或者其他,都可以參照這個來修改。HID設備對BLE來說比較特殊,BLE的HID profile是規定HID設備必須配對和綁定的。

下圖是配對和綁定的基本流程。Initiator是連接中的主設備,responder是連接中的從設備。

BLE的配對與綁定則發生在連接之后。綁定是在配對之后發生的事,需不需要綁定取決于用戶在代碼里的設置。

上圖的phase 1和phase2是配對的過程。Phase 3是綁定的過程。要不要進行phase 3,在phase 1發送配對請求的時候就已經決定了,這個決定就是用戶在代碼里面的配置。

如果要用戶在配對過程中人為輸入密碼或進行其他認為操作,是在phase 2。而具體的誤認為操作方式,也是在phase 1中決定,這個決定也是用戶在代碼里面的配置。其實phase 2能用到的配對有很多種方式,最簡單的就是just works的方式,用大家都知道的000000作為配對密碼,這個方式很不安全,非常容易被破解。其實BLE到了4.2以上的版本,已經有了用DH(Diffie–Hellman key exchange)方式交換密碼,這個方式已經很安全,且密碼也是隨機產生的。

有些應用場景可能需求比較特殊,產品需要自定義的配對密碼,所以要達到這個目的,就需要我們靈活配置配phase 1中的各個參數,這也是這篇文章的目的。

我們繼續以hid_emu_kbd為例,BLE配對phase 1所需要的幾個重要參數的配置在hidemukbd.c里,如下:

第一個關鍵參數是PAIRING_MODE,配對是由GAPBOND_PAIRING_MODE_INITIATE一端發起的,可以是主機,也可以是從機。本文中由手機(手機)發起配對請求,從機(CC2640R2)則被動等待,所以需要將宏定義配置為GAPBOND_PAIRING_MODE_WAIT_FOR_REQ。

第二個關鍵參數是MITM_MODE,MITM即Man In The Middle保護,如果MITM為FALSE,則說明不需要人參與中間,后面相應的IO capabilities設置也會被忽略,但是為了使配對需要Passcode才能成功,必須要把MITM_MODE的宏定義設置為TRUE。

第三個關鍵參數是IO_CAPABILITIES,表示本機是否有輸入或者顯示的功能,比如GAPBOND_IO_CAP_DISPLAY_ONLY,表示可以將密碼顯示在屏幕上給操作人看,如果有I/O接口可以輸入密碼,也可以選擇GAPBOND_IO_CAP_KEYBOARD_ONLY。本文中將I/O capabilities的屬性設置為GAPBOND_IO_CAP_DISPLAY_ONLY,如下:

這樣做的目的就是告訴主機,我這邊能顯示配對密碼,最終用戶作為MITM,需要在主機那邊(手機上)跳出的窗口里輸入我從機這邊顯示的配對密碼就行。到這一步,phase 2要用的配對的方式就確定好了。但是這樣設置的話從機這邊顯示的密碼是隨機產生的6位數,并不是我們想要的自定義的固定6位數。

×注意,即使實際的從設備產品不帶顯示功能(沒屏幕),IO_CAPABILITIES配置成GAPBOND_IO_CAP_DISPLAY_ONLY,也是可以的,前提就是用自定義的固定6位數作為配對密碼,不然就會導致產生的6位隨機數沒地方顯示,就會無法完成配對。

接下來就來設置固定的6位數配對密碼來達到我們的目的。

CC2640R2的修改方式CC2541不同,CC2541可以參考這個帖子:https://e2echina.ti.com/question_answer/wireless_connectivity/bluetooth/f/103/t/112619

首先看一下哪里設置這個自定義配對密碼passcode的6位數。CC2640R2的這個Passcode隱藏的比較深,在bcomdef.h里,把宏定義改成你自己需要的密碼就可以了。這里設置成123412,注意這個密碼必須是6位。

那么這個默認自定義passcode是怎么被用上的呢?

首先,就是要在初始化的時候注冊bond manager的回調:

這個回調的HidDev_PasscodeCB()就是處理passcode請求的回調函數。

當配對的phase 2被配置成前面提到的方式時,配對過程會觸發passcode請求,就會調用HidDev_passcodeCB()。最終會觸發HidDev_processPasscodeEvt():

所以可以看到,只要其中pHidDevCB->passcodeCB這個回調為NULL,那么就會使用默認自定義密碼,這樣就能達到目的。(如果這個回調不為NULL,那么就會調用這個回調來獲取密碼,那很有可能是應用層用戶手動輸入密碼或者其他方式。)

pHidDevCB這個回調是在應用層用戶自己初始化的:

第三個回調函數就是passcodeCB,這個修改為NULL。

這個回調結構體是在HidDev_Register()被調用,并初始化給pHidDevCB指針的。

修改完了,為了調試的方便,我們把斷開連接后自動廣播打開,在IAR開發環境中,右擊工程 -> Options -> C/C++ Compiler -> Preprocessor中Define Symbols里,把AUTO_ADV的值改為TRUE。

如果是用iPhone作為主機的話,有幾個連接參數要改一下,不然iOS會拒絕連接參數更新請求。

下面到了見證奇跡的時刻,拿出你的手機,以iPhone為例,由于是HID的工程,可以用iPhone自帶的藍牙界面:(如果不是HID工程,iOS上的lightblue app或者TI的sensorTag app都能做演示)

搜索到設備:

點擊搜索到的HID Keyboard,這樣會發起連接請求,自動跳出密碼框:

輸入正確的預設6位密碼123412并點擊配對:

配對成功連接建立完成:

如果輸入密碼錯誤,那么會連接建立失敗,重新回到最初界面:

為了加深理解,我們可以從空中抓包的log來看一下過程。下圖是配對成功后,連接進行加密:

那么可以看到加密以后的數據就都是紅的,這是因為sniffer沒法解析了,通過MITM方式配對是比較安全的模式。

那么如果iPhone上密碼輸入錯誤,非指定密碼,CC2640R2就會直接回復Pairing Failed給iPhone:

iPhone就會立即斷開連接:

最后,靈活運用前面提到過的配對參數搭配,能達到不同的配對場景效果。我們這里只是舉了一個例子,讀者有興趣的話可以自己嘗試一下各種搭配,這樣對理解BLE的安全機制也會很有幫助。

審核編輯:何安

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • mcu
    mcu
    +關注

    關注

    146

    文章

    17317

    瀏覽量

    352636
  • 嵌入式處理
    +關注

    關注

    0

    文章

    341

    瀏覽量

    10069
收藏 人收藏

    評論

    相關推薦

    SiWx917 Wi-Fi6 SoC低功耗無線連接解決方案

    SiliconLabs (芯科科技)的SiWx917 Wi-Fi6 SoC是一款低功耗無線連接解決方案,非常適合需要 Wi-Fi 6、低功耗藍牙(Bluetooth LE)5.4、Ma
    的頭像 發表于 12-23 09:15 ?392次閱讀

    三款低功耗MCU,實現應用產品的耐久續航力

    三款低功耗MCU,實現應用產品的耐久續航力 低功耗MCU是趨勢所在 低功耗可說是MCU芯片重
    發表于 12-13 10:44

    基于Bluetooth低功耗技術的定位跟蹤方案

    隨著藍牙低功耗(BluetoothLow Energy,簡稱BLE)技術發展到5.2及更高版本,其中最重要的進步之一就是定位跟蹤技術,該技術可在室內用于資產的移動和定位跟蹤。
    的頭像 發表于 11-14 09:39 ?379次閱讀
    基于<b class='flag-5'>Bluetooth</b><b class='flag-5'>低功耗</b>技術的定位跟蹤方案

    Simplelink? CC3301 Wi-Fi 6和低功耗Bluetooth? M.2插入卡

    電子發燒友網站提供《Simplelink? CC3301 Wi-Fi 6和低功耗Bluetooth? M.2插入卡.pdf》資料免費下載
    發表于 11-08 13:51 ?0次下載
    Simplelink? CC3301 Wi-Fi 6和<b class='flag-5'>低功耗</b><b class='flag-5'>Bluetooth</b>? M.2插入卡

    Simplelink? CC3301 Wi-Fi 6和低功耗Bluetooth? BoosterPack?插件模塊(BP-CC3301)

    電子發燒友網站提供《Simplelink? CC3301 Wi-Fi 6和低功耗Bluetooth? BoosterPack?插件模塊(BP-CC3301).pdf》資料免費下載
    發表于 11-07 10:15 ?0次下載
    Simplelink? CC3301 Wi-Fi 6和<b class='flag-5'>低功耗</b><b class='flag-5'>Bluetooth</b>? BoosterPack?插件模塊(BP-CC3301)

    【BearPi-Pico H3863星閃開發板體驗連載】星閃超低功耗SLE透傳功能測試

    。BLE(Bluetooth Low Energy)是藍牙低功耗技術,適用于低功耗、低時延的應用,如鍵鼠、耳機等。 SLE(StarFlash Low Energy)是星閃低功耗技術,
    發表于 10-25 22:23

    使用Simplelink?無線MCU系列測量堆棧終端器件功耗

    電子發燒友網站提供《使用Simplelink?無線MCU系列測量堆棧終端器件功耗.pdf》資料免費下載
    發表于 09-26 10:44 ?0次下載
    使用Simplelink?<b class='flag-5'>無線</b><b class='flag-5'>MCU</b>系列測量堆棧終端器件<b class='flag-5'>功耗</b>

    ST NPI 專區 | 新上架產品【STM32WB09KEV7TR】

    STM32WB09xx32位MCU無線系列:Bluetooth低功耗5.4STM32WB09xx是輕量級、高性價比Bluetooth
    的頭像 發表于 08-13 08:27 ?375次閱讀
    ST NPI 專區 | 新上架產品【STM32WB09KEV7TR】

    2.4G無線收發SOC芯片 XL2409,高性能、低功耗,集成大資源32位MCU

    XL2409 是一款高性能、低功耗的 SIP 集成無線收發芯片。片內集成32位M0+核MCU,RF 工作在 2.400~2.483GHz世界通用 ISM 頻段,集成了射頻接收器、射頻發射器、頻率綜合
    發表于 07-12 15:54

    國產藍牙模組 | 低功耗藍牙應用

    藍牙技術聯盟于2010年推出了藍牙4.0規范,其中低功耗藍牙的出現滿足了小型電池供電設備進行低功耗無線連接的需求,因此得到廣泛應用。本文章將帶你深入了解低功耗藍牙的應用。
    的頭像 發表于 06-14 08:25 ?592次閱讀
    國產藍牙模組 | <b class='flag-5'>低功耗</b>藍牙應用

    藍牙模塊選經典藍牙還是低功耗藍牙?

    energy和Bluetooth smart兩者又有什么區別?我的應用應該選經典藍牙技術還是低功耗藍牙技術?首先,在2010年以前,當我們談論藍牙的時候,就是在說的經典藍牙,因為那個時候還沒有
    的頭像 發表于 05-23 17:57 ?1430次閱讀
    藍牙模塊選經典藍牙還是<b class='flag-5'>低功耗</b>藍牙?

    TIDA-020032-汽車門禁低功耗 Bluetooth? + CAN衛星模塊 PCB layout 設計

    電子發燒友網站提供《TIDA-020032-汽車門禁低功耗 Bluetooth? + CAN衛星模塊 PCB layout 設計.pdf》資料免費下載
    發表于 05-17 18:12 ?0次下載
    TIDA-020032-汽車門禁<b class='flag-5'>低功耗</b> <b class='flag-5'>Bluetooth</b>? + CAN衛星模塊 PCB layout 設計

    面向低功耗無線應用的雙節超低IQ降壓轉換器TPS62745數據表

    電子發燒友網站提供《面向低功耗無線應用的雙節超低IQ降壓轉換器TPS62745數據表.pdf》資料免費下載
    發表于 04-12 14:11 ?0次下載
    <b class='flag-5'>面向</b><b class='flag-5'>低功耗</b><b class='flag-5'>無線</b>應用的雙節超低IQ降壓轉換器TPS62745數據表

    面向低功耗無線應用的雙節超低 IQ 降壓轉換器TPS62745數據表

    電子發燒友網站提供《面向低功耗無線應用的雙節超低 IQ 降壓轉換器TPS62745數據表.pdf》資料免費下載
    發表于 03-08 10:48 ?0次下載
    <b class='flag-5'>面向</b><b class='flag-5'>低功耗</b><b class='flag-5'>無線</b>應用的雙節超低 IQ 降壓轉換器TPS62745數據表

    介紹一款高性能低功耗的SOC集成無線收發芯片—XL2409

    XL2409是一款高性能低功耗的SOC集成無線收發芯片,集成M0核MCU,工作在2.400~2.483GHz世界通用ISM頻段。
    的頭像 發表于 03-01 16:28 ?1404次閱讀
    介紹一款高性能<b class='flag-5'>低功耗</b>的SOC集成<b class='flag-5'>無線</b>收發芯片—XL2409
    百家乐官网玩家技巧分享| 百家乐官网视频免费下载| 网络真人赌场| 大发888充值卡| 百家乐投资心得| 怎样赢百家乐官网的玩法技巧和规则 | 百家乐官网现场投注平台| 百家乐官网现场网络| 乐宝百家乐官网娱乐城| 百家乐官网21点德州扑克| 百家乐官网清零| 百家乐官网赌场公司| 高档百家乐官网桌子| 百家乐官网破解仪恒达| 送58百家乐官网的玩法技巧和规则 | 百家乐官网的奥秘| 做生意门朝山| 最好的百家乐游戏平台1| 娱乐网百家乐的玩法技巧和规则| 太阳城论坛| 六合彩报码| 百博亚洲| 百家乐官网赌博在线娱乐| 百家乐官网园百乐彩| 百家乐食杂店| 大发888娱乐场下载英皇国际 | 仁怀市| ea百家乐官网打水| 百家乐打印程序| 百家乐baccarat| 伟博娱乐城| 百家乐官网德州桌| 百家乐平台开发| 竞咪百家乐的玩法技巧和规则| 百家乐强弱走势| 足球赌博网站| 百家乐官网单机破解版| 百家乐赌场走势图| 高额德州扑克第七季| 百家乐官网太阳城怎么样| 百家乐官网一邱大师打法|