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

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

[复制链接]
STMCU小助手 发布时间:2024-1-18 18:15
01协处理器模式概述
2 b: S" B4 m' x; b# D. KBlueNRG 系列芯片从最早的一代 BlueNRG-MS 开始就支持协处理器模式。在协处理器模式下,BLE 功能在 BlueNRG 芯片端完成,应用部分在 MCU 端完成。与 AT 指令的模式类似,协处理器方式也具有高内聚、低耦合的特点,但相比于 AT 指令模式,协处理器方式更为强大灵活,而且还兼顾了 MCU 间通信的睡眠和相互唤醒等方面的需求。
# B0 S* {, M& T$ _$ @2 O
/ Y+ \% s4 m1 N9 f' y4 TBlueNRG 系列的所有芯片都支持协处理器模式。在使用协处理器时,BlueNRG 需要烧录一个 DTM 固件。DTM 原本是指 Direct Test Mode,而 ST 在这个固件的功能上进行了扩充。除了用于 RF 测试(包括 RF 发射功率、接收灵敏度、频偏、谐波等方面的测试),BlueNRG 的 DTM 固件还可以用于协处理器模式。 . P2 h: n) z  j: J$ C$ W
2 h3 {7 {* k& z( b9 d
BlueNRG GUI 工具是一个针对 BlueNRG 芯片协处理器应用的工具。在使用协处理器时,协处理器可以搭配任何带有串口或 SPI 接口的 MCU、MPU 或 PC 端使用。 % O( D7 O" |  A2 E1 R/ B# \$ {3 x
2 L4 P5 g: {. {0 U
如下图所示,官方协处理器资料可以通过 SDK 中文档 index.html 进行索引。
0 n7 t0 _: Y) X+ U5 ?
. y9 m/ M1 ^" U7 h
微信图片_20240118181351.jpg

& v* N% H9 F" c9 v2 ~1 Z6 n
图1.BlueNRG 端协处理器官方资料
' K5 U, F# p+ A( _  Z

" o' S; `, y+ R2 \' Y" T

# S& ?7 ^/ T$ u* O: P
02协处理器软件分层7 w8 _  B7 I9 ^) ^( y
BlueNRG GUI 工具的使用属于一个 BlueNRG 芯片协处理器的应用。 3 ^' y" ?5 v- s, ?' q
0 g( W) v5 j; W! w1 `+ O( P
协处理器可以搭配任意带UART或者 SPI 的 MCU、MPU 或者 PC 端使用。 , d$ N( U+ }' m. V. K
9 f; a% K5 p8 L9 }' ^6 r4 H
软件框架如下图所示。协处理器模式有两种分层。. X9 U; n  L  S) b; R- V* b3 W5 p
• [处理器] APP <------------> [BlueNRG] (Host+Controller)6 N' p6 @4 Q9 ?6 ]1 O# X2 L# @
• [处理器](APP+Host) <------------> [BlueNRG] (Controller)
, U4 X/ ]6 a2 X. H9 N0 h3 j5 C1 B$ z, `
微信图片_20240118181348.jpg
; O' q) s5 d' d+ Q, C
图2.协处理器软件框架
: b( b# b$ E+ x- Q
" e' y) W, F$ q6 Y3 \$ Z; {
大部分应用会采用第一种方式,对应用处理器或者 MCU 只需要关注应用部分,这种方式,处理器和 MCU 之间是通过 ACI 指令进行交互,ACI 是 HCI 指令的扩展。
) L  L3 U5 w* @7 `; J7 z0 H
3 k4 E, s- w+ l4 s- V9 C( e第二种方式,BlueNRG 系列运行 Controller 部分,MCU 或者处理器 Host 层协议和应用,使用的场景比较少,双方之间通过 HCI 经行交互。BlueNRG 系列如果需要使用这种方式的协议栈,则编译 DTM 固件的时候,则需要在 Preprocessor Symbols 中使能“LL_ONLY”宏。
3 A; v) e# Q' H9 H/ N" d1 B% Q2 S9 V3 w0 A7 z
03ACI 指令格式
; ^) `6 x! k, h: A( A, o8 v& xBluetooth LE 协议栈 ACI 指令利用并扩展了标准 HCI 数据格式。
7 p7 F" G3 j+ Q+ a. E. J2 |( U6 J* s6 V( H0 F6 b9 o
微信图片_20240118181344.jpg
; N4 r# r4 y* N1 N9 T8 ^
图3.HCI 指令格式
/ j' l+ b; b, X* e

- r2 R/ ~1 e0 A: w9 ^* Z3 d根据 Bluetooth 核心规范,标准 HCI 数据包可以是以下几种类型:) j! a0 J+ x, F# O. e' x
• HCI 命令数据包(数据包类型:0x01)5 ~" g' ?2 T% s/ w6 o- q
• HCI ACL 数据包(数据包类型:0x02)% e$ B" J+ u( w! j8 @5 _* R
• HCI 同步数据包(数据包类型:0x03)
9 c9 q! [  i+ P7 a• HCI 事件数据包(数据包类型:0x04)  q0 U2 L3 l5 W8 m1 q1 |# T( ]4 y
• HCI 扩展命令(数据包类型:0x81)
1 @+ t: N. |  b# g+ H3 [• HCI 扩展事件(数据包类型:0x82)+ s# I( U. G" X% ~
( q; G0 I) ]2 F
详细的数据包格式可以通过如下方式详细查看:
/ s+ V7 ^/ l5 E. \+ R) F
( O& R) Q( a5 A8 i) k) O打开 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.
  T/ V. p+ I4 F( ?
' z% a8 e9 a! T" ~1 G
了解 ACI 指令格式有助于在实际调试双通信部分时遇到问题时分析定位问题。
' D0 I5 U6 T/ X* X
' O: @8 z) E: C详细的其他协处理器资料可以通过 SDK 中 index.html 中的如下章节进行查找。
, h' w, g+ {- D- O! A
4 ]$ u1 y  Y5 h  d6 u- C$ ?
04DTM 相关的工程介绍
# O0 ~1 r5 i/ r# gBlueNRG SDK 中提供了很多个不同的 DTM 的工程,用户难以分辨。 * a/ G( R. ~, i4 {8 [

: V( s  a1 i6 C8 S为了简化,绝大部分应用,建议选择功能最齐全的 DTM 工程下,“UART_WITH_UPDATER”工程配置或者“SPI_WITH_UPDATER”工程配置。
8 O3 e/ Q0 O- P6 E8 c
# v" ^8 E, E6 m1 G, c" z
微信图片_20240118181341.jpg
0 q4 m: `1 K# n
图4.BlueNRG DTM 相关的工程

# \* O& i6 }" U: @7 W
3 w' B* Z/ B4 a
其中 SDK 中包含的工程如下 :
! k) w  d* h) m8 h* k- F• DTM: // DTM 是 Full Stack
  m% \8 x: s" o; k• DTM_basic: // DTM 配置为 Basic stack
& \8 u) u; g; R' v/ h# ]) c• DTM_Updater: // 带 boot 程序 DTM 的 boot 源码工程
; o8 K" E+ N6 G! }. P1 `0 R
8 ]. D# n. ~0 x( v其中 DTM 工程和 DTM_basic 工程是实现 DTM 功能的工程,他们之间的差别主要是一个默认是 Full stack,另一个默认为 Basic stack。而 DTM_Updater 只是一个 DTM 的 boot 源码工程。
1 o, k9 G# u' `# H7 Q0 @* A: T4 T: `# ^8 @! g7 v
打开 DTM 或者 DTM_basic 工程可以看到如下不同工程配置:0 X% ]7 x  v( N% x* r
• UART: DTM 使用 UART 接口(不包含升级代码): d/ z7 c7 N/ Z# U( x7 L: L$ d
• UART_WITH_UPDATERTM 使用 UART 接口,DTM 在 Flash 的第一页中包含 DTM_Updater .并且包含 DTM 功能。5 Q; C9 d8 M3 \( e9 Y2 q
• UART_FOR_UPDATER: DTM 使用 UART 接口,DTM 固件在 Flash 第一页中留空不填充 (偏移 0x2000). 用户制作升级固件,包含 DTM 功能。4 c5 ^7 }1 F  [: c# p8 R
• SPI: DTM 使用 SPI 接口(不包含升级代码)2 H$ B7 g6 S: z- o! M2 ^* ?
• SPI_WITH_UPDATER: DTM 使用 SPI 接口,DTM 在 Flash 的第一页中包含DTM_Updater .并且包含 DTM 功能。
- ?7 z( y1 H5 N• SPI_FOR_UPDATER: DTM 固件在 Flash 第一页中留空不填充 (偏移 0x2000). 用户制作升级固件。包含 DTM 功能。8 Y6 B, y& C6 k8 p! w; S

$ t2 H$ x6 t+ z; C  J& v0 b其中分两大类通信方式,一类是 UART,一类是 SPI。其中 UART 通信方式的第一个“UART”工程配置是单纯的 DTM,使用 UART 通信接口和其他 MCU 或者 MPU 通信作为协处理器功能的代码。而“UART_WITH_UPDATER”工程配置包含了两个程序,其中一个是将 DTM_Updater 工程编译的二进制代码放置编译在数组中,作为启动代码;另外一个程序就是 DTM 程序偏移一定位置的代码。“UART_FOR_UPDATER”工程配置只有一个程序,即 DTM 程序配置偏移了一定位置的代码,它和“DTM”工程配置的差别仅仅是代码偏移不同,实际内容一样。+ m" N$ R) ]4 v/ c; J) x

) Q. B# w  ?' C$ m5 C05基于 STM32CubeMX 软件包的协处理器模式& B+ r9 n5 c4 s4 M% i% D" c
基于 STM32CubeMX 软件包支持协处理器的有以下几个:3 [! ^0 B( g( }

7 Y" X- J: L, r4 }
微信图片_20240118181338.jpg

. }' i3 D: U# m% c% m, E
图5.STM32CubeMX 中的软件包

5 }( |' H$ a3 j% v3 I
. d2 Q  y* W/ l1 o# U) i% r
2 Z, t3 a/ _3 @$ p" a
详细的软件配置涉及步骤比较多
% Q# V3 B1 e1 f, X' E( d8 W8 x% @7 R
或者参考官方的帮助文档,如下图右下边的文档。9 `# S1 ^# |5 x2 \  I
1 q+ [" f" m# y
微信图片_20240118181335.jpg
4 l9 M$ k+ I) m) C' _0 K- `
图6.X-CUBE-BLE2 软件配置

; z3 J5 Y9 K6 i1 r; p
, c9 t" J% k, T; I! ?
+ d  l- k9 r- o) O1 @& L. r  k4 B( @
06基于源码移植的协处理器模式% ~( B* o+ f; J3 @- ?
如果使用的另外一端的 MCU 并非是 STM32,或者一些 ST 官方还没有适配的型号(如 BlueNRG-LPS)则需要移植协处理器模式源码到 MCU 上。需要移植如下代码:
' T5 c* |4 V' E2 }8 \8 h4 ^( m6 P3 |5 Q: V
微信图片_20240118181332.jpg

3 }5 q  I4 ^" l0 v$ w
图7.非 STM32 使用 BlueNRG 协处理器需要移植的代码

" F* ~& y# F; d0 f" N

8 K5 @* N/ V$ Z. q移植后上去后,需要适配。适配主要是实现 SPI 或者串口初始化部分的代码以及实现这个函数:4 j6 D/ S2 s3 b- R8 X- M
0 V( y) `  W9 a: S6 s: ^: x
微信图片_20240118181328.jpg 8 f. d% R! O2 Q% R" K& v0 N
  q$ S; a' @7 J/ j8 M
可以参考 BlueNRG SDK 工程下协处理器相关的例子:$ B5 U2 @2 e; a% P- c
BlueNRG-LP/LPS: BlueNRG-LP_LPS_LPF DK x.x.x\Projects\External_Micro
) W( a# ~: v' V! m) q( aBlueNRG-1/2: BlueNRG-1_2 DK x.x.x\Project\STM32L+ w( A' I8 l" v& c2 H' b: ~

/ V# \% z7 w  n$ V. w07应用处理器(MCU)端软件处理主框架; s0 q& N+ z( t2 o+ @3 W1 j$ `
主要处理流程分为两大类:. A; h  d5 Y, S/ {/ A% b
• MCU 或者处理器主动发送数据  {! o2 m: K1 Q, G2 p" Q
• BlueNRG 主动发送数据
7 j! c- `& E6 w5 w, Q5 g) U, y$ j; S) h$ ~3 t
MCU 或者处理器主动发送数据的流程是这样的:当应用端主动调用 aci_xxxx 等函数时,这些函数的处理是同步超时的。最后会调用"hci_send_req()"函数,在这个函数中,会先发送数据到 BlueNRG 端,然后在 while(1)循环中带超时的等待,以查看hciReadPktRxQueue 队列中是否有数据收到。当 BlueNRG 返回数据给应用处理器端(MCU)时,会通过 IO 中断,最后触发调用“hci_tl_lowlevel_isr()”函数。在这个函数中执行读取数据的操作。如果成功读取数据,将数据压入 hciReadPktRxQueue 队列中。整个执行 aci_xxxx 等函数的过程是同步执行的,直到超时还没有读取到数据放入队列中。
" m0 n. O0 l) \/ a( L0 c
) A1 R: q% B: d+ A' HBlueNRG 主动发送数据的流程如下:当 BlueNRG 发生一些事件,例如蓝牙连接上了设备,这时 BlueNRG 会拉相应的 IO 口,通过应用处理器的外部中断通知应用处理器端(MCU)。这会触发调用“hci_tl_lowlevel_isr()”函数,在这个函数中执行读取数据的操作。如果成功读取数据,将数据压入 hciReadPktRxQueue 队列中。然后在主循环处理函数“hci_user_evt_proc()”中,会解析接收队列中的函数。最后,如果成功解析,则会触发对应的 xxx_event 事件。这里的 xxx_event 事件如果应用没有定义,则默认执行一个弱定义的空函数。如果应用程序定义了,则执行用户定义的函数。0 l( r3 A$ Y; V( Y% O

6 X) k; Q: Z( O+ [7 O08交互时序图/ r  d) p& u7 X. R% Y
下文分别描述通过串口和 SPI 交互时的时序图。了解双方通信的时序,有助于理解双发睡眠和唤醒,以及在定位问题时能够更快速准确定位分析问题。7 l% W5 s/ |4 k  k% R$ y3 Z

3 _7 O/ J  A  b$ }: S' P8.1. UART接口交互时序图
, R' ^0 ~$ T: o; Y使用UART接口进行交互时,时序图如下所示:
" d; w/ [- x, f7 i
: z; F9 s! J! B+ l& b& l5 R* S
微信图片_20240118181325.jpg
7 h8 x5 Q) k$ X4 C& z
图8.串口方式交互时序图

, x. R; l+ `4 L
  x) l! m0 z( w2 A+ u
上图时 MCU 主动发送 ACI 指令流程,分为以下几个步骤:' X  N+ A& M) [5 a  ~
• MCU 发送数据8 \* D* n/ X0 D+ }, w5 B
    o 1:MCU 唤醒 BlueNRG 芯片4 I$ N( T/ q& L8 W" X
    o 2:BlueNRG 芯片被唤醒完成4 L- b$ n3 i, U% c
    o 3:MCU 通过串口发送数据
+ T! S+ [4 \0 K$ @/ l+ I. u9 A           ▪ 如果流控允许- }( \  A. k  M! _: y
    o 4:MCU 发送完毕数据释放 MCU_RTS
. O0 J! m* K0 E+ r0 b' ^    o 5:BlueNRG 芯片允许进入睡眠) Y3 J) y& }- D6 B4 c9 I  I7 t5 F
•BlueNRG 发送数据/ b& P  K( L4 _: ]8 w* \
    o A: BlueNRG 唤醒 MCU
( ]* v+ J* |/ I, h. v/ \    o B: MCU 被唤醒
3 q* B6 R$ k3 K9 N, n3 t    o C: BlueNRG 通过串口发送数据
, C  p) c4 e$ r& k7 l1 |2 ~        ▪ 如果串口流控允许1 J6 Y0 m4 d2 p4 s
    o D: BlueNRG 发送完数据释放 MCU_CTS
) y, t) r. o5 s( n& }1 }    o E: MCU 允许进入睡眠
8 y' }8 a4 O2 `2 m8 x' P2 J: e; F7 \2 {
8.2. SPI 接口操作时序图
9 B5 A* y% A9 Y- K
SPI 时序图官方文档中描述比较详细,建议查看官方的文档(在 SDK 的帮助文档index.html 中)。: J- c7 `9 r$ T1 B9 T

7 D6 h% p/ e  j- H1 V+ S% D" K
微信图片_20240118181321.jpg

) q" k9 j% a9 P
图9.协处理器 SPI 通信协议

2 F. g. }/ k. F' W

; D; `7 n$ `1 E5 t! ~. y
4 H8 I$ M: v7 D* A, \% Y1 s
09小结
9 S( R3 G* N, o7 h/ s, ^本文介绍了 BlueNRG 系列芯片的协处理器模式、软件分层、ACI 指令格式以及 DTM相关的工程。BlueNRG 芯片的协处理器模式与 AT 指令模式类似,但更为强大灵活,同时兼顾了 MCU 间通信的睡眠和相互唤醒等方面的需求。BlueNRG 系列的所有芯片都支持协处理器模式,且可搭配任何带有串口或 SPI 接口的 MCU、MPU 或 PC 端使用。在软件框架方面,协处理器模式有两种分层,大部分应用采用第一种方式,对应用处理器或 MCU只需要关注应用部分,处理器和 MCU 之间通过 ACI 指令进行交互。了解 ACI 指令格式有助于在实际调试双通信部分时遇到问题时分析定位问题。在 DTM 相关的工程介绍方面,建议选择功能最齐全的 DTM 工程下,“UART_WITH_UPDATER”工程配置或者“SPI_WITH_UPDATER”工程配置。; o6 \" K) y+ g1 w5 N+ T  g
/ J; Q: o( \, Y0 O
转载自: STM32单片机
: v1 }+ g5 P, f6 O$ ^3 `, L. z5 `如有侵权请联系删除
5 M, @6 w" ?* N5 `& q1 _% v" S6 ?/ `+ }5 C0 H; U

5 m- _: M& H' U& z& _  ^8 T: x, O, j- j% H4 t
赞 收藏 评论0 发布时间:2024-1-18 18:15

举报

0个回答

所属标签

相似技术帖

官网相关资源

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