你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

基于STM32的BlueNRG 系列协处理器简介经验分享

[复制链接]
STMCU小助手 发布时间:2024-1-18 18:15
01协处理器模式概述
' {3 o& ~. b1 W( _BlueNRG 系列芯片从最早的一代 BlueNRG-MS 开始就支持协处理器模式。在协处理器模式下,BLE 功能在 BlueNRG 芯片端完成,应用部分在 MCU 端完成。与 AT 指令的模式类似,协处理器方式也具有高内聚、低耦合的特点,但相比于 AT 指令模式,协处理器方式更为强大灵活,而且还兼顾了 MCU 间通信的睡眠和相互唤醒等方面的需求。 ' x/ R* P1 ], M+ A

! O  Q' e8 y# tBlueNRG 系列的所有芯片都支持协处理器模式。在使用协处理器时,BlueNRG 需要烧录一个 DTM 固件。DTM 原本是指 Direct Test Mode,而 ST 在这个固件的功能上进行了扩充。除了用于 RF 测试(包括 RF 发射功率、接收灵敏度、频偏、谐波等方面的测试),BlueNRG 的 DTM 固件还可以用于协处理器模式。 5 z; u8 B7 a) N+ U( B1 m

, f0 J6 I; v, V* Y; j9 b1 vBlueNRG GUI 工具是一个针对 BlueNRG 芯片协处理器应用的工具。在使用协处理器时,协处理器可以搭配任何带有串口或 SPI 接口的 MCU、MPU 或 PC 端使用。
3 S( A+ ~, M# w% \3 `
7 y( v) J+ ]0 b# I1 r如下图所示,官方协处理器资料可以通过 SDK 中文档 index.html 进行索引。5 }1 V) u; W1 i! n; }) X6 T2 n
2 z: L. K$ G- y) H9 R7 t
微信图片_20240118181351.jpg
. G. B9 Z) b4 J( g& _
图1.BlueNRG 端协处理器官方资料
; _, K6 ~" q% w6 r: B, B3 e

9 w/ L- V+ x. ]. q, Z- K4 J
/ V5 g5 |& m0 f9 {: q, L
02协处理器软件分层: }2 L, G' h/ I
BlueNRG GUI 工具的使用属于一个 BlueNRG 芯片协处理器的应用。
5 U' ~$ X! L& m9 \1 I" k* g8 d0 M2 F
; _* I% `; _# A协处理器可以搭配任意带UART或者 SPI 的 MCU、MPU 或者 PC 端使用。
" `  ^: Q0 B, l3 D7 Z0 k7 j+ B9 }  p9 R( U& L" _, _
软件框架如下图所示。协处理器模式有两种分层。
* B+ ?  [" }8 B1 |6 U3 O, J( |. `/ G• [处理器] APP <------------> [BlueNRG] (Host+Controller)
3 P2 ?! X4 i! ?( t9 @• [处理器](APP+Host) <------------> [BlueNRG] (Controller)
. x! q6 O; e. j0 t& u# ?2 T
& g/ t+ m- ]1 L
微信图片_20240118181348.jpg
+ L$ ]2 n+ K- ?
图2.协处理器软件框架

2 G9 _& c% g( E' U! g- p

3 ^! M3 y* `' @3 H# f" ?( H大部分应用会采用第一种方式,对应用处理器或者 MCU 只需要关注应用部分,这种方式,处理器和 MCU 之间是通过 ACI 指令进行交互,ACI 是 HCI 指令的扩展。 * e) e8 Y* f. T, Y
1 T4 Y: K, Z' ?4 p' R4 N3 h# Q
第二种方式,BlueNRG 系列运行 Controller 部分,MCU 或者处理器 Host 层协议和应用,使用的场景比较少,双方之间通过 HCI 经行交互。BlueNRG 系列如果需要使用这种方式的协议栈,则编译 DTM 固件的时候,则需要在 Preprocessor Symbols 中使能“LL_ONLY”宏。& B) S0 r6 v% C/ X# i# X. x
: S9 X, s7 E" U! ]
03ACI 指令格式. J# r; R' n5 e1 q( G3 L  \( T
Bluetooth LE 协议栈 ACI 指令利用并扩展了标准 HCI 数据格式。
* i) b' c1 k- W, ^& R* L, h7 ~: o# K# b, [  R2 N" C5 s5 I
微信图片_20240118181344.jpg

0 k: f: x9 [3 d9 j0 o
图3.HCI 指令格式
; j% i( ~1 \7 c# D0 W, _
# L% A2 I  M! c2 E" q1 H# {- {6 ^$ g
根据 Bluetooth 核心规范,标准 HCI 数据包可以是以下几种类型:) \" P; W) y- @/ d; l) C
• HCI 命令数据包(数据包类型:0x01): O; P" b) n" L0 B8 m# i
• HCI ACL 数据包(数据包类型:0x02)
* X/ `" p+ W6 j5 l3 ]: U• HCI 同步数据包(数据包类型:0x03)
6 J0 U, d$ f8 C& r3 E- J0 c+ ]• HCI 事件数据包(数据包类型:0x04)
% ^2 o+ v; j$ j9 q• HCI 扩展命令(数据包类型:0x81)& V' a, z9 M5 M! S
• HCI 扩展事件(数据包类型:0x82)0 K4 J# g: \7 B; r
) q7 z7 C$ z$ ?4 |
详细的数据包格式可以通过如下方式详细查看:
3 _2 R5 b: Y9 c: H9 N$ U" B& q( }* l# v: i" [
打开 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.# @8 b4 W; g  m1 ]0 I7 X- X. ^
+ v; `: d  G3 {9 U; ~
了解 ACI 指令格式有助于在实际调试双通信部分时遇到问题时分析定位问题。
4 A0 P* Y& Q; O
" F1 P* |( v" g1 i详细的其他协处理器资料可以通过 SDK 中 index.html 中的如下章节进行查找。
; ]6 W1 Y2 P- o# X4 T
3 A+ ~$ h% N+ J
04DTM 相关的工程介绍
: W2 o+ P+ @! ^7 Z& j# BBlueNRG SDK 中提供了很多个不同的 DTM 的工程,用户难以分辨。   L1 j  `# n. }' K
  j/ v+ ^/ f; ]8 T! x) j- b  a
为了简化,绝大部分应用,建议选择功能最齐全的 DTM 工程下,“UART_WITH_UPDATER”工程配置或者“SPI_WITH_UPDATER”工程配置。) |. W  |% M2 n
2 O% y2 H4 O8 _6 h. k
微信图片_20240118181341.jpg

6 a( W9 n( j9 W% D
图4.BlueNRG DTM 相关的工程

* A; a: U2 Z" ?% F

+ B7 J# X, ^) B7 ~1 d其中 SDK 中包含的工程如下 :
5 ?3 }+ y/ [. C  l) ?1 d• DTM: // DTM 是 Full Stack
+ J( m0 {, }1 ?4 u5 x• DTM_basic: // DTM 配置为 Basic stack; D' N/ d( f3 ]
• DTM_Updater: // 带 boot 程序 DTM 的 boot 源码工程) Y" Q# O0 R% J) y
  j* _* f/ B! m. T1 S
其中 DTM 工程和 DTM_basic 工程是实现 DTM 功能的工程,他们之间的差别主要是一个默认是 Full stack,另一个默认为 Basic stack。而 DTM_Updater 只是一个 DTM 的 boot 源码工程。6 ?! K* ]4 Y0 d

: K- F0 z: z# |' m8 g  n打开 DTM 或者 DTM_basic 工程可以看到如下不同工程配置:
# t2 {6 ~$ ?! W1 m7 q% J• UART: DTM 使用 UART 接口(不包含升级代码)
0 N2 d+ c+ w5 t' B+ J1 m* G• UART_WITH_UPDATERTM 使用 UART 接口,DTM 在 Flash 的第一页中包含 DTM_Updater .并且包含 DTM 功能。9 x+ h, ^4 a. U. \/ R
• UART_FOR_UPDATER: DTM 使用 UART 接口,DTM 固件在 Flash 第一页中留空不填充 (偏移 0x2000). 用户制作升级固件,包含 DTM 功能。
$ }2 U( {9 V% h7 Q; X4 d' ~3 i• SPI: DTM 使用 SPI 接口(不包含升级代码)/ u& a  s) }4 A' R% w/ E; @
• SPI_WITH_UPDATER: DTM 使用 SPI 接口,DTM 在 Flash 的第一页中包含DTM_Updater .并且包含 DTM 功能。+ K, N: h; b' A- h7 k- C' B5 L' T
• SPI_FOR_UPDATER: DTM 固件在 Flash 第一页中留空不填充 (偏移 0x2000). 用户制作升级固件。包含 DTM 功能。
# M+ Q5 c% y6 l1 P+ {0 Z& E2 j% {6 [) R# x8 g+ b; U
其中分两大类通信方式,一类是 UART,一类是 SPI。其中 UART 通信方式的第一个“UART”工程配置是单纯的 DTM,使用 UART 通信接口和其他 MCU 或者 MPU 通信作为协处理器功能的代码。而“UART_WITH_UPDATER”工程配置包含了两个程序,其中一个是将 DTM_Updater 工程编译的二进制代码放置编译在数组中,作为启动代码;另外一个程序就是 DTM 程序偏移一定位置的代码。“UART_FOR_UPDATER”工程配置只有一个程序,即 DTM 程序配置偏移了一定位置的代码,它和“DTM”工程配置的差别仅仅是代码偏移不同,实际内容一样。
& Q( d$ E3 ~/ ~
. c- F! ^, p3 C8 f05基于 STM32CubeMX 软件包的协处理器模式) Q9 A2 A- ?9 [8 h* M
基于 STM32CubeMX 软件包支持协处理器的有以下几个:
) E3 |4 B/ L! m  v/ v) i5 P4 m- T& _
( }8 `* a4 z$ k
微信图片_20240118181338.jpg

, P% w2 I! P3 }
图5.STM32CubeMX 中的软件包
' C, F" n6 P# j- [7 u6 d( v

' D9 f) F5 n" h

+ L% B) l" @, W9 @, N
详细的软件配置涉及步骤比较多) S% Y, j0 ^5 ?% j  ^. @1 f

3 n' b+ }5 z, @4 S7 c( U  b4 m! d: m或者参考官方的帮助文档,如下图右下边的文档。
; B5 T# Q# x  O
# t+ \- q  O* {3 W$ j
微信图片_20240118181335.jpg
! L) C0 t& [) C7 `6 D
图6.X-CUBE-BLE2 软件配置

* y1 _  |& a1 o3 j/ {3 j2 ?
2 F$ l/ t3 `7 ^! g  c2 a

7 y5 X# c% y: C% Z2 m4 y! N9 R06基于源码移植的协处理器模式
- l- ^& V5 {/ w0 Y/ E& w* T( J如果使用的另外一端的 MCU 并非是 STM32,或者一些 ST 官方还没有适配的型号(如 BlueNRG-LPS)则需要移植协处理器模式源码到 MCU 上。需要移植如下代码:
- c3 Y: p# a! R2 o( d
+ E& e2 \, u7 I7 S2 p# l
微信图片_20240118181332.jpg
3 S2 ]6 q( x0 \# ]$ j5 H+ U: g/ |- Z
图7.非 STM32 使用 BlueNRG 协处理器需要移植的代码
' R: b, D* r( u6 E" g
/ \( l7 S; r* h. K5 f/ y
移植后上去后,需要适配。适配主要是实现 SPI 或者串口初始化部分的代码以及实现这个函数:: Q) ?2 i; n* A4 X# {5 e, `
5 H% j, \  O7 U& P4 f6 o0 U
微信图片_20240118181328.jpg 2 T2 {9 ?) F$ L) |
8 Y& c- H% z0 d( \+ Z( K
可以参考 BlueNRG SDK 工程下协处理器相关的例子:: W- M* P$ e: v8 w' o# b* j
BlueNRG-LP/LPS: BlueNRG-LP_LPS_LPF DK x.x.x\Projects\External_Micro/ N+ P% o0 I" K- H* L
BlueNRG-1/2: BlueNRG-1_2 DK x.x.x\Project\STM32L
, u6 ^& o* E% r* `, L) i% e) x- {- u8 n' v. P. D
07应用处理器(MCU)端软件处理主框架4 ^! p2 d6 h8 t, g( z8 a
主要处理流程分为两大类:) G. f. e) E5 T
• MCU 或者处理器主动发送数据
, l; X" N# j* ?  \! l3 D• BlueNRG 主动发送数据 . Q) f! F2 `4 t& V% Z
; u0 b5 w1 T+ @
MCU 或者处理器主动发送数据的流程是这样的:当应用端主动调用 aci_xxxx 等函数时,这些函数的处理是同步超时的。最后会调用"hci_send_req()"函数,在这个函数中,会先发送数据到 BlueNRG 端,然后在 while(1)循环中带超时的等待,以查看hciReadPktRxQueue 队列中是否有数据收到。当 BlueNRG 返回数据给应用处理器端(MCU)时,会通过 IO 中断,最后触发调用“hci_tl_lowlevel_isr()”函数。在这个函数中执行读取数据的操作。如果成功读取数据,将数据压入 hciReadPktRxQueue 队列中。整个执行 aci_xxxx 等函数的过程是同步执行的,直到超时还没有读取到数据放入队列中。 - G( O3 e$ r8 n% l  c0 q3 q
. ?, h1 _! ]+ h% ?+ n
BlueNRG 主动发送数据的流程如下:当 BlueNRG 发生一些事件,例如蓝牙连接上了设备,这时 BlueNRG 会拉相应的 IO 口,通过应用处理器的外部中断通知应用处理器端(MCU)。这会触发调用“hci_tl_lowlevel_isr()”函数,在这个函数中执行读取数据的操作。如果成功读取数据,将数据压入 hciReadPktRxQueue 队列中。然后在主循环处理函数“hci_user_evt_proc()”中,会解析接收队列中的函数。最后,如果成功解析,则会触发对应的 xxx_event 事件。这里的 xxx_event 事件如果应用没有定义,则默认执行一个弱定义的空函数。如果应用程序定义了,则执行用户定义的函数。
+ e2 p$ C* l& @0 t6 }8 t% _) ^/ H5 r7 o
08交互时序图
4 W7 ~0 u% U# ^下文分别描述通过串口和 SPI 交互时的时序图。了解双方通信的时序,有助于理解双发睡眠和唤醒,以及在定位问题时能够更快速准确定位分析问题。" L* C# ]  \! H/ H8 f
5 }) N- W( l1 g  M, x1 }0 d) Z
8.1. UART接口交互时序图
+ y+ R/ j, S5 _% [6 J2 g使用UART接口进行交互时,时序图如下所示:% v+ ]1 h$ H2 \: f( Z, |

3 [7 r: U% k; a2 n  t7 R
微信图片_20240118181325.jpg

. I$ t+ [/ [" h' ]) @# a& O
图8.串口方式交互时序图

& B' Q: S! ~9 R( r2 L
3 Q3 k& B9 e, U' p$ Y4 `
上图时 MCU 主动发送 ACI 指令流程,分为以下几个步骤:$ J! }0 ^# H. h, ?% A3 r$ X3 M
• MCU 发送数据
1 o* z  P8 C" y# q- L    o 1:MCU 唤醒 BlueNRG 芯片' k+ s3 `% B/ t
    o 2:BlueNRG 芯片被唤醒完成# S6 ?6 v4 I2 r: H$ c( W$ n. r) b* e
    o 3:MCU 通过串口发送数据7 W. h% F1 W, C) t, R& Z
           ▪ 如果流控允许9 j2 r% }+ m; i% _: K$ j
    o 4:MCU 发送完毕数据释放 MCU_RTS! s; o, f# k! ~, f8 Z# H2 B* t
    o 5:BlueNRG 芯片允许进入睡眠
* S* x  U8 p4 S8 d8 F$ \7 R* ^•BlueNRG 发送数据
, G+ n' r- `* a" h& w    o A: BlueNRG 唤醒 MCU! f6 V& F3 f1 ^% W# o$ {0 n- P
    o B: MCU 被唤醒
4 F/ h9 q% r3 g4 I( X    o C: BlueNRG 通过串口发送数据. l! o$ Q% H9 Q1 }" Z  u# k
        ▪ 如果串口流控允许- b& o( b0 r% N- e1 A8 M
    o D: BlueNRG 发送完数据释放 MCU_CTS- @' a: ^3 z( P6 y: i/ Q! y
    o E: MCU 允许进入睡眠4 N3 s! {! s; \

( S4 O7 v( J. J8.2. SPI 接口操作时序图
4 v, P' o4 l1 H5 ]/ b' y
SPI 时序图官方文档中描述比较详细,建议查看官方的文档(在 SDK 的帮助文档index.html 中)。
5 B( s. H) s2 X: z3 H0 b# H
1 [% o% V. p2 n7 k  Y
微信图片_20240118181321.jpg

. w! ]' q% u# O$ i, K: |
图9.协处理器 SPI 通信协议

* t4 {$ D, e5 y% F

: n6 i0 I& U' F! F5 M: x2 Y

  M  p& k8 _  J6 [" _* p) W- Z1 O09小结
% ~% N5 F4 g. n+ P1 f2 @1 i本文介绍了 BlueNRG 系列芯片的协处理器模式、软件分层、ACI 指令格式以及 DTM相关的工程。BlueNRG 芯片的协处理器模式与 AT 指令模式类似,但更为强大灵活,同时兼顾了 MCU 间通信的睡眠和相互唤醒等方面的需求。BlueNRG 系列的所有芯片都支持协处理器模式,且可搭配任何带有串口或 SPI 接口的 MCU、MPU 或 PC 端使用。在软件框架方面,协处理器模式有两种分层,大部分应用采用第一种方式,对应用处理器或 MCU只需要关注应用部分,处理器和 MCU 之间通过 ACI 指令进行交互。了解 ACI 指令格式有助于在实际调试双通信部分时遇到问题时分析定位问题。在 DTM 相关的工程介绍方面,建议选择功能最齐全的 DTM 工程下,“UART_WITH_UPDATER”工程配置或者“SPI_WITH_UPDATER”工程配置。
2 M0 `: [2 F! L6 K: O' Q

2 x# C, N. p) U$ f6 `转载自: STM32单片机
5 ~, b+ ~, y, O6 m' H$ T% ]  n如有侵权请联系删除8 P; ]6 [* a! M
+ c' ]0 K) m/ B; O) j9 v

$ p, P  k7 B, X. X9 B/ [# n
8 _7 @% X. y; A
赞 收藏 评论0 发布时间:2024-1-18 18:15

举报

0个回答

所属标签

相似技术帖

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
人形机器人运动控制、感知与智能配电
半导体创新技术与应用方向
EE架构与软件定义汽车
12V/48V 汽车智能配电(SPD)
区域控制单元(ZCU)与分区架构
关注我们
st-img 微信公众号
st-img 手机版