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

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

3天內不再提示

BlueNRG系列協處理器實戰經驗簡介

STM32單片機 ? 來源:STM32單片機 ? 2024-01-05 18:16 ? 次閱讀

01

處理器模式概述

BlueNRG 系列芯片從最早的一代 BlueNRG-MS 開始就支持協處理器模式。在協處理器模式下,BLE 功能在 BlueNRG 芯片端完成,應用部分在 MCU 端完成。與 AT 指令的模式類似,協處理器方式也具有高內聚、低耦合的特點,但相比于 AT 指令模式,協處理器方式更為強大靈活,而且還兼顧了 MCU 間通信的睡眠和相互喚醒等方面的需求。

BlueNRG 系列的所有芯片都支持協處理器模式。在使用協處理器時,BlueNRG 需要燒錄一個 DTM 固件。DTM 原本是指 Direct Test Mode,而 ST 在這個固件的功能上進行了擴充。除了用于 RF 測試(包括 RF 發射功率、接收靈敏度、頻偏、諧波等方面的測試),BlueNRG 的 DTM 固件還可以用于協處理器模式。

BlueNRG GUI 工具是一個針對 BlueNRG 芯片協處理器應用的工具。在使用協處理器時,協處理器可以搭配任何帶有串口或 SPI 接口的 MCU、MPU 或 PC 端使用。

如下圖所示,官方協處理器資料可以通過 SDK 中文檔 index.html 進行索引。

750d7106-abb0-11ee-8b88-92fbcf53809c.jpg

圖1.BlueNRG 端協處理器官方資料

02

協處理器軟件分層

BlueNRG GUI 工具的使用屬于一個 BlueNRG 芯片協處理器的應用。

協處理器可以搭配任意帶UART或者 SPI 的 MCU、MPU 或者 PC 端使用。

軟件框架如下圖所示。協處理器模式有兩種分層。

? [處理器] APP <------------> [BlueNRG] (Host+Controller)

? [處理器](APP+Host) <------------> [BlueNRG] (Controller)

75220cd8-abb0-11ee-8b88-92fbcf53809c.jpg

圖2.協處理器軟件框架

大部分應用會采用第一種方式,對應用處理器或者 MCU 只需要關注應用部分,這種方式,處理器和 MCU 之間是通過 ACI 指令進行交互,ACI 是 HCI 指令的擴展。

第二種方式,BlueNRG 系列運行 Controller 部分,MCU 或者處理器 Host 層協議和應用,使用的場景比較少,雙方之間通過 HCI 經行交互。BlueNRG 系列如果需要使用這種方式的協議棧,則編譯 DTM 固件的時候,則需要在 Preprocessor Symbols 中使能“LL_ONLY”宏。

03

ACI 指令格式

Bluetooth LE 協議棧 ACI 指令利用并擴展了標準 HCI 數據格式。

7536be12-abb0-11ee-8b88-92fbcf53809c.jpg

圖3.HCI 指令格式

根據 Bluetooth 核心規范,標準 HCI 數據包可以是以下幾種類型:

? HCI 命令數據包(數據包類型:0x01)

? HCI ACL 數據包(數據包類型:0x02)

? HCI 同步數據包(數據包類型:0x03)

? HCI 事件數據包(數據包類型:0x04)

? HCI 擴展命令(數據包類型:0x81)

? HCI 擴展事件(數據包類型:0x82)

詳細的數據包格式可以通過如下方式詳細查看:

打開 BlueNRG-LP 或者 BlueNRG-LPS SDK 中 index.html ------->Network Coprocessor (UART, SPI mode)章節中的 Bluetooth LE stack v3.x ACI Data format -----------> Bluetooth LE stack v3.x ACI commands data format.

了解 ACI 指令格式有助于在實際調試雙通信部分時遇到問題時分析定位問題。

詳細的其他協處理器資料可以通過 SDK 中 index.html 中的如下章節進行查找。

04

DTM 相關的工程介紹

BlueNRG SDK 中提供了很多個不同的 DTM 的工程,用戶難以分辨。

為了簡化,絕大部分應用,建議選擇功能最齊全的 DTM 工程下,“UART_WITH_UPDATER”工程配置或者“SPI_WITH_UPDATER”工程配置。

754004cc-abb0-11ee-8b88-92fbcf53809c.jpg

圖4.BlueNRG DTM 相關的工程

其中 SDK 中包含的工程如下 :

? DTM: // DTM 是 Full Stack

? DTM_basic: // DTM 配置為 Basic stack

? DTM_Updater: // 帶 boot 程序 DTM 的 boot 源碼工程

其中 DTM 工程和 DTM_basic 工程是實現 DTM 功能的工程,他們之間的差別主要是一個默認是 Full stack,另一個默認為 Basic stack。而 DTM_Updater 只是一個 DTM 的 boot 源碼工程。

打開 DTM 或者 DTM_basic 工程可以看到如下不同工程配置:

? UART: DTM 使用 UART 接口(不包含升級代碼)

? UART_WITH_UPDATER:DTM 使用 UART 接口,DTM 在 Flash 的第一頁中包含 DTM_Updater .并且包含 DTM 功能。

? UART_FOR_UPDATER: DTM 使用 UART 接口,DTM 固件在 Flash 第一頁中留空不填充 (偏移 0x2000). 用戶制作升級固件,包含 DTM 功能。

? SPI: DTM 使用 SPI 接口(不包含升級代碼)

? SPI_WITH_UPDATER: DTM 使用 SPI 接口,DTM 在 Flash 的第一頁中包含DTM_Updater .并且包含 DTM 功能。

? SPI_FOR_UPDATER: DTM 固件在 Flash 第一頁中留空不填充 (偏移 0x2000). 用戶制作升級固件。包含 DTM 功能。

其中分兩大類通信方式,一類是 UART,一類是 SPI。其中 UART 通信方式的第一個“UART”工程配置是單純的 DTM,使用 UART 通信接口和其他 MCU 或者 MPU 通信作為協處理器功能的代碼。而“UART_WITH_UPDATER”工程配置包含了兩個程序,其中一個是將 DTM_Updater 工程編譯的二進制代碼放置編譯在數組中,作為啟動代碼;另外一個程序就是 DTM 程序偏移一定位置的代碼?!癠ART_FOR_UPDATER”工程配置只有一個程序,即 DTM 程序配置偏移了一定位置的代碼,它和“DTM”工程配置的差別僅僅是代碼偏移不同,實際內容一樣。

05

基于 STM32CubeMX 軟件包的協處理器模式

基于 STM32CubeMX 軟件包支持協處理器的有以下幾個:

754d1b8a-abb0-11ee-8b88-92fbcf53809c.jpg

圖5.STM32CubeMX 中的軟件包

或者參考官方的幫助文檔,如下圖右下邊的文檔。

755757bc-abb0-11ee-8b88-92fbcf53809c.jpg

圖6.X-CUBE-BLE2 軟件配置

06

基于源碼移植的協處理器模式

如果使用的另外一端的 MCU 并非是 STM32,或者一些 ST 官方還沒有適配的型號(如 BlueNRG-LPS)則需要移植協處理器模式源碼到 MCU 上。需要移植如下代碼:

756ef476-abb0-11ee-8b88-92fbcf53809c.jpg

圖7.非 STM32 使用 BlueNRG 協處理器需要移植的代碼

移植后上去后,需要適配。適配主要是實現 SPI 或者串口初始化部分的代碼以及實現這個函數:

7583137a-abb0-11ee-8b88-92fbcf53809c.jpg

可以參考 BlueNRG SDK 工程下協處理器相關的例子:

BlueNRG-LP/LPS: BlueNRG-LP_LPS_LPF DK x.x.xProjectsExternal_Micro

BlueNRG-1/2: BlueNRG-1_2 DK x.x.xProjectSTM32L

07

應用處理器(MCU)端軟件處理主框架

主要處理流程分為兩大類:

? MCU 或者處理器主動發送數據

? BlueNRG 主動發送數據

MCU 或者處理器主動發送數據的流程是這樣的:當應用端主動調用 aci_xxxx 等函數時,這些函數的處理是同步超時的。最后會調用"hci_send_req()"函數,在這個函數中,會先發送數據到 BlueNRG 端,然后在 while(1)循環中帶超時的等待,以查看hciReadPktRxQueue 隊列中是否有數據收到。當 BlueNRG 返回數據給應用處理器端(MCU)時,會通過 IO 中斷,最后觸發調用“hci_tl_lowlevel_isr()”函數。在這個函數中執行讀取數據的操作。如果成功讀取數據,將數據壓入 hciReadPktRxQueue 隊列中。整個執行 aci_xxxx 等函數的過程是同步執行的,直到超時還沒有讀取到數據放入隊列中。

BlueNRG 主動發送數據的流程如下:當 BlueNRG 發生一些事件,例如藍牙連接上了設備,這時 BlueNRG 會拉相應的 IO 口,通過應用處理器的外部中斷通知應用處理器端(MCU)。這會觸發調用“hci_tl_lowlevel_isr()”函數,在這個函數中執行讀取數據的操作。如果成功讀取數據,將數據壓入 hciReadPktRxQueue 隊列中。然后在主循環處理函數“hci_user_evt_proc()”中,會解析接收隊列中的函數。最后,如果成功解析,則會觸發對應的 xxx_event 事件。這里的 xxx_event 事件如果應用沒有定義,則默認執行一個弱定義的空函數。如果應用程序定義了,則執行用戶定義的函數。

08

交互時序圖

下文分別描述通過串口和 SPI 交互時的時序圖。了解雙方通信的時序,有助于理解雙發睡眠和喚醒,以及在定位問題時能夠更快速準確定位分析問題。

8.1. UART接口交互時序圖

使用UART接口進行交互時,時序圖如下所示:

75985f8c-abb0-11ee-8b88-92fbcf53809c.jpg

圖8.串口方式交互時序圖

上圖時 MCU 主動發送 ACI 指令流程,分為以下幾個步驟:

? MCU 發送數據

o 1:MCU 喚醒 BlueNRG 芯片

o 2:BlueNRG 芯片被喚醒完成

o 3:MCU 通過串口發送數據

如果流控允許

o 4:MCU 發送完畢數據釋放 MCU_RTS

o 5:BlueNRG 芯片允許進入睡眠

?BlueNRG 發送數據

o A: BlueNRG 喚醒 MCU

o B: MCU 被喚醒

o C: BlueNRG 通過串口發送數據

如果串口流控允許

o D: BlueNRG 發送完數據釋放 MCU_CTS

o E: MCU 允許進入睡眠

8.2. SPI 接口操作時序圖

SPI 時序圖官方文檔中描述比較詳細,建議查看官方的文檔(在 SDK 的幫助文檔index.html 中)。

75b0f290-abb0-11ee-8b88-92fbcf53809c.jpg

圖9.協處理器 SPI 通信協議

09

小結

本文介紹了 BlueNRG 系列芯片的協處理器模式、軟件分層、ACI 指令格式以及 DTM相關的工程。BlueNRG 芯片的協處理器模式與 AT 指令模式類似,但更為強大靈活,同時兼顧了 MCU 間通信的睡眠和相互喚醒等方面的需求。BlueNRG 系列的所有芯片都支持協處理器模式,且可搭配任何帶有串口或 SPI 接口的 MCU、MPU 或 PC 端使用。在軟件框架方面,協處理器模式有兩種分層,大部分應用采用第一種方式,對應用處理器或 MCU只需要關注應用部分,處理器和 MCU 之間通過 ACI 指令進行交互。了解 ACI 指令格式有助于在實際調試雙通信部分時遇到問題時分析定位問題。在 DTM 相關的工程介紹方面,建議選擇功能最齊全的 DTM 工程下,“UART_WITH_UPDATER”工程配置或者“SPI_WITH_UPDATER”工程配置。






審核編輯:劉清

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

    關注

    146

    文章

    16094

    瀏覽量

    344491
  • 協處理器
    +關注

    關注

    0

    文章

    71

    瀏覽量

    18012
  • DTM
    DTM
    +關注

    關注

    0

    文章

    8

    瀏覽量

    7348
  • UART接口
    +關注

    關注

    0

    文章

    124

    瀏覽量

    15085
  • BlueNRG
    +關注

    關注

    0

    文章

    15

    瀏覽量

    9620

原文標題:實戰經驗 | BlueNRG 系列協處理器簡介

文章出處:【微信號:STM32_STM8_MCU,微信公眾號:STM32單片機】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    pcb制造業節約用電實戰經驗

    pcb制造業節約用電實戰經驗
    發表于 08-20 20:36

    FPGA寶貴實戰經驗及Verilog編程規范

    `FPGA寶貴實戰經驗及Verilog編程規范`
    發表于 06-10 12:03

    【資料分享】ST MCU實戰經驗10篇,應用問題,官方解答

    ST MCU實戰經驗10篇,應用問題,官方解答
    發表于 03-21 15:12

    LLEGRO高速高密PCB設計實戰經驗

    本帖最后由 carey123 于 2014-10-24 15:49 編輯 ALLEGRO高速高密PC設計實戰經驗很好的資料采集
    發表于 10-24 12:02

    微機原理--數學處理器

    `微機原理--數學處理器[hide][/hide]`
    發表于 04-30 21:19

    ARM處理器體系結構是由哪些部分組成的

    ARM處理器體系結構 嵌入式工程師、嵌入式講師、10多年嵌入式開發實戰經驗,...
    發表于 12-14 08:53

    小白求助怎樣去使用ARM處理器

    ARM通過增加硬件處理器來支持對其指令集的通用擴展,通過未定義指令陷阱支持這些處理器的軟件仿真。簡單的ARM核提供板級
    發表于 04-24 09:36

    振動傳感項目外包,有實戰經驗的電子工程師聯系我。

    振動傳感項目外包,有實戰經驗的電子工程師聯系我。
    發表于 12-01 12:28

    BlueNRG-2 SoC和BlueNRG-2N處理器之間的區別?

    誰能向我解釋 BlueNRG-2 SoC 和 BlueNRG-2N 處理器之間的區別?
    發表于 12-09 07:34

    在哪里可以找到有關BlueNRG-2處理器固件版本之間差異的文檔?

    BlueNRG-2 的 BlueNRG-M2SP)嗎?BlueNRG-2 是否預裝了圖像以用作網絡處理器?主要應用程序 HCI API
    發表于 01-06 08:45

    開關電源維修方法和實戰經驗

    開關電源維修方法和實戰經驗開關電源維修方法和實戰經驗
    發表于 01-15 16:38 ?47次下載

    STM32 應用實戰經驗篇推薦閱讀

    近日,ST官方技術部門又推出了3篇針對STM32應用開發的實戰經驗篇,分享給各位ST MCU使用者。在此我對這三篇文章內容作個簡介,細節可自行去ST官方相關網站下載,文章結尾會介紹。 第一篇是介紹
    發表于 11-29 17:42 ?396次閱讀

    ARM全國產云平臺部署容器實戰經驗分享

    ARM全國產云平臺部署容器實戰經驗分享
    發表于 07-18 16:11 ?71次下載
    ARM全國產云平臺部署容器<b class='flag-5'>實戰經驗</b>分享

    實戰經驗:從5個方面來談IC設計資料下載

    電子發燒友網為你提供實戰經驗:從5個方面來談IC設計資料下載的電子資料下載,更有其他相關的電路圖、源代碼、課件教程、中文資料、英文資料、參考設計、用戶指南、解決方案等資料,希望可以幫助到廣大的電子工程師們。
    發表于 04-14 08:41 ?28次下載
    <b class='flag-5'>實戰經驗</b>:從5個方面來談IC設計資料下載

    嵌入式項目實戰經驗

    嵌入式項目實戰經驗分享,C/C++、Linux、STM32、51單片機、FPGA、IoT、OpenCV、數字圖像處理、通信、算法!
    發表于 11-03 12:36 ?23次下載
    嵌入式項目<b class='flag-5'>實戰經驗</b>
    亚洲欧美日韩精品久久_久久精品AⅤ无码中文_日本中文字幕有码在线播放_亚洲视频高清不卡在线观看
    <acronym id="s8ci2"><small id="s8ci2"></small></acronym>
    <rt id="s8ci2"></rt><rt id="s8ci2"><optgroup id="s8ci2"></optgroup></rt>
    <acronym id="s8ci2"></acronym>
    <acronym id="s8ci2"><center id="s8ci2"></center></acronym>