这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » DIY与开源设计 » 电子DIY » 【FRDM-MCXW71】过程帖:基于Zephyr的BLE心率计测试

共3条 1/1 1 跳转至

【FRDM-MCXW71】过程帖:基于Zephyr的BLE心率计测试

菜鸟
2026-04-04 19:55:04     打赏

      很高兴参加由e络盟和EEPW联合举办的“e起DIY”活动。我们在上一篇的开箱帖:【FRDM-MCXW71】开箱帖+BLE出厂程序测试 中介绍了出厂自带的蓝牙测试程序,但出厂程序是基于官方SDK开发的。本次“低功耗蓝牙温湿度计”的任务目标要求构建一个基于 Zephyr 实时操作系统的低功耗蓝牙温湿度监测设备。今天我们就简单测试一下基于Zephyr的BLE开发~


一、Zephyr基础环境

      目前NXP、Nordic、ADI等各芯片厂家都针对VSCode推出了Zephyr支持插件。虽然多了一些芯片特定的图形化配置工具,但开发者每次换芯片都要装一个各自独立的Zephyr SDK环境,有点繁琐,感觉有一点点背离Zephyr跨平台的初衷。今天我们只基于统一的Zephyr IDE VSCode插件开发,以不变应万变。

      为了获取最新的软件支持,我们将Global Zephyr升级到最新的4.4.0版本,下面是配置完成的VSCode Zephyr IDE画面。

环境.jpg

二、烧写蓝牙处理器固件

        在Zephyr操作系统下使用NXP FRDM-MCXW71 开发板的BLE(低功耗蓝牙)功能,有着良好的官方支持和丰富的应用生态。FRDM-MCXW71 搭载了基于双核架构的 MCX W71 无线 MCU:主核是运行应用(即 Zephyr OS)的 Cortex-M33,而立的 Cortex-M3 无线电核心(称为 NBU,Narrow Band Unit 窄带单元)负责处理底层无线射频协议(如蓝牙 HCI 固件)

      在 Zephyr 中启用 FRDM-MCXW71 的蓝牙功能,必须完成二进制 Blob 拉取和双核固件烧录这两个关键步骤。

A. 拉取 NXP HAL 二进制文件 (Binary Blobs)

      由于蓝牙底层控制器代码不开源,使用 Zephyr 编译该板卡蓝牙功能前,必须在 Zephyr 工作区执行以下命令来获取相关的 NXP HAL 库:

west blobs fetch hal_nxp
      下载好后,我们可以看到官方预先提供的NBU固件,我们随后烧写第一个。

blob.jpg

为了避免大家疑惑,这里贴一下三种固件的区别。

mcxw71_nbu_ble.sb3 (推荐选项)
  • 这是什么:纯粹的蓝牙低功耗 (BLE) 固件。

  • 包含内容:内部只包含了 BLE 的链路层 (Link Layer) 固件,它通过标准 HCI 接口与 CM33 上的 Zephyr 蓝牙 Host 协议栈通信。

  • 特点:因为没有包含任何 802.15.4 协议(Thread/Matter 用不到),它的 Flash/RAM 占用最小,启动最快,功耗控制也最好。这是运行纯蓝牙应用的最优选。

mcxw71_nbu_ble_15_4_dyn.sb3
  • 这是什么:BLE + IEEE 802.15.4 动态多协议并行固件。

  • 包含内容:除了 BLE 控制器外,还包含了 IEEE 802.15.4 的底层(PHY/射频层)dyn 代表 Dynamic Concurrent(动态并发),底层 NBU 会在 BLE 和 802.15.4 之间进行射频时间分片(Time-slicing),保证两者“同时”工作。

  • 特点:在此架构下,802.15.4 的MAC层 (媒体访问控制层) 是交由宿主机(即运行在 CM33 上的 Zephyr 系统里的 OpenThread 等栈)用软件来实现的。如果你要开发 Matter 节点或 Thread 边界路由器,会用到这个。

mcxw71_nbu_ble_15_4_dyn_mac.sb3libieee-802.15.4_MAC_intf.a
  • 这是什么:带有硬件级 MAC 的多协议并行固件。

  • 包含内容:与上一个类似,但它将整个 802.15.4 的 MAC 层直接固化到了 NBU 固件内部

  • 特点:为了减轻 CM33(Zephyr)的 CPU 算力负担,或者为了满足某些严格的 MAC 层时序与认证要求,MAC 层交给了 NBU 处理。此时,Zephyr 就不能使用自带的软件 15.4 MAC 驱动了,而是必须在工程里链接那个 libieee-802.15.4_MAC_intf.a 静态库,让 Zephyr 通过核间通信(IPC)调用 NBU 里面的 MAC API。

B. NBU(无线子系统)固件烧录

        Zephyr 应用(CM33核)和蓝牙协议栈底层(CM3核 / NBU)是分离的。每次更新大版本或初次使用时,需要向 NBU 烧录蓝牙固件。

        1. 从 NXP 官网下载并安装 blhost 工具

                大家一般做开发时已经安装了各种工具包,可以找找看自己是不是已经安装了(我就在电脑里找到了一堆),如图

    blhost2.jpg2. 进入 ISP 模式

            断开开发板的所有电源,按住板载的 SW3 按键,同时将板子通过 USB 连接到电脑,然后松开 SW3 按键,此时 MCU 会进入 ISP 模式。

    3. 烧录固件

            使用 blhost 命令行工具将预编译好的 NBU 固件刷入开发板,烧写过程如图。

blhost.jpg

三、BLE心率计-APP开发

      因为Zephyr跨平台特性,APP开发的部分就比较通用了。我们的主核只要能够按照标准HCI协议,向蓝牙处理器发出信号即可,

本次我们选择一个BLE心率计例程跑一下,在Zephyr IDE里选择相应例程:

hr.jpg

      随后进行编译与烧录,过程日志如下:

 *  Executing task: west build -b frdm_mcxw71 c:\Users\Administrator\.zephyr_ide\peripheral_hr -p --build-dir c:\Users\Administrator\.zephyr_ide\peripheral_hr\build\frdm_mcxw71  -- -DBOARD_ROOT='C:\Users\Administrator\.zephyr_ide\external\zephyr'  -DCONFIG_DEBUG_OPTIMIZATIONS=y -DCONFIG_DEBUG_THREAD_INFO=y   

-- west build: generating a build system
Loading Zephyr default modules (Zephyr base).
-- Application: C:/Users/Administrator/.zephyr_ide/peripheral_hr
-- CMake version: 4.3.1
-- Found Python3: C:/Users/Administrator/.zephyr_ide/.venv/Scripts/python.exe (found suitable version "3.13.9", minimum required is "3.12") found components: Interpreter
-- Cache files will be written to: C:/Users/Administrator/.zephyr_ide/external/zephyr/.cache
-- Zephyr version: 4.4.0-rc2 (C:/Users/Administrator/.zephyr_ide/external/zephyr)
-- Found west (found suitable version "1.5.0", minimum required is "0.14.0")
-- Board: frdm_mcxw71, qualifiers: mcxw716c
-- Found host-tools: zephyr 1.0.1 (C:/Users/Administrator/.zephyr_ide/toolchains/zephyr-sdk-1.0.1)
-- Found toolchain: zephyr 1.0.1 (C:/Users/Administrator/.zephyr_ide/toolchains/zephyr-sdk-1.0.1)
-- Found Dtc: C:/Users/Administrator/AppData/Local/Microsoft/WinGet/Packages/oss-winget.dtc_Microsoft.Winget.Source_8wekyb3d8bbwe/usr/bin/dtc.exe (found suitable version "1.6.1", minimum required is "1.4.6")
-- Found BOARD.dts: C:/Users/Administrator/.zephyr_ide/external/zephyr/boards/nxp/frdm_mcxw71/frdm_mcxw71.dts
-- Generated zephyr.dts: C:/Users/Administrator/.zephyr_ide/peripheral_hr/build/frdm_mcxw71/zephyr/zephyr.dts
-- Generated pickled edt: C:/Users/Administrator/.zephyr_ide/peripheral_hr/build/frdm_mcxw71/zephyr/edt.pickle
-- Generated devicetree_generated.h: C:/Users/Administrator/.zephyr_ide/peripheral_hr/build/frdm_mcxw71/zephyr/include/generated/zephyr/devicetree_generated.h
Parsing C:/Users/Administrator/.zephyr_ide/external/zephyr/Kconfig
Loaded configuration 'C:/Users/Administrator/.zephyr_ide/external/zephyr/boards/nxp/frdm_mcxw71/frdm_mcxw71_defconfig'
Merged configuration 'C:/Users/Administrator/.zephyr_ide/peripheral_hr/prj.conf'
Merged configuration 'C:/Users/Administrator/.zephyr_ide/peripheral_hr/build/frdm_mcxw71/zephyr/misc/generated/extra_kconfig_options.conf'
Configuration saved to 'C:/Users/Administrator/.zephyr_ide/peripheral_hr/build/frdm_mcxw71/zephyr/.config'
Kconfig header saved to 'C:/Users/Administrator/.zephyr_ide/peripheral_hr/build/frdm_mcxw71/zephyr/include/generated/zephyr/autoconf.h'   
-- Found GnuLd: C:/Users/Administrator/.zephyr_ide/toolchains/zephyr-sdk-1.0.1/gnu/arm-zephyr-eabi/arm-zephyr-eabi/bin/ld.bfd.exe (found version "2.43.1")
-- The C compiler identification is GNU 14.3.0
-- The CXX compiler identification is GNU 14.3.0
-- The ASM compiler identification is GNU
-- Found assembler: C:/Users/Administrator/.zephyr_ide/toolchains/zephyr-sdk-1.0.1/gnu/arm-zephyr-eabi/bin/arm-zephyr-eabi-gcc.exe
-- connectivity_framework middleware is included.
-- Looking for device MCXW716C in C:/Users/Administrator/.zephyr_ide/external/modules/hal/nxp/mcux/mcux-sdk-ng/devices/
-- Found device folder: C:/Users/Administrator/.zephyr_ide/external/modules/hal/nxp/mcux/mcux-sdk-ng/devices/MCX/MCXW/MCXW716C
-- Found Python3: C:/Users/Administrator/.zephyr_ide/.venv/Scripts/python.exe (found version "3.13.9") found components: Interpreter
-- Could NOT find Threads (missing: Threads_FOUND) 
-- Could NOT find Threads (missing: Threads_FOUND) 
-- Performing Test C_COMPILER_SUPPORTS_WFORMAT_SIGNEDNESS
-- Performing Test C_COMPILER_SUPPORTS_WFORMAT_SIGNEDNESS - Success
-- Found gen_kobject_list: C:/Users/Administrator/.zephyr_ide/external/zephyr/scripts/build/gen_kobject_list.py
-- Configuring done (13.5s)
-- Generating done (1.0s)
-- Build files have been written to: C:/Users/Administrator/.zephyr_ide/peripheral_hr/build/frdm_mcxw71
-- west build: building application
[1/371] Generating include/generated/zephyr/version.h
-- Zephyr version: 4.4.0-rc2 (C:/Users/Administrator/.zephyr_ide/external/zephyr), build: 41082f40fc8f
[371/371] Linking C executable zephyr\zephyr.elf
Memory region         Used Size  Region Size  %age Used
FLASH:      147320 B         1 MB     14.05%
RAM:       28744 B       112 KB     25.06%
SMU2:         40 KB        40 KB    100.00%
IDT_LIST:           0 B        32 KB      0.00%
Generating files from C:/Users/Administrator/.zephyr_ide/peripheral_hr/build/frdm_mcxw71/zephyr/zephyr.elf for board: frdm_mcxw71/mcxw716c
 *  Terminal will be reused by tasks, press any key to close it. 

 *  Executing task: west flash --build-dir c:\Users\Administrator\.zephyr_ide\peripheral_hr\build\frdm_mcxw71  

-- west flash: rebuilding
ninja: no work to do.
-- west flash: using runner linkserver
RUNNER - gdb_port = 3333, semih port = 8888
-- runners.linkserver: LinkServer: D:\ProgramData\NXP\LinkServer_26.3.123\Linkserver.exe, version v26.3.123
INFO: Exact match for MCXW716CxxxA:FRDM-MCXW71 found
INFO: Selected device MCXW716CxxxA:FRDM-MCXW71
INFO: Selected probe #1 M1S1E4IQCLX1J (MCU-LINK on-board (r0E3) CMSIS-DAP V3.117)
INFO: MCU-Link firmware update `check`: not supported on probe ([M1S1E4IQCLX1J] [MCU-LINK on-board (r0E3) CMSIS-DAP V3.117]). Only probes running firmware V3.122 or later can be updated automatically
 *  Terminal will be reused by tasks, press any key to close it.


四、BLE心率计-通信测试

1. IoT Toolbox应用测试(NXP应用)

      我们打开在开箱帖中按照好的IoT Toolbox APP,开启手机的蓝牙与定位功能。选择 Heart Rate

-268765398.jpg

      随后手机会扫描到板卡的BLE广播信号,我们点击连接它。

3.jpg

      此时页面就会开始展示心率波形,如图:

1.jpg

2. nRF Connect应用测试(Nordic APP)

      如果我们想看看更底层的GATT Service和Characteristic,可以使用nRF Connect APP。


2.jpg


      至此,我们就成功进行了基于Zephyr的BLE测试,接下来只要参照例程,读取并上传温湿度数据,就可以完成基础任务了~




关键词: FRDM-MCXW71     BLE     Zephyr    

院士
2026-04-04 23:10:07     打赏
2楼

这也没有心率传感器,跑个心率的demo还能出来测试数据?


院士
2026-04-05 11:10:02     打赏
3楼

也是啊!

既然是演示示例程序就应该模拟出来一个通用的波形出来。

现在回想一下,平时的产品也是这样设计的。


共3条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]