这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » DIY与开源设计 » 电子DIY » 【NXPFRDM-MCXW72蓝牙信道探测】历尽千辛万苦,终于跑通Channel

共1条 1/1 1 跳转至页

【NXPFRDM-MCXW72蓝牙信道探测】历尽千辛万苦,终于跑通ChannelSounding(中文资料首例)

助工
2026-10-18 21:49:23     打赏

Channel Sounding,或者说信道探测,是蓝牙6.0引入的新特性,主要用于高精度距离测量。

相较于传统的基于RSSI的测量方式:通过接收信号强度估算设备间距离,精度一般为1-5米。

信道探测采用相位测距 (PBR) 和往返时间 (RTT) 相结合的方式来测距,100米范围内精度误差在±50厘米以内,而在5米以内精度可达10厘米以内。可见其精度大大提高。

下图所示为相位测距 (PBR)的原理。




image.png


相位测距 (PBR) : 设备 A(发起者)正在测量到设备 B(反射者)的距离,则发起者通过发送未调制的音调开始测距。反射者测量传入信号相对于本地振荡器的相位,然后向发起者发送未调制的音调。随后,发起者测量传入信号相对于本地振荡器的相位。两个设备通过估算接收到的未调制信号与本地振荡器 (LO) 之间的相位偏移或相位差来测量它们之间的距离。


下图所示往返时间 (RTT) 的原理,就是通过测量电磁波从设备 A(发起者)到达设备 B(反射者)的时间,从而计算出距离。

image.png


看到有好几个大神已经发了贴,清一色的Nordic的NRF54L15开发板,那NXP是不服的,毕竟是业界王者的存在,不可甘拜下风。

具体到NXP的FRDM-MCXW72,他是支持信道探测的。

特别是NXP官方还贴心的制作了使用FRDM-MCXW72进行信道探测测距的教程和视频。如下:

Channel Sounding Bring-up FRDM MCXW72 .pdf



视频分两集:

上集介绍用1块FRDM-MCXW72开发板与1台支持蓝牙信道探测的手机(目前唯一支持的是google pixel 10)进行距离测量。


image.png


下集介绍使用2块FRDM-MCXW72开发板进行距离测量。


image.png


有了教程,是不是拿来就能用呢,天真了!

所以本篇标题为历尽千辛万苦,终于跑通Channel Sounding。


我们先简要介绍官方的方法:

准备硬件:2块FRDM-MCXW72开发板

准备软件:Visual Studio Code (VS Code)、串口调试助手。

对应的VS Code扩展和SDK都是在VS Code中下载。


主要流程:

  1. 安装MCUXpresso for VS Code扩展——>

  2. 在MCUXpresso for VS Code扩展中安装所需软件包——>

  3. 在MCUXpresso for VS Code扩展中下载MCUXpresso SDK——>

  4. 分别给两块FRDM-MCXW72开发板下载NBU(蓝牙固件):mcxw72_nbu_ble_hosted.bin——>

  5. 给其中1块FRDM-MCXW72开发板(反射者)导入、编译并下载loc_user_device_freertos例程——>

  6. 给另外1块FRDM-MCXW72开发板(发起者)导入、编译并下载loc_reader_freertos example例程——>

  7. 分别将两块FRDM-MCXW72开发板接入电脑,通过串口调试助手控制、观察其进行蓝牙信道探测功能。


image.png


下面我就按照这个流程(8个步骤)介绍下具体过程,以及踩坑记录。

  1. 安装MCUXpresso for VS Code扩展——>

  2. 在MCUXpresso for VS Code扩展中安装所需软件包——>

这两个步骤比较基础就一笔带过,步骤2要下载较多软件包,设计从github下载,如果失败就反复多次尝试,总算是可以成功的。


image.png


3.在MCUXpresso for VS Code扩展中下载MCUXpresso SDK——>

这里就给我当头一棒,在MCUXpresso for VS Code扩展的Import Repository中,拉取MCUXpresso SDK时。

由于是从github中下载软件包到本地,经常整夜下载,尽管已下载10GB+,最后仍是失败。

image.png


更要命的是,尽管已下载10GB+,仍然无法完成下一个步骤:从Import Example from Repository,也就是从SDK导入例程:loc_user_device_freertos例程loc_reader_freertos example例程。

这个步骤尝试了五六次都没有成功,一度使整个项目陷入停滞。

(需要说明的是:为什么容量高达10GB+,是因为他下载的是整个MCUXpresso SDK,包含了NXP所有型号的MCU、MPU、各自中间件、第三方插件,能不大吗)

后面经过摸索、挣扎、尝试,终于另辟蹊径,从NXP网页下载FRDM-MCXW72开发板的SDK,走成功了!

MCUXpresso SDK 构建工具(网页版)

https://mcuxpresso.nxp.com/zh


image.png

如上图:SDK版本是26.09.00,点击右下角的下载按钮,就可以顺利下载到SDK了(272MB)

image.png

下载到硬盘后,解压缩(不要有中文路径)

在MCUXpresso for VS Code扩展中,点击Import Repository——选择LOCAL(本地仓库)——选择刚下载解压的SDK——import,就可以成功导入SDK了!!!(见下图左下角的SDK版本标识)

image.png


然后点击Import Example from Repository,分别选择loc_user_device_freertos例程和loc_reader_freertos example例程,就可以编译下载了。


4.不过在导入例程前,需要先分别给两个开发板下载NBU(相当于蓝牙固件)。

分别给两块FRDM-MCXW72开发板下载NBU(蓝牙固件):mcxw72_nbu_ble_hosted.bin——>

教程里是用LinkFlash(在步骤2中自动下载了)下载,然而我的软件始终无法识别Probe(下载器)

image.png

这里又需要曲线救国。

搬出NXP的官方IDE:MCUXpresso IDE v25.6.136

随便导入一个FRDM-MCXW72例程,点击菜单栏中的芯片图标,打开GUI Flash Tool

先点Erase擦除固件。

image.png


然后,在program选项卡,选择要下载的NBU蓝牙固件

在SDK的以下目录:

SDK_26_09_00_FRDM-MCXW72\mcuxsdk\middleware\wireless\ble_controller\bin\mcxw72_nbu_ble_hosted.bin

下载地址:0x48800000

就可以正常下载了。

image.png



5.给其中1块FRDM-MCXW72开发板(反射者)导入、编译并下载loc_user_device_bm程——>

6.给另外1块FRDM-MCXW72开发板(发起者)导入、编译并下载loc_reader_bm例程——>

(这里要说明下,原例程是下载对应的freertos例程,而非bm,bm是BareMetal裸机程序的缩写,基于个人倾向于裸机遂选了bm程序)

image.png


你以为到这里,一编译一下载就可以了吗?又天真了,又踩坑了!!!

不做任何修改就编译不通过(3个错误),不知道NXP的SDK咋回事。

1792329672737.png


后面在摸索下,终于找到办法。

在这个 `board_debug_nbu.c` 文件中。

添加 以语句,关闭对应的Logger。

#undef BOARD_NBUDBG_HCI_LOGGER
#define BOARD_NBUDBG_HCI_LOGGER 0

image.png


后面就是分别下载到2块开发板。

插上电脑,使用串口助手打开各自开发板的串口调试助手,按下开发板的复位按钮。

如下左侧对应发起者:Reader,测距主机;右侧对应反射者:Device,测距从机

image.png


分别在各自串口助手输入sb指令开启测距。

就可以看到测距结果了。

在reader界面,可以

image.png

[0] Distance (RADE): 0.61 m   Quality: 99.0%

[0] RTT Distance: 3.6 m Success Rate: 100

Distance measurement complete. Local data available.


其中Distance是信道探测的实际距离0.61m

RTT距离是基于飞行时间的测距,偏差比较大。


再用卷尺验证下。

两个开发板的天线真实距离0.17m,信道探测测得0.19m,精度非常高了!


image.png


本次分享就到这里。




共1条 1/1 1 跳转至页

回复

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