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

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

[复制链接]
STMCU小助手 发布时间:2024-1-18 18:15
01协处理器模式概述4 _. B; f& E! D9 b7 b' B
BlueNRG 系列芯片从最早的一代 BlueNRG-MS 开始就支持协处理器模式。在协处理器模式下,BLE 功能在 BlueNRG 芯片端完成,应用部分在 MCU 端完成。与 AT 指令的模式类似,协处理器方式也具有高内聚、低耦合的特点,但相比于 AT 指令模式,协处理器方式更为强大灵活,而且还兼顾了 MCU 间通信的睡眠和相互唤醒等方面的需求。 / a& K1 p- ?" [& U, J

+ g" L" F5 m- B. Q+ {( D1 l1 ?) _BlueNRG 系列的所有芯片都支持协处理器模式。在使用协处理器时,BlueNRG 需要烧录一个 DTM 固件。DTM 原本是指 Direct Test Mode,而 ST 在这个固件的功能上进行了扩充。除了用于 RF 测试(包括 RF 发射功率、接收灵敏度、频偏、谐波等方面的测试),BlueNRG 的 DTM 固件还可以用于协处理器模式。
( d' I4 y9 o# `/ G# p5 V
$ w, L* V, W4 n% _% @. F" lBlueNRG GUI 工具是一个针对 BlueNRG 芯片协处理器应用的工具。在使用协处理器时,协处理器可以搭配任何带有串口或 SPI 接口的 MCU、MPU 或 PC 端使用。 0 X  V9 V/ c" Z  A" O- r+ m; I

$ `. T) {8 F* ?, a3 J+ {如下图所示,官方协处理器资料可以通过 SDK 中文档 index.html 进行索引。9 F2 H' O4 V/ D

0 ]8 F& {2 G& A0 Z) ]  o* W: c2 `
微信图片_20240118181351.jpg

( _# I+ a8 P3 Q" R
图1.BlueNRG 端协处理器官方资料
: w) G4 u% M$ ^/ \9 e/ C

' s; F" o' Q/ q0 U. I2 r5 K
/ R0 x: [/ |7 u
02协处理器软件分层
( d4 }; e. N1 l( H$ ~" }4 G1 \BlueNRG GUI 工具的使用属于一个 BlueNRG 芯片协处理器的应用。
9 Q: Q0 `' Y5 a
1 F' P: g4 m: L$ v, i- f/ H, G协处理器可以搭配任意带UART或者 SPI 的 MCU、MPU 或者 PC 端使用。 + G1 V+ I4 b0 l  J" m. w/ C

8 M8 E5 p. `- c( H. o; x* L软件框架如下图所示。协处理器模式有两种分层。
2 O& v" I3 r. H* K• [处理器] APP <------------> [BlueNRG] (Host+Controller)) j5 H9 q* d% l0 T
• [处理器](APP+Host) <------------> [BlueNRG] (Controller)
" `8 G$ }' L5 G) b7 g% B* y' e; B  U3 \8 r, X  [) @, G. n
微信图片_20240118181348.jpg

. K* v7 v* o3 [; B) B# _# @9 G
图2.协处理器软件框架

8 Z% B7 M6 z, h3 y5 |

) w% A6 X: h1 k4 X* Z# R: m大部分应用会采用第一种方式,对应用处理器或者 MCU 只需要关注应用部分,这种方式,处理器和 MCU 之间是通过 ACI 指令进行交互,ACI 是 HCI 指令的扩展。 & T+ W  a# l% }: @$ G# V  x
3 j5 P* d5 c, T& i0 y  C3 I
第二种方式,BlueNRG 系列运行 Controller 部分,MCU 或者处理器 Host 层协议和应用,使用的场景比较少,双方之间通过 HCI 经行交互。BlueNRG 系列如果需要使用这种方式的协议栈,则编译 DTM 固件的时候,则需要在 Preprocessor Symbols 中使能“LL_ONLY”宏。" [* e6 E# {9 C: a

1 \6 I' f/ D$ p; R1 y4 {6 M9 m03ACI 指令格式$ w* x- _' |" [) ^6 V, Q! f
Bluetooth LE 协议栈 ACI 指令利用并扩展了标准 HCI 数据格式。2 L% a6 Z! y# J

: Q5 C2 c: T# q6 o6 n) ~% |
微信图片_20240118181344.jpg

, y# _! {3 O( L9 p8 `# H
图3.HCI 指令格式
/ F0 [5 ?7 v4 J. n
0 O9 d5 q* J2 ]* i' e+ z
根据 Bluetooth 核心规范,标准 HCI 数据包可以是以下几种类型:
2 Z3 s; \# a% L" n* m; q5 r; Q• HCI 命令数据包(数据包类型:0x01)3 [- y3 d2 ~3 S+ r, U: `
• HCI ACL 数据包(数据包类型:0x02)
( ?  r8 q6 ]3 o$ `3 D. P1 V4 `( w# k• HCI 同步数据包(数据包类型:0x03)
  @5 u% U( h! l9 K8 ?' @2 a• HCI 事件数据包(数据包类型:0x04)
  |) L/ n% ]5 `. z& G• HCI 扩展命令(数据包类型:0x81)7 q2 i" ]5 v  b. {4 Q" F
• HCI 扩展事件(数据包类型:0x82)
1 Q- J6 o0 u2 F* r- ~
# D- X" r: W+ E7 c7 _详细的数据包格式可以通过如下方式详细查看: 0 I' Q" q  o: {5 a: J# s* e

; Y. ]3 Q7 s  W: [+ 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.; e. s- \* [' f- ]& @( N$ T

" X* C9 d3 c9 G& _- m了解 ACI 指令格式有助于在实际调试双通信部分时遇到问题时分析定位问题。 % s" L0 `3 |  ?* |- B1 F
2 W  I; U. z% W
详细的其他协处理器资料可以通过 SDK 中 index.html 中的如下章节进行查找。/ I; t0 o8 I7 l  W0 Z( H) w+ _! J
- j8 c* n" h! A
04DTM 相关的工程介绍
# L$ @; W3 o" ~" I% q- P# h0 qBlueNRG SDK 中提供了很多个不同的 DTM 的工程,用户难以分辨。 ; G6 b& ?, t+ _$ m4 W4 ?$ W( G
( u  B3 t8 ?% y. {) Q0 j, H: }' q6 k/ L
为了简化,绝大部分应用,建议选择功能最齐全的 DTM 工程下,“UART_WITH_UPDATER”工程配置或者“SPI_WITH_UPDATER”工程配置。
$ r  ?" k; d2 j2 }& u5 B
2 C0 r! @) n  a1 d- n
微信图片_20240118181341.jpg

" L. @8 G6 @* T; Y
图4.BlueNRG DTM 相关的工程

1 b+ e, ]8 k. t7 F  d$ B
0 d! U3 M& [" D1 L4 c2 K4 n
其中 SDK 中包含的工程如下 :/ y% m' t$ M1 [
• DTM: // DTM 是 Full Stack7 ^, w5 o$ M3 F7 S
• DTM_basic: // DTM 配置为 Basic stack' R8 U) A+ d. M2 a9 |/ u* V% r- r3 u
• DTM_Updater: // 带 boot 程序 DTM 的 boot 源码工程
  Q+ z  T' J4 p, z( P
% ^5 m4 b6 ^: a5 T其中 DTM 工程和 DTM_basic 工程是实现 DTM 功能的工程,他们之间的差别主要是一个默认是 Full stack,另一个默认为 Basic stack。而 DTM_Updater 只是一个 DTM 的 boot 源码工程。$ F4 R3 x: J6 U2 J
& H3 N0 K+ l' j( P5 R
打开 DTM 或者 DTM_basic 工程可以看到如下不同工程配置:
2 M. G0 X7 V  ?" e# J• UART: DTM 使用 UART 接口(不包含升级代码)8 k7 h! ~: w! _  u8 S; I0 t; ]
• UART_WITH_UPDATERTM 使用 UART 接口,DTM 在 Flash 的第一页中包含 DTM_Updater .并且包含 DTM 功能。
' E, v; H0 ]6 s' x4 y4 b% M• UART_FOR_UPDATER: DTM 使用 UART 接口,DTM 固件在 Flash 第一页中留空不填充 (偏移 0x2000). 用户制作升级固件,包含 DTM 功能。7 M* P( A/ Y9 S5 |8 S
• SPI: DTM 使用 SPI 接口(不包含升级代码), f! m4 E+ S6 Z1 v0 y; J
• SPI_WITH_UPDATER: DTM 使用 SPI 接口,DTM 在 Flash 的第一页中包含DTM_Updater .并且包含 DTM 功能。3 n" h4 R* o3 K% P) E
• SPI_FOR_UPDATER: DTM 固件在 Flash 第一页中留空不填充 (偏移 0x2000). 用户制作升级固件。包含 DTM 功能。0 F& E/ z7 ^# X5 t3 E9 Y6 |+ ]6 V; Y

& B9 _- A$ F) E其中分两大类通信方式,一类是 UART,一类是 SPI。其中 UART 通信方式的第一个“UART”工程配置是单纯的 DTM,使用 UART 通信接口和其他 MCU 或者 MPU 通信作为协处理器功能的代码。而“UART_WITH_UPDATER”工程配置包含了两个程序,其中一个是将 DTM_Updater 工程编译的二进制代码放置编译在数组中,作为启动代码;另外一个程序就是 DTM 程序偏移一定位置的代码。“UART_FOR_UPDATER”工程配置只有一个程序,即 DTM 程序配置偏移了一定位置的代码,它和“DTM”工程配置的差别仅仅是代码偏移不同,实际内容一样。0 V/ b4 l& X' p' _: C$ Y1 D3 P# c
0 V; {" {+ {' }" A% A$ W' U
05基于 STM32CubeMX 软件包的协处理器模式
; _* u4 [' n' F基于 STM32CubeMX 软件包支持协处理器的有以下几个:
$ g( f4 _0 G. W) W, h4 b1 u2 N1 X3 @4 w& P3 y( m6 K2 P* X  Q
微信图片_20240118181338.jpg

9 x  ?# m# i' J& e, Z
图5.STM32CubeMX 中的软件包
  E* a, t- ?; L' e6 W
7 o$ ?, w! S  R% B( m& q8 ?
# e" i' f5 w- ~* H: ?: ~5 ?$ p
详细的软件配置涉及步骤比较多
! B1 O- |$ B* C" B, b7 l
3 h: s% T! r* o$ u! J' k或者参考官方的帮助文档,如下图右下边的文档。8 K) S  i3 C" {# X

6 |% [; Z5 a$ c1 {# w1 @
微信图片_20240118181335.jpg

7 }) T0 m1 P0 H: ?
图6.X-CUBE-BLE2 软件配置
6 M# @* {9 V$ F- |
8 F% @9 H* S8 u8 L6 _
/ p1 p! M. ^& R$ O8 \  \
06基于源码移植的协处理器模式3 f5 X) w3 c% i5 ?& K. V5 c% P
如果使用的另外一端的 MCU 并非是 STM32,或者一些 ST 官方还没有适配的型号(如 BlueNRG-LPS)则需要移植协处理器模式源码到 MCU 上。需要移植如下代码:
4 Q, P2 H) O4 @0 u9 s) j  o7 P" {& [% i+ ?
微信图片_20240118181332.jpg
4 v! q1 M/ P- }  [/ g$ n' {
图7.非 STM32 使用 BlueNRG 协处理器需要移植的代码
; M1 a  b  t6 ^/ _
2 e; I! _' D( P5 }4 s
移植后上去后,需要适配。适配主要是实现 SPI 或者串口初始化部分的代码以及实现这个函数:4 O, P: t- ^% y5 ~

9 W1 ^& _( J/ w7 a) n  Q# c
微信图片_20240118181328.jpg ! h' ^7 r& g7 }* m' D7 z

% _2 q" O( q; }  N' R# q可以参考 BlueNRG SDK 工程下协处理器相关的例子:
+ B; u$ H( ?) l7 b3 WBlueNRG-LP/LPS: BlueNRG-LP_LPS_LPF DK x.x.x\Projects\External_Micro+ v% O& h' t% `! z) f% M4 M
BlueNRG-1/2: BlueNRG-1_2 DK x.x.x\Project\STM32L
7 u3 n( G& C+ x! q
, q/ H# m1 q1 y- B07应用处理器(MCU)端软件处理主框架) P, f- F! j5 j; n9 |
主要处理流程分为两大类:  V0 {- {  M; j8 R0 i
• MCU 或者处理器主动发送数据
9 W/ N! G) t9 U/ \$ \$ x7 ]' W• BlueNRG 主动发送数据 * I0 v5 N4 f4 }) h4 p( x

; z: D$ {: S% h4 T, sMCU 或者处理器主动发送数据的流程是这样的:当应用端主动调用 aci_xxxx 等函数时,这些函数的处理是同步超时的。最后会调用"hci_send_req()"函数,在这个函数中,会先发送数据到 BlueNRG 端,然后在 while(1)循环中带超时的等待,以查看hciReadPktRxQueue 队列中是否有数据收到。当 BlueNRG 返回数据给应用处理器端(MCU)时,会通过 IO 中断,最后触发调用“hci_tl_lowlevel_isr()”函数。在这个函数中执行读取数据的操作。如果成功读取数据,将数据压入 hciReadPktRxQueue 队列中。整个执行 aci_xxxx 等函数的过程是同步执行的,直到超时还没有读取到数据放入队列中。 6 O% M2 O: s5 v6 |

2 a! ~8 a) b# P9 r0 @* dBlueNRG 主动发送数据的流程如下:当 BlueNRG 发生一些事件,例如蓝牙连接上了设备,这时 BlueNRG 会拉相应的 IO 口,通过应用处理器的外部中断通知应用处理器端(MCU)。这会触发调用“hci_tl_lowlevel_isr()”函数,在这个函数中执行读取数据的操作。如果成功读取数据,将数据压入 hciReadPktRxQueue 队列中。然后在主循环处理函数“hci_user_evt_proc()”中,会解析接收队列中的函数。最后,如果成功解析,则会触发对应的 xxx_event 事件。这里的 xxx_event 事件如果应用没有定义,则默认执行一个弱定义的空函数。如果应用程序定义了,则执行用户定义的函数。
) ?1 V" B0 G" p: ]7 S
' }8 G- G' f0 u' `8 A% q, x08交互时序图; M- E0 U. U! Y. v. p
下文分别描述通过串口和 SPI 交互时的时序图。了解双方通信的时序,有助于理解双发睡眠和唤醒,以及在定位问题时能够更快速准确定位分析问题。
0 {+ \# F! E& z
- Q1 m' `: g- }8 B( V7 B8 F% ]8.1. UART接口交互时序图0 H7 a: A" W9 b' Q7 ^" A
使用UART接口进行交互时,时序图如下所示:' A' R! v  E! o* h; C' N& }

8 ?* u. X, j" S
微信图片_20240118181325.jpg
  t  M9 j2 f& `9 ]0 M6 E0 l# V
图8.串口方式交互时序图
# O1 o  P3 e" C, @+ {& X" `
$ L% t( @. Y; I; f: I0 u2 p
上图时 MCU 主动发送 ACI 指令流程,分为以下几个步骤:3 r8 j: `6 [0 n5 \% u  @
• MCU 发送数据
& k+ c) J, d6 d! D8 n; P    o 1:MCU 唤醒 BlueNRG 芯片
9 Z: }! t+ q) p+ L6 B& y% j6 s7 Q- M    o 2:BlueNRG 芯片被唤醒完成1 G# s. Z1 D+ S+ Z8 K
    o 3:MCU 通过串口发送数据
6 d9 F) Q( W" A) `8 Y/ p9 e/ s           ▪ 如果流控允许1 r5 j' y% _0 t; E
    o 4:MCU 发送完毕数据释放 MCU_RTS0 B, Q: W  h# U
    o 5:BlueNRG 芯片允许进入睡眠
5 I& R  N2 M; N: p; E4 a•BlueNRG 发送数据% W  n$ t# {, z1 G
    o A: BlueNRG 唤醒 MCU
$ ~: ?: G+ H' }. {) x6 w    o B: MCU 被唤醒
- h+ I5 @6 v# J: V# B    o C: BlueNRG 通过串口发送数据
: ~& N; Y" J) Q2 i! _) R& E        ▪ 如果串口流控允许1 L+ {5 P2 j* Z$ Z1 j
    o D: BlueNRG 发送完数据释放 MCU_CTS9 P3 a1 X- q5 a/ |8 B  `- |; i- [
    o E: MCU 允许进入睡眠
# ?, Z, c! [1 g6 ^: O& ^8 x' \8 K/ V/ L% ^% z# F
8.2. SPI 接口操作时序图

4 B- q# A' n' p) v- Z+ o& @SPI 时序图官方文档中描述比较详细,建议查看官方的文档(在 SDK 的帮助文档index.html 中)。
( I9 A1 t! n$ D6 ^) H/ e+ p& Y  L" h; Z+ s7 d
微信图片_20240118181321.jpg

4 N" p' W. U! _. z7 f5 o# z" V
图9.协处理器 SPI 通信协议
9 x& q5 a" Q8 w# Z, r3 I  s! v
$ x" f, R& U8 ~* C0 J- L1 Q3 w. A% {

, N1 x0 b* I3 ^- m7 y" o  J3 z09小结1 v/ p9 L0 j# U  m8 L) _
本文介绍了 BlueNRG 系列芯片的协处理器模式、软件分层、ACI 指令格式以及 DTM相关的工程。BlueNRG 芯片的协处理器模式与 AT 指令模式类似,但更为强大灵活,同时兼顾了 MCU 间通信的睡眠和相互唤醒等方面的需求。BlueNRG 系列的所有芯片都支持协处理器模式,且可搭配任何带有串口或 SPI 接口的 MCU、MPU 或 PC 端使用。在软件框架方面,协处理器模式有两种分层,大部分应用采用第一种方式,对应用处理器或 MCU只需要关注应用部分,处理器和 MCU 之间通过 ACI 指令进行交互。了解 ACI 指令格式有助于在实际调试双通信部分时遇到问题时分析定位问题。在 DTM 相关的工程介绍方面,建议选择功能最齐全的 DTM 工程下,“UART_WITH_UPDATER”工程配置或者“SPI_WITH_UPDATER”工程配置。3 A: |" Z9 \9 d1 H4 d5 s$ J
' }. [5 `& ~5 p1 ^1 r8 J
转载自: STM32单片机
. R4 k. ^7 ]4 ^如有侵权请联系删除- o7 s# n# H0 J2 ~

3 U6 h3 f9 }) n+ r; z$ R1 L3 A
4 d. X/ B4 L! X/ x+ w

; P" i3 s: P2 L! b$ Y/ T, y
收藏 评论0 发布时间:2024-1-18 18:15

举报

0个回答

所属标签

相似分享

官网相关资源

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