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

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

[复制链接]
STMCU小助手 发布时间:2024-1-18 18:15
01协处理器模式概述$ x& t4 M+ e2 {6 B* E
BlueNRG 系列芯片从最早的一代 BlueNRG-MS 开始就支持协处理器模式。在协处理器模式下,BLE 功能在 BlueNRG 芯片端完成,应用部分在 MCU 端完成。与 AT 指令的模式类似,协处理器方式也具有高内聚、低耦合的特点,但相比于 AT 指令模式,协处理器方式更为强大灵活,而且还兼顾了 MCU 间通信的睡眠和相互唤醒等方面的需求。
; ?4 S: ]4 N2 ~3 p
1 O+ F! J5 D5 G+ EBlueNRG 系列的所有芯片都支持协处理器模式。在使用协处理器时,BlueNRG 需要烧录一个 DTM 固件。DTM 原本是指 Direct Test Mode,而 ST 在这个固件的功能上进行了扩充。除了用于 RF 测试(包括 RF 发射功率、接收灵敏度、频偏、谐波等方面的测试),BlueNRG 的 DTM 固件还可以用于协处理器模式。
6 d- ]- I2 N2 w& y( ?+ v- a; F  V: l& _( u& d4 Y0 Y
BlueNRG GUI 工具是一个针对 BlueNRG 芯片协处理器应用的工具。在使用协处理器时,协处理器可以搭配任何带有串口或 SPI 接口的 MCU、MPU 或 PC 端使用。 8 J3 I- k3 v# D6 s3 ?8 G5 W
: [) i" q: f  M: E" V$ I/ K6 N
如下图所示,官方协处理器资料可以通过 SDK 中文档 index.html 进行索引。
3 X. Z7 Y* y5 G5 o9 k" H, h4 P, W
2 W7 Y& h9 P0 w) R* [% t
微信图片_20240118181351.jpg

/ s9 S% z& F$ D& E9 F. g. F% ~0 \
图1.BlueNRG 端协处理器官方资料
0 O2 U% u# @0 \5 X
* i- l5 m7 @; f" N) ]

: v; A* p5 X+ `9 l9 n
02协处理器软件分层
6 y  E7 j( n$ ?9 S* K0 h8 D) e! {4 TBlueNRG GUI 工具的使用属于一个 BlueNRG 芯片协处理器的应用。 5 P! U: r+ _8 P; s: e, @
* Z- ]( T( F5 a0 C( D9 F$ O& b
协处理器可以搭配任意带UART或者 SPI 的 MCU、MPU 或者 PC 端使用。
$ w) g1 h- c, g5 n+ O9 \. o# T- t# r
软件框架如下图所示。协处理器模式有两种分层。
* }1 x$ R+ g1 n. p; m• [处理器] APP <------------> [BlueNRG] (Host+Controller)
" U2 s/ a( e0 B% V* }% U• [处理器](APP+Host) <------------> [BlueNRG] (Controller)( L# O0 A) L- S2 K: \

# R$ L5 M# t( ?" T: v( V3 f! M
微信图片_20240118181348.jpg

2 Q' I8 m5 B! d' C( F
图2.协处理器软件框架
* x7 _/ G$ c  X$ O
1 A  a1 ^5 c& F* {- j
大部分应用会采用第一种方式,对应用处理器或者 MCU 只需要关注应用部分,这种方式,处理器和 MCU 之间是通过 ACI 指令进行交互,ACI 是 HCI 指令的扩展。
% F" w( Q$ p4 q3 o. O# B0 d, i# K. x4 ?1 t# [: W' G+ C) F
第二种方式,BlueNRG 系列运行 Controller 部分,MCU 或者处理器 Host 层协议和应用,使用的场景比较少,双方之间通过 HCI 经行交互。BlueNRG 系列如果需要使用这种方式的协议栈,则编译 DTM 固件的时候,则需要在 Preprocessor Symbols 中使能“LL_ONLY”宏。  G: a# T. C- B/ u* P0 o# F

1 a8 ?# N% Z1 D7 m03ACI 指令格式5 ~. l. Q- O$ ?/ G5 M4 a4 g4 x
Bluetooth LE 协议栈 ACI 指令利用并扩展了标准 HCI 数据格式。
7 |$ i* ?# M: F& h
; d6 S9 S6 M- G
微信图片_20240118181344.jpg

2 d0 L# h# e6 J$ F/ ^
图3.HCI 指令格式

( Z% X# w: H$ P- t, Y3 P, L( r! |9 S

1 b* y7 s4 g/ _- ^0 a; F3 ~根据 Bluetooth 核心规范,标准 HCI 数据包可以是以下几种类型:
7 S% d, E" Y6 ~% r* m8 Z• HCI 命令数据包(数据包类型:0x01)
' A  h& T. m0 e• HCI ACL 数据包(数据包类型:0x02)) S% a: S0 ]% y. R) d, B" y
• HCI 同步数据包(数据包类型:0x03)
3 `; R; J1 a) s% u/ z3 \0 b7 D- h• HCI 事件数据包(数据包类型:0x04)3 R  [7 u% V* H3 I4 ]
• HCI 扩展命令(数据包类型:0x81)
% L$ _0 M6 w/ [- f1 K8 a0 l• HCI 扩展事件(数据包类型:0x82)" r  N  O7 V: A6 U
! [3 ?. F) L3 @2 W0 i9 P
详细的数据包格式可以通过如下方式详细查看:
5 Q4 o4 @2 y% R7 n
# x" L8 O, B+ A0 x9 w0 N5 a! K打开 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.2 O4 N  C( @  t7 G9 a; e
7 W, C5 f. k! [  E3 S6 P" W' Y
了解 ACI 指令格式有助于在实际调试双通信部分时遇到问题时分析定位问题。
# C( a$ a- {2 Q; k. [9 i9 C4 t8 I# L6 ?1 N+ A" N  Z
详细的其他协处理器资料可以通过 SDK 中 index.html 中的如下章节进行查找。
, `$ w9 W' T% O1 D0 L! D6 T
. z7 o+ {. i2 m! {. p" O0 ?
04DTM 相关的工程介绍
1 k) o5 t. V, h, K" ~3 ?BlueNRG SDK 中提供了很多个不同的 DTM 的工程,用户难以分辨。
' f# u0 {! ^2 N- r9 R5 \' S( z  j, h* f; C
为了简化,绝大部分应用,建议选择功能最齐全的 DTM 工程下,“UART_WITH_UPDATER”工程配置或者“SPI_WITH_UPDATER”工程配置。
- U1 g& w7 d$ h& _+ |7 U" ^

. n6 `& `9 f* \4 j, Y! a8 Z9 Y
微信图片_20240118181341.jpg

2 N" S7 f, {" O/ H% u
图4.BlueNRG DTM 相关的工程
# t9 R0 z4 @; s) x3 p
' k) v6 C  _6 @# f4 ^
其中 SDK 中包含的工程如下 :6 q( o8 Q8 {2 w( y
• DTM: // DTM 是 Full Stack5 _% e8 ]4 }5 m
• DTM_basic: // DTM 配置为 Basic stack& ^3 h; K- ]# C" d
• DTM_Updater: // 带 boot 程序 DTM 的 boot 源码工程' F* _, C3 V1 s0 V0 @

4 z, X# q" u) X其中 DTM 工程和 DTM_basic 工程是实现 DTM 功能的工程,他们之间的差别主要是一个默认是 Full stack,另一个默认为 Basic stack。而 DTM_Updater 只是一个 DTM 的 boot 源码工程。0 a: Z9 N8 k$ d  Z
$ q. R4 p8 L  k3 w9 K0 L5 }$ @
打开 DTM 或者 DTM_basic 工程可以看到如下不同工程配置:
5 k) H* M% {% r- M2 l1 A• UART: DTM 使用 UART 接口(不包含升级代码)
0 f+ n' U8 v) p9 Z• UART_WITH_UPDATERTM 使用 UART 接口,DTM 在 Flash 的第一页中包含 DTM_Updater .并且包含 DTM 功能。
$ C8 U/ k; M% |* ^& J• UART_FOR_UPDATER: DTM 使用 UART 接口,DTM 固件在 Flash 第一页中留空不填充 (偏移 0x2000). 用户制作升级固件,包含 DTM 功能。
" x; G; D% V1 r0 Y0 _0 c( V• SPI: DTM 使用 SPI 接口(不包含升级代码)
7 H: v; X1 \) B• SPI_WITH_UPDATER: DTM 使用 SPI 接口,DTM 在 Flash 的第一页中包含DTM_Updater .并且包含 DTM 功能。
& j; m% R8 ~' i1 q" X0 G• SPI_FOR_UPDATER: DTM 固件在 Flash 第一页中留空不填充 (偏移 0x2000). 用户制作升级固件。包含 DTM 功能。
" k* h4 B  d( _* Q) _# v& k
4 s9 Q& L! C; o, g: c' R5 m其中分两大类通信方式,一类是 UART,一类是 SPI。其中 UART 通信方式的第一个“UART”工程配置是单纯的 DTM,使用 UART 通信接口和其他 MCU 或者 MPU 通信作为协处理器功能的代码。而“UART_WITH_UPDATER”工程配置包含了两个程序,其中一个是将 DTM_Updater 工程编译的二进制代码放置编译在数组中,作为启动代码;另外一个程序就是 DTM 程序偏移一定位置的代码。“UART_FOR_UPDATER”工程配置只有一个程序,即 DTM 程序配置偏移了一定位置的代码,它和“DTM”工程配置的差别仅仅是代码偏移不同,实际内容一样。
- R$ G  h$ Y9 H/ A. I1 u4 x5 Q1 F  x+ z" O1 M
05基于 STM32CubeMX 软件包的协处理器模式: @5 s; b6 q( s- T+ `* Z- O! D. m
基于 STM32CubeMX 软件包支持协处理器的有以下几个:" o2 j7 j; T* L- v) `0 `5 I
) |  T+ s$ d3 x4 I/ i: c
微信图片_20240118181338.jpg
* V9 W2 F$ J- \3 N: Z! B& `
图5.STM32CubeMX 中的软件包
, N1 g' o* e0 B$ H6 t4 O

  P. B6 ]* |$ u8 O; y" v  i* ]1 X

* j1 ?4 V4 d9 I
详细的软件配置涉及步骤比较多/ a  X  W1 |# t" K3 ~6 W" F
& V8 ^9 f' C5 P- B: t! J
或者参考官方的帮助文档,如下图右下边的文档。) q# m9 j4 \# S" P% q* y& A
9 ?$ u! [7 A0 d  }, r0 p- c
微信图片_20240118181335.jpg
' b( \4 v& l$ N, l; b; v4 E# t# D
图6.X-CUBE-BLE2 软件配置
3 x& n( B6 K+ _5 n. B, Z& v- W

. F: A7 z, A0 ?

- }. A% I0 s4 [! w0 Y06基于源码移植的协处理器模式. H- x" F6 T( o  }. J9 |- }
如果使用的另外一端的 MCU 并非是 STM32,或者一些 ST 官方还没有适配的型号(如 BlueNRG-LPS)则需要移植协处理器模式源码到 MCU 上。需要移植如下代码:
8 C& _/ x5 {& l( B0 Y+ P7 _3 J# F* \; e; U: j
微信图片_20240118181332.jpg

; @/ R9 u" r& R; q* P, G: U
图7.非 STM32 使用 BlueNRG 协处理器需要移植的代码
' H$ ?) s' |2 g( ]( o8 U+ P3 ~

2 m/ A9 w9 V( N/ N7 ~6 K移植后上去后,需要适配。适配主要是实现 SPI 或者串口初始化部分的代码以及实现这个函数:+ ~0 |2 A4 z8 ]3 K9 E

$ e2 q" E4 L$ A9 [0 r# V
微信图片_20240118181328.jpg
. D0 A" L' X) _7 e

6 n0 s: R1 K% ]9 {; z- n  r0 Z可以参考 BlueNRG SDK 工程下协处理器相关的例子:: k6 v6 L8 ^0 T4 M
BlueNRG-LP/LPS: BlueNRG-LP_LPS_LPF DK x.x.x\Projects\External_Micro# J& U0 s3 B+ B/ a
BlueNRG-1/2: BlueNRG-1_2 DK x.x.x\Project\STM32L
' ^) n1 f9 o% v* F
+ b/ k! y) B6 ~07应用处理器(MCU)端软件处理主框架
  e$ y& Z! C: @主要处理流程分为两大类:
* V  r. _/ _9 q3 A  s% x• MCU 或者处理器主动发送数据! Y) F# I4 T+ J  ~
• BlueNRG 主动发送数据 ! ~# v  T2 `, O6 W% M
: s: h) g5 d9 r, \
MCU 或者处理器主动发送数据的流程是这样的:当应用端主动调用 aci_xxxx 等函数时,这些函数的处理是同步超时的。最后会调用"hci_send_req()"函数,在这个函数中,会先发送数据到 BlueNRG 端,然后在 while(1)循环中带超时的等待,以查看hciReadPktRxQueue 队列中是否有数据收到。当 BlueNRG 返回数据给应用处理器端(MCU)时,会通过 IO 中断,最后触发调用“hci_tl_lowlevel_isr()”函数。在这个函数中执行读取数据的操作。如果成功读取数据,将数据压入 hciReadPktRxQueue 队列中。整个执行 aci_xxxx 等函数的过程是同步执行的,直到超时还没有读取到数据放入队列中。 + ?9 S! O9 M7 Z5 P

) g* `2 T7 V& s" q5 [1 JBlueNRG 主动发送数据的流程如下:当 BlueNRG 发生一些事件,例如蓝牙连接上了设备,这时 BlueNRG 会拉相应的 IO 口,通过应用处理器的外部中断通知应用处理器端(MCU)。这会触发调用“hci_tl_lowlevel_isr()”函数,在这个函数中执行读取数据的操作。如果成功读取数据,将数据压入 hciReadPktRxQueue 队列中。然后在主循环处理函数“hci_user_evt_proc()”中,会解析接收队列中的函数。最后,如果成功解析,则会触发对应的 xxx_event 事件。这里的 xxx_event 事件如果应用没有定义,则默认执行一个弱定义的空函数。如果应用程序定义了,则执行用户定义的函数。
  R$ c7 U. U5 F8 O1 d% t
- r4 b4 ^0 _. ]/ M& X2 _08交互时序图1 e  z$ A, Y$ n' a8 c( ]* V
下文分别描述通过串口和 SPI 交互时的时序图。了解双方通信的时序,有助于理解双发睡眠和唤醒,以及在定位问题时能够更快速准确定位分析问题。
$ e2 Y$ H7 n+ I' K8 ?! z2 i
6 [- {. Y5 a* `% k; l7 ~2 \2 p8.1. UART接口交互时序图- c. Q5 A. h2 I8 ]" f
使用UART接口进行交互时,时序图如下所示:
/ P& X* o+ D4 `+ X# C& `; J# X  ~( G& l' ~, d$ Y5 v- R
微信图片_20240118181325.jpg

) q- V; ^6 L, }0 a+ T8 ^
图8.串口方式交互时序图

1 o' z0 x5 \8 R- l. j
- E! S* t7 F1 C8 Y( |* M& o3 j
上图时 MCU 主动发送 ACI 指令流程,分为以下几个步骤:. m! s; a' [. g9 q
• MCU 发送数据
& d7 w* v7 U" r, [    o 1:MCU 唤醒 BlueNRG 芯片
$ \) O8 t8 U7 E" O0 f( W, v    o 2:BlueNRG 芯片被唤醒完成. {3 @$ b' z; X- c% [1 ^
    o 3:MCU 通过串口发送数据  U  J) O0 l- a5 D; s
           ▪ 如果流控允许- C: `# c, m3 I& T; W
    o 4:MCU 发送完毕数据释放 MCU_RTS5 B4 a1 `- f, B) m8 O6 V
    o 5:BlueNRG 芯片允许进入睡眠. G6 `$ i% x2 I2 v- B/ ?
•BlueNRG 发送数据
' B4 ]9 `3 h3 {5 S" _0 ?# Q    o A: BlueNRG 唤醒 MCU
) B! I) d/ p2 D* x    o B: MCU 被唤醒
1 R. d; l& W0 x3 y  P$ A# M    o C: BlueNRG 通过串口发送数据" b/ g" ?- M% m
        ▪ 如果串口流控允许
  f0 h2 g& i. h    o D: BlueNRG 发送完数据释放 MCU_CTS$ {% R+ F0 F4 g- A% b' i
    o E: MCU 允许进入睡眠, ]- L4 k( l$ B! H) f$ p8 u0 X1 G
& N0 O7 b: W) D
8.2. SPI 接口操作时序图

4 D0 {, N( Q* D  o+ Q. `  J( h5 ESPI 时序图官方文档中描述比较详细,建议查看官方的文档(在 SDK 的帮助文档index.html 中)。, u! Z2 d, d9 x5 |8 ~  ~  v
, c9 q9 }% M, ]
微信图片_20240118181321.jpg
! _5 K! O8 m0 P2 H7 B8 F  B
图9.协处理器 SPI 通信协议

7 `7 I5 W5 [% k% Y, `, W

+ n- y) R5 x% m& D3 ?
! \9 K, N1 B% v* p# y/ M- A
09小结0 G; j8 S: R/ R. L8 K/ ~
本文介绍了 BlueNRG 系列芯片的协处理器模式、软件分层、ACI 指令格式以及 DTM相关的工程。BlueNRG 芯片的协处理器模式与 AT 指令模式类似,但更为强大灵活,同时兼顾了 MCU 间通信的睡眠和相互唤醒等方面的需求。BlueNRG 系列的所有芯片都支持协处理器模式,且可搭配任何带有串口或 SPI 接口的 MCU、MPU 或 PC 端使用。在软件框架方面,协处理器模式有两种分层,大部分应用采用第一种方式,对应用处理器或 MCU只需要关注应用部分,处理器和 MCU 之间通过 ACI 指令进行交互。了解 ACI 指令格式有助于在实际调试双通信部分时遇到问题时分析定位问题。在 DTM 相关的工程介绍方面,建议选择功能最齐全的 DTM 工程下,“UART_WITH_UPDATER”工程配置或者“SPI_WITH_UPDATER”工程配置。% J. m" p& H, r# w
' N# i: ^6 p: F% u3 X
转载自: STM32单片机: u/ S7 M* |# D- f. j
如有侵权请联系删除
& T$ g3 @8 H) B& Q# ^; f9 r) l: Y/ [& n1 R6 V; X
& u7 z0 U2 K" L+ a) W* C4 z8 ~

/ H3 j9 n& a/ b2 @$ T2 W
收藏 评论0 发布时间:2024-1-18 18:15

举报

0个回答

所属标签

相似技术帖

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版