0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

RTT_Zephyr_Polling BlueNRG2 SPI使用说明

冬至子 来源:paradox 作者:paradox 2023-09-21 14:54 次阅读

RT-Thread平台下,利用 BlueNRG2蓝牙芯片运行 RTT_Zephyr_Polling 协议栈。使用 SPI 作为 HCI 传输方式。

这里开发和测试使用的都是 NUCLEO-L476RG硬件平台,其他MCU硬件理论上只需按实际情况在 RTT 中修改引脚等设置。

硬件连接:NUCLEO-L476RG
使用 NUCLEO-L476RG 开发板配套的扩展板连接 BlueNRG2,使用 SPI 作为 HCI 传输方式,运行 RTT_Zephyr_Polling 蓝牙协议栈。

如下图连接好硬件即可:

1.jpg

搭建 RT-Thread Studio 环境
参考快速开始 完成 RT-Thread studio 环境的搭建。

创建项目工程
创建STM32L476 ST-NUCLEO 示例工程

3.jpg

打开 SPI1 BUS(默认使用SPI的bus1,可在Kconfig中修改),保存

1.jpg

这里RTT代码因为版本问题(v5.0.1 202309),编译会报错。RT_WEAK 字段在新版已经被 rt_weak 替换。这里替换一下就可以正常编译。

1.jpg

SPI引脚修改
当前在RTT的BSP中 NUCLEO-L476RG 的默认的SPI1_SCK为PA5。而在实际的硬件连接中时,SPI1 连接的SCK引脚为PB3。将其修改为PB3,保存,generatecode。这里可能需要将CubeMX多余的生成文件手动删除。

打开项目工程中的 cubemx_config.ioc,修改SPI1的引脚:

1.jpg

zephyr_polling 软件包配置
在 RTT Studio 的软件包中心添加zephyr_polling软件包,配置项如下:

1.jpg

配置说明:
蓝牙芯片选择: bluenrg2
运行平台选择: 使用 SPI 作为 HCI通信接口
HCI 传输设置:选择使用 rt-thread SPI。这里使用的硬件平台是 STM32L476 ST-NUCLEO,且使用配套扩展板连接,使用默认配置即可。
如果换用其他硬件环境,但仍然使用 bluenrg2 蓝牙芯片,需要根据实际情况修改:SPIBUS(SPI总线)、SPI INDEX(SPI设备号)等。其中特别要注意,bluenrg2 的 SPI通信除了MISO、MOSI、SCK三个基本信号线外,还需要一个由 MCU 控制的 CS_PIN 和一个由 bluenrg2 控制的 IRQ_PIN。这两个引脚需要根据实际情况在这里设置。

这里先使用Beacon信标例程进行测试。保存设置,等待文件更新。

刷新 setting,可以看到项目资源目录成功添加。

1.jpg

编译项目代码,下载

Beacon例程运行
上一步中已经配置使用 Beacon 例程。

协议栈启动入口已导出为 cmd,输入zephyr开启一个线程运行Beacn例程。

staticint zephyr(void) {
static rt_thread_t tid = RT_NULL;
rt_kprintf("zephyr_polling_init rn");
tid = rt_thread_create("zephyr_polling_main",
zephyr_polling_main, RT_NULL,
4096,
5, 5);
if (tid != RT_NULL)
{
rt_thread_startup(tid);
}
return 0;
}
// INIT_APP_EXPORT(zephyr_polling_init);
MSH_CMD_EXPORT(zephyr, "zephyr_polling start");
运行时串口打印如下:

initialize rti_board_start:0 done
initialize drv_pm_hw_init:0 done
initialize rt_hw_spi_init:0 done
| /

RT - Thread Operating System
/ | 5.0.1 build Sep 20 2023 21:08:57
2006 - 2022 Copyright by RT-Thread team
do components initialization.
initialize rti_board_end:0 done
initialize stm32l4_hw_lptim_init:0 done
initialize finsh_system_init:0 done
msh >zephyr
zephyr_polling_init
bt_init_hci_driver
SPI_init_process device_name: spi10, spi_name: spi1, rate: 1000000, databits: 8, LSB_MSB: 1, Master_Slave: 0, CPOL: 0, CPHA: 1
SPI_init_process cs_pin_num: 1, irq_pin_num: 0
hci_driver_open, SPI_config_finish
I: (bt_hci_core)hci_init():3230: work start.
msh >prepare_event_process, step: 1
prepare_event_process, step: 2
prepare_event_process, step: 3
prepare_event_process, step: 4
prepare_event_process, step: 5
I: (bt_hci_core)hci_init_end():3205: work end.
I: (bt_hci_core)bt_dev_show_info():3008: Identity: 02:80:e1:00:00:f5 (public)
I: (bt_hci_core)bt_dev_show_info():3042: HCI: version 5.2 (0x0b) revision 0x1222, manufacturer 0x0030
I: (bt_hci_core)bt_dev_show_info():3044: LMP: version 5.2 (0x0b)subver 0x0015
Bluetooth initialized
Beacon started, advertising as 02:80:e1:00:00:f5 (public)
其中

SPI_init_process device_name: spi10, spi_name: spi1, rate: >1000000, databits: 8, LSB_MSB: 1, Master_Slave: 0, CPOL: 0, CPHA: 1
SPI_init_process cs_pin_num: 1, irq_pin_num: 0
hci_driver_open, SPI_config_finish
是 HCI 使用的 SPI 配置参数

prepare_event_process, step: 1
prepare_event_process, step: 2
prepare_event_process, step: 3
prepare_event_process, step: 4
prepare_event_process, step: 5
是芯片厂商设计的 bluenrg2 芯片启动流程(bluenrg2 不需要boot流程,但是有一系列的prepare流程)

手机端使用 nRFConnect 搜索蓝牙信号,即可成功观察到蓝牙设备地址为0280e10000:f5的beacon设备。

1.jpg

心率例程运行
软件包配置
软件包配置如下,选择 peripheralhr(外围设备心率):

1.jpg

运行
心率例程主要提供了两个 GATT 服务:电池电量、心率数据。其中电池电量服务返回的是伪电量值,数值从 100% 随时间递减到 0% 循环;心率服务返回的是随机心率数据(单位bpm)。

输入zephyr运行Example

使用nRF Connect软件连接蓝牙:

1.jpg

获取心率服务和电池电量服务:

1.jpg

2.jpg

此时串口输出:

initialize rti_board_start:0 done
initialize drv_pm_hw_init:0 done
initialize rt_hw_spi_init:0 done
| /

RT - Thread Operating System
/ | 5.0.1 build Sep 20 2023 22:16:27
2006 - 2022 Copyright by RT-Thread team
do components initialization.
initialize rti_board_end:0 done
initialize stm32l4_hw_lptim_init:0 done
initialize finsh_system_init:0 done
msh >zephyr
zephyr_polling_init
bt_init_hci_driver
SPI_init_process device_name: spi10, spi_name: spi1, rate: 1000000, databits: 8, LSB_MSB: 1, Master_Slave: 0, CPOL: 0, CPHA: 1
SPI_init_process cs_pin_num: 1, irq_pin_num: 0
hci_driver_open, SPI_config_finish
I: (bt_hci_core)hci_init():3230: work start.
msh >prepare_event_process, step: 1
prepare_event_process, step: 2
prepare_event_process, step: 3
prepare_event_process, step: 4
prepare_event_process, step: 5
I: (bt_hci_core)hci_init_end():3205: work end.
E: (bt_smp)smp_self_test():5695: smp_self_test start
I: (bt_hci_core)bt_dev_show_info():3008: Identity: 02:80:e1:00:00:f5 (public)
I: (bt_hci_core)bt_dev_show_info():3042: HCI: version 5.2 (0x0b) revision 0x1222, manufacturer 0x0030
I: (bt_hci_core)bt_dev_show_info():3044: LMP: version 5.2 (0x0b) subver 0x0015
Bluetooth initialized
Advertising successfully started
Connected
BAS Notifications enabled
HRSnotifications enabled

数据吞吐例程运行与测试
软件包配置

1.jpg

运行
数据吞吐例程内部逻辑是将接收到的数据转发回中心设备。主要提供了两个 GATT 服务:write 和 notify。前者用于接收中心设备发来的数据,后者用于向连接的中心设备发送数据。

输入zephyr运行Example。

手机端使用 BLE调试宝(类似的BLE APP应该都行)连接设备,开启notify服务:

1.jpg

连续发送数据:

1.jpg

收发数据没有丢包。

串口打印如下:

initialize rti_board_start:0 done
initialize drv_pm_hw_init:0 done
initialize rt_hw_spi_init:0 done
| /

RT - Thread Operating System
/ | 5.0.1 build Sep 20 2023 22:39:47
2006 - 2022 Copyright by RT-Thread team
do components initialization.
initialize rti_board_end:0 done
initialize stm32l4_hw_lptim_init:0 done
initialize finsh_system_init:0 done
msh >zephyr
zephyr_polling_init
bt_init_hci_driver
SPI_init_process device_name: spi10, spi_name: spi1, rate: 1000000, databits: 8, LSB_MSB: 1, Master_Slave: 0, CPOL: 0, CPHA: 1
SPI_init_process cs_pin_num: 1, irq_pin_num: 0
hci_driver_open, SPI_config_finish
I: (bt_hci_core)hci_init():3230: work start.
msh >prepare_event_process, step: 1
prepare_event_process, step: 2
prepare_event_process, step: 3
prepare_event_process, step: 4
prepare_event_process, step: 5
I: (bt_hci_core)hci_init_end():3205: work end.
E: (bt_smp)smp_self_test():5695: smp_self_test start
I: (bt_hci_core)bt_dev_show_info():3008: Identity: 02:80:e1:00:00:f5 (public)
I: (bt_hci_core)bt_dev_show_info():3042: HCI: version 5.2 (0x0b) revision 0x1222, manufacturer 0x0030
I: (bt_hci_core)bt_dev_show_info():3044: LMP: version 5.2 (0x0b) subver 0x0015
Bluetooth initialized
throughput_svc_init()
Advertising successfully started
I: (bt_hci_core)bt_sleep_prepare_work():4040: start
I: (bt_hci_core)bt_sleep_prepare_work():4046: end
I: (bt_hci_core)bt_sleep_wakeup_work_start():4058: start
I: (bt_hci_core)bt_sleep_wakeup_work_start():4061: end
I: (bt_hci_core)bt_sleep_wakeup_work_end():4072: start
I: (bt_hci_core)bt_sleep_wakeup_work_end():4074: end
Connected

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表德赢Vwin官网 网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 蓝牙芯片
    +关注

    关注

    17

    文章

    365

    浏览量

    45766
  • SPI接口
    +关注

    关注

    0

    文章

    258

    浏览量

    34182
  • RT-Thread
    +关注

    关注

    31

    文章

    1228

    浏览量

    39274
  • MCU控制器
    +关注

    关注

    0

    文章

    27

    浏览量

    6855
  • STM32L476
    +关注

    关注

    0

    文章

    7

    浏览量

    3751
收藏 人收藏

    评论

    相关推荐

    RTT平台zephyr_polling软件包SPIBluenrg2芯片宕机问题与修复

    项目的代码测试完成之后,准备收尾时,出现了问题。清除掉开发过程中用来调试的print打印之后, zephyr_polling的 HCI 突然不能正常工作了,之前测试可用的 zephyr_polling中的各个例程都不再能运行。
    的头像 发表于09-25 17:08 970次阅读
    <b class='flag-5'>RTT</b>平台<b class='flag-5'>zephyr_polling</b>软件包<b class='flag-5'>SPI</b> <b class='flag-5'>Bluenrg2</b>芯片宕机问题与修复

    RTTzephyr_polling软件包Bluenrg2蓝牙芯片启动流程

    在用标准的 HCI 指令控制设备进行蓝牙操作之前,需要提前通过 VS Command 对设备进行配置,只有正确配置好的设备才能正常使用。
    的头像 发表于09-27 11:19 1032次阅读
    <b class='flag-5'>RTT</b> <b class='flag-5'>zephyr_polling</b>软件包 <b class='flag-5'>Bluenrg2</b>蓝牙芯片启动流程

    如何用Ubuntu qemu跑zephyr_polling的蓝牙?

    进入 RT-Thread online packages → IoT - internet of things 目录即可看到 zephyr_polling软件包,勾选软件包。
    的头像 发表于09-28 11:24 1671次阅读
    如何用Ubuntu qemu跑<b class='flag-5'>zephyr_polling</b>的蓝牙?

    贸泽开售STMicroelectronicsBlueNRG-2N和BlueNRG-LP器件

    ST BlueNRG-2N 器件是通过蓝牙5.0认证并符合低功耗蓝牙4.2标准的无线网络协处理器,其集成了Arm® Cortex®-M0内核、电源管理、时钟、低功耗蓝牙无线模块、随机数发生器、外部微控制器接口 ( SPI/UART) 和公钥加密等功能。
    发表于11-09 15:57 911次阅读

    Xilinx FPGA2pro使用说明

    从光盘上拷下来的,Xilinx FPGA 2pro 使用说明,想要的拿去吧
    发表于10-24 10:14

    RTThread Studio的芯片支持包使用说明

    介绍本仓库为RTThread Studio的芯片支持包,目前暂时支持52832及52840的 rtt完整版下载地址导入教程 使用说明创建 RTT工程选择芯片及配置串口引脚(目前只支持选择0端口)后,完成项目创建更改工程配置如果还需要蓝
    发表于08-04 10:48

    怎样使用SDK中的Beacon示例对BLUENRG2进行重新编程呢?

    我希望使用 BLUENRG-M2模块构建一个带有 BLUENRG2的项目。我购买了一块 X-NUCLEO-BNRG 2A1 板开始使用,并将该板上的 SWDIO、SWDCLK、NRESET、VDD
    发表于01-03 10:00

    硬件重置时BlueNRG-MSSPI事务意外响应怎么解决?

    -MS ( SPI) 测试程序。我正在使用 STEVAL-IDB005V1D 板(带有 BLUENRG-MS 芯片)和 NUCLEO-F446RE 板来读取 SPI信号。这是测试程序(AN4494 第 5
    发表于01-06 07:27

    如何使用RT685的DSP搭配ZephyrOS?

    “evkmimxrt685_dsp_mu_ polling”完成了此操作,它运行良好。 现在我想对 ZephyrOS 做同样的事情。我用这个平台制作了几个应用程序,这适用于 ARM 部分。 我没有
    发表于05-18 08:04

    ESP8266_SPI模块使用说明_Version 0.1

    ESP8266__ SPI_Module_User Guide, SPI模块 使用说明
    发表于12-30 14:40 281次下载

    RT-Thread (2RTTSPI设备驱动流程 || LWIP + ENC28J60

    系列文章目录RT-Thread (1) 添加外部内存到内存管理RT-Thread ( 2RTT SPI设备驱动流程 || LWIP + ENC28J60目录0 概述0.0 参考资料0.1 硬件资源
    发表于11-19 14:21 15次下载
    RT-Thread (<b class='flag-5'>2</b>) <b class='flag-5'>RTT</b> <b class='flag-5'>SPI</b>设备驱动流程 || LWIP + ENC28J60

    RTTzephyr_pollingSPIBluenrg2数据传输测试

    RTT那边的 Kconfig 配置完成,项目的基本开发内容就完成了。然后再对协议栈在 Bluenrg2芯片上采用 SPI作为 HCI 的数据传输进行测试。
    的头像 发表于09-25 16:25 729次阅读
    <b class='flag-5'>RTT</b> <b class='flag-5'>zephyr_polling</b> <b class='flag-5'>SPI</b> <b class='flag-5'>Bluenrg2</b>数据传输测试

    RT-Thread平台zephyr_polling软件包Bluenrg2蓝牙芯片启动流程

    地址: RTT_PACKAGE_zephyr_polling前面已经完成了 SPI接口的实现,要让 zephyr_pollingBluenrg2上运行起来,下一步是实现其特殊
    的头像 发表于09-27 18:40 694次阅读
    RT-Thread平台 <b class='flag-5'>zephyr_polling</b>软件包 <b class='flag-5'>Bluenrg2</b> 蓝牙芯片启动流程

    实战经验 |BlueNRG-X 原理图参数说明(附资料下载端口)

    关键词: BlueNRG-1, BlueNRG-2, BlueNRG-LP/LPS 目录预览 1、前言 2BlueNRG-1/-
    的头像 发表于10-18 19:15 582次阅读

    RTT平台zephyr_polling软件包SPIBluenrg2丢包问题排查

    在对协议栈在 Bluenrg2芯片上采用 SPI作为 HCI 的数据传输进行测试的时候,发现存在丢包问题。
    的头像 发表于10-23 15:41 401次阅读
    <b class='flag-5'>RTT</b>平台<b class='flag-5'>zephyr_polling</b>软件包<b class='flag-5'>SPI</b> <b class='flag-5'>Bluenrg2</b>丢包问题排查