DECT NR+标准正稳步成熟,随着nRF Connect SDK v2.7.0的发布,我们距离看到NR+商用产品面世又近了一步。若想快速了解NR+技术,请参阅我们之前的博客文章:《DECT NR+:非蜂窝5G技术深度解析》
最新发布的nRF Connect SDK v2.7.0为DECT NR+技术开发带来重大改进。该SDK现包含NR+ 物理层(PHY) API,可与NR+物理层调制解调器固件交互,并提供DECT Hello示例应用程序,支持用户开箱即用测试解决方案。
本文将详细介绍如何在nRF Connect SDK中配置现有的DECT NR+示例项目,并解析用于调试调制解调器的DECT PHY API接口。
Nordic的NR+产品组合
Nordic提供三款支持该标准的集成电路封装(SiP):nRF9161 SiP、nRF9131迷你SiP和nRF9151 SiP。
我们提供基于nRF91调制解调器内核运行的DECT NR+物理层实现方案。因部分地区存在监管限制,调制解调器固件目前通过Nordic销售渠道分发,可通过此表单申请获取。
nRF Connect SDK v2.7.0版本已包含DECT NR+ PHY API,该接口可对接NR+物理层调制解调器固件。
关于其余NR+协议栈组件,Nordic正与解决方案合作伙伴协作,共同提供基于Nordic硬件支持的商用NR+协议栈。
Wirepas
Wirepas 拥有其 Wirepas 5G 网状网络解决方案,当前处于 1.0.0 版本发布状态。该方案配备专属的 Wirepas SDK(即非基于 Zephyr 的开发工具包),这是 Wirepas 提供的独立授权软件。如需更多信息,请联系 Wirepas。
Lynqn
另一方面,Lynq 专注于通过 RavenTalk 和 RavenConnect 产品实现低延迟音频和长距离数据应用。这些软件堆栈也需单独向 Lynq 获取许可。如需更多信息,请联系 Lynq。
先决条件
DECT NR+ PHY 握手示例
在配置设备前,让我们先了解nRF Connect SDK新增的NR+示例:DECT NR+ PHY握手示例。
该示例以循环方式运行,先发送递增计数器值,随后监听5秒(由CONFIG_RX_PERIOD_S设定)的接收数据。完成30次传输(由CONFIG_TX_TRANSMISSIONS设定)后,循环终止。
示例文件路径:<安装路径>/nrf/samples/dect/dect_phy/hello_dect。
该示例包含两个区域配置覆盖文件:overlay-eu.conf(适用于欧洲)和overlay-us.conf(适用于美国),请根据所在地区选用对应文件。
- overlay-eu.conf 适用于欧洲,将 CONFIG_CARRIER 设置为 1677,对应频段编号 1(详见下文表 1)。频段编号 1(约 1880-1900 MHz)是欧洲的 DECT 频率分配。
- overlay-us.conf 适用于北美地区,将 CONFIG_CARRIER 设置为 1711,对应频段编号 9,该频段(1920-1930 MHz)为该区域 DECT 频率分配。此外,必须将CONFIG_TX_POWER值从13(对应19 dBm)调低至11(对应13 dBm),详见下表2。
若您所在地区不属于上述两类区域,则需查阅当地法规并创建调整后的覆盖配置。在任何情况下,您均有责任按照当地法规操作设备。样本运行须确保符合当地法规要求。

表1:ETSI TS 103 636-2 表5.4.2-1 - 绝对信道编号范围

表2:ETSI TS 103 636-4 表6.2.1-3a - 发射功率
最后,您可以通过 CONFIG_NETWORK_ID 配置网络标识符,并使用 CONFIG_MCS 配置调制编码方案。调制编码方案会影响当前时隙内可容纳的数据量,因此增加该值将要求应用程序对消息进行填充。
设备准备
刷写DECT NR+ PHY调制解调器固件
-
打开 nRF Connect for Desktop。
-
安装并启动 Programmer 应用程序。
-
使用 USB-C 线将 nRF91x1 DK 连接到计算机并打开电源。
-
在编程器应用程序中,选择左上角的 nRF91x1 开发板。
-
选择“添加文件”,然后点击“浏览…”
-
定位并选择 DECT NR+ PHY 调制解调器固件压缩包(mwf-nr+_nrf91x1_<版本号>.zip),点击“打开”。
请联系Nordic销售部门申请此固件。
-
选择“写入”,在弹出窗口中再次选择“写入”,并等待调制解调器DFU完成。


-
当出现绿色成功消息时,请选择关闭。

-
对另一块nRF91x1开发套件重复步骤3-7。
构建并烧录DECT NR+ PHY握手示例
在本博客中,我们将提供两种不同的方法来构建和烧录示例程序。
第一种方法是在Visual Studio Code中自行构建示例程序后再进行烧录。这需要您在计算机上安装nRF Connect SDK、Visual Studio Code以及nRF Connect for VS Code扩展程序。
第二种方法是使用Programmer应用程序刷写预编译的固件二进制文件。
方案1:使用Visual Studio Code
NR+ PHY示例程序有多种构建和烧录方式。以下步骤将通过Visual Studio Code中的nRF Connect for VS Code扩展同时完成示例程序的构建与烧录。
- 打开 Visual Studio Code,导航至 nRF Connect SDK 扩展。
- 选择创建新应用程序,然后选择复制示例并选取 DECT NR+ PHY hello 示例。
- 点击添加构建配置以添加构建配置。
- 在“Board”选项中,选择以下任一board目标:nrf9161dk_nrf9161_ns 或 nrf9151dk_nrf9151_ns
- 在Kconfig片段下,选择“Add fragment”,下拉菜单中应显示两个选项:overlay-eu.conf 和 overlay-us.conf。根据所在地区选择其中一个。
- 请注意,如果两个 .conf 文件均未被选中,CONFIG_CARRIER 将被取消设置,应用程序将无法构建。
- 请确保已选中生成后构建配置。
- 选择构建配置,并等待构建完成。
- 然后在操作选项卡下,点击刷写按钮将镜像刷写至设备。
方案 2:使用 Programmer 应用程序
您也可以使用下方附带的预编译二进制文件,通过 Programmer 应用程序将固件直接刷写至设备:
2024年11月26日,更新至nRF Connect SDK v2.8.0版本。
- 下载您所在地区(-eu 或 -us 后缀)的 hello_dect 示例固件二进制文件。
- 在编程器应用程序中,选择“Add file”,然后点击“Browse…”
- 导航至 hello_dect 固件文件并选中,点击“Open”。
- 选择“Erase & write”,等待操作完成。
当右侧窗口中的图案停止时,操作即告完成。

以下日志输出也显示写入操作成功:
13:16:25.241 Recovering Application core
13:16:25.242 Recovering Application core 0%
13:16:26.440 Recovering Application core 100%
13:16:26.440 Recovering Application core completed
13:16:26.441 Writing HEX to Application core
13:16:26.865 Writing HEX to Application core 33%
13:16:26.866 Writing HEX to Application core 33%
13:16:27.431 Writing HEX to Application core 100%
13:16:27.432 Writing HEX to Application core completed
13:16:27.432 Loading core information for Application core
13:16:27.433 Update files regions according to Application core
13:16:27.433 Parse memory regions for file
13:16:27.434 Loading core information for Application core 0%
13:16:27.463 Loading core information for Application core 100%
13:16:27.463 Loading core information for Application core completed
13:16:27.464 Update files regions according to Application core
13:16:27.464 Parse memory regions for file
13:16:31.436 Reading readback protection status for Application core
13:16:31.436 Reading readback protection status for Application core 0%
13:16:31.452 Reading readback protection status for Application core 100%
13:16:31.452 Application core protection status 'NRFDL_PROTECTION_STATUS_NONE'
13:16:31.452 Reading readback protection status for Application core completed
测试
为每个开发板打开终端以查看运行状态。
-
在 Visual Studio Code 中,转到 nRF Connect for VS Code 窗口。
-
在 CONNECTED DEVICES 下,展开 nRF91x1 开发套件。
请注意存在两个 COM 端口,因为 nRF91x1 SiP 应用核心通过 TF-M 分割为安全域和非安全域。我们需要查看应用程序运行的非安全域中的终端输出。
-
点击COM端口右侧的图标,然后在窗口顶部选择设备。


屏幕底部应出现一个终端窗口,类似于下图所示。
若两台设备同时运行,日志输出应类似于下图所示,显示数据包的发送与接收情况。

提示:若需调试信息,请将main.c文件第13行修改为LOG_MODULE_REGISTER(app, LOG_LEVEL_DBG);
让应用程序运行一段时间,注意在第29次传输后它会自动关闭

注意:在 prj.conf 文件中添加 CONFIG_TX_TRANSMISSION=0 将使应用程序配置为永久传输。
NR+ PHY API
让我们来分析hello_dect示例程序用于与NR+ PHY固件交互的NR+ PHY API。
当使用NR+ PHY API构建自有应用程序时,需注意以下结构体struct phy_ctrl_field_common必须由应用程序自行定义。应用程序使用PHY API的发送和接收函数(nrf_modem_dect_phy_tx()和nrf_modem_dect_phy_rx()),必须构造PHY头部及可能的有效载荷。调制解调器会检查头部结构,格式错误的头部将被拒绝。
/* Header type 1, due to endianness the order is different than in the specification. */
struct phy_ctrl_field_common {
uint32_t packet_length : 4;
uint32_t packet_length_type : 1;
uint32_t header_format : 3;
uint32_t short_network_id : 8;
uint32_t transmitter_id_hi : 8;
uint32_t transmitter_id_lo : 8;
uint32_t df_mcs : 3;
uint32_t reserved : 1;
uint32_t transmit_power : 4;
uint32_t pad : 24;
};
这是PHY header的结构,其定义详见NR+规范。有关各字段的详细信息,请参阅下表。

ETSI TS 103 636-4 表 6.2.1-1 物理层控制字段
传输
首先,我们来填充PHY header,其类型为struct phy_ctrl_field_common。
struct phy_ctrl_field_common header = {
.header_format = 0x0,
.packet_length_type = 0x0,
.packet_length = 0x01,
.short_network_id = (CONFIG_NETWORK_ID & 0xff),
.transmitter_id_hi = (device_id >> 8),
.transmitter_id_lo = (device_id & 0xff),
.transmit_power = CONFIG_TX_POWER,
.reserved = 0,
.df_mcs = CONFIG_MCS,
};
接着将定义TX操作参数,这些参数存储在struct nrf_modem_dect_phy_tx_params结构体中,其中会传递我们之前定义的header。
struct nrf_modem_dect_phy_tx_params tx_op_params = {
.start_time = 0,
.handle = handle,
.network_id = CONFIG_NETWORK_ID,
.phy_type = 0,
.lbt_rssi_threshold_max = 0,
.carrier = CONFIG_CARRIER,
.lbt_period = NRF_MODEM_DECT_LBT_PERIOD_MAX,
.phy_header = (union nrf_modem_dect_phy_hdr *)&header,
.data = data,
.data_size = data_len,
};
最后,为发送数据包,需将存储于 tx_op_params 中的传输参数传递给函数 nrf_modem_dect_phy_tx(),该函数的签名如下:

需要特别注意的是,在DECT频段进行传输时,必须由MAC层负责控制该过程。MAC层负责管理射频资源,并根据接收信号强度指示(RSSI)测量结果确定工作信道和子时隙。仅允许使用测量结果显示为空闲的频-时窗口进行传输。
仅凭物理层API无法实现传输功能。
结语
对于希望探索DECT NR+技术的开发者,Nordic Semiconductor的nRF Connect SDK v2.7.0中提供的NR+物理层API及DECT Hello示例程序是极具价值的资源。依托Wirepas、Lynq等解决方案合作伙伴的支持,以及我们持续优化的产品组合,我们致力于协助客户应对现代无线通信标准的复杂挑战。
若对Nordic NR+产品、DECT物理层或示例代码存在疑问,请通过DevZone提交工单。如需获取DECT NR+物理层固件,请联系销售部门。
参考