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 程序偏移一定位置的代码。“UART_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

    文章

    16024

    浏览量

    343722
  • 协处理器
    +关注

    关注

    0

    文章

    70

    浏览量

    17999
  • DTM
    DTM
    +关注

    关注

    0

    文章

    8

    浏览量

    7347
  • UART接口
    +关注

    关注

    0

    文章

    123

    浏览量

    15068
  • BlueNRG
    +关注

    关注

    0

    文章

    15

    浏览量

    9617

原文标题:实战经验 | 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 46次下载

    STM32 应用实战经验篇推荐阅读

    近日,ST官方技术部门又推出了3篇针对STM32应用开发的实战经验篇,分享给各位ST MCU使用者。在此我对这三篇文章内容作个简介,细节可自行去ST官方相关网站下载,文章结尾会介绍。 第一篇是介绍
    发表于 11-29 17:42 388次阅读

    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>