Zephyr 中的 Decawave DWM1001-DEV 开发板支持:从板级配置到 UWB 应用构建与烧录
2026/9/21 14:44:03 网站建设 项目流程
  • 操作系统
  • 嵌入式
  • RTOS
  • 物联网

【免费下载链接】zephyr

Primary Git Repository for the Zephyr Project. Zephyr is a new generation, scalable, optimized, secure RTOS for multiple hardware architectures.

项目地址:https://gitcode.com/GitHub_Trending/ze/zephyr
点击查看免费下载

本文基于 Zephyr RTOS 仓库中 boards/qorvo/decawave_dwm1001_dev/doc/index.rst 展开,系统讲解 Qorvo(原 Decawave)DWM1001-DEV 开发板在 Zephyr 中的支持情况:从板级设备树(DTS)、引脚复用、Kconfig 配置,到基于 J-Link OB 的构建、烧录与调试流程。读完本文,你将能够独立完成该板卡的 hello_world 示例构建与烧录,并理解其 UWB 无线定位模块 DW1000 在 Zephyr 中的驱动集成方式。

板卡概述:DWM1001 模块与开发板

DWM1001-DEV 是 Decawave(现已被 Qorvo 收购)推出的超宽带(UWB)开发板。Zephyr 仓库中的 board.yml 将其标识为:

  • 板卡名称:decawave_dwm1001_dev,全称 Decawave DWM1001
  • 厂商:qorvo
  • 板载 SoC:nrf52832

DWM1001 模块本身集成了两块核心芯片:Nordic nRF52832 蓝牙 SoC(负责应用处理)与 Decawave DW1000 UWB 收发器(负责 IEEE 802.15.4 UWB 物理层通信)。开发板在此基础上增加了:

  • 电池连接器与充电电路:支持电池供电与充电管理;
  • LED 与按键:用户交互;
  • Raspberry-Pi 兼容排针:便于与树莓派等主机对接;
  • USB 连接器:供电与数据;
  • 板载 J-Link OB:提供 SWD 调试、虚拟串口(Virtual COM Port)与 Segger RTT 能力。

从 decawave_dwm1001_dev.dts 可以看到其设备树模型声明为model = "Decawave DWM1001-DEV"compatible = "decawave,dwm1001",这也是应用中通过 devicetree 匹配该板卡的关键标识。

板级硬件资源:从设备树看外设分布

decawave_dwm1001_dev.dts 是理解该板卡能力的第一手资料。它基于 Nordicnrf52832_qfaa.dtsi展开,并引入了独立的引脚复用描述文件 decawave_dwm1001_dev-pinctrl.dtsi。

系统角色分配(chosen 节点)

chosen { zephyr,console = &uart0; zephyr,shell-uart = &uart0; zephyr,uart-mcumgr = &uart0; zephyr,bt-mon-uart = &uart0; zephyr,bt-c2h-uart = &uart0; zephyr,sram = &sram0; zephyr,flash = &flash0; zephyr,code-partition = &slot0_partition; zephyr,ieee802154 = &ieee802154; };

uart0同时承担控制台、shell、mcumgr 以及蓝牙监控/主机通信的角色,波特率在 decawave_dwm1001_dev.dts 中固定为current-speed = <115200>zephyr,ieee802154指向板载的 DW1000 节点,表明该板卡在 Zephyr 中默认作为 802.15.4(UWB)无线节点使用。

板载外设

外设节点引脚/参数说明
红色 LED 0led0_redP0.14,低电平有效GPIO LED
绿色 LED 1led1_greenP0.30,低电平有效GPIO LED
红色 LED 2led2_redP0.22,低电平有效GPIO LED
蓝色 LED 3led3_blueP0.31,低电平有效GPIO LED
红色 PWM LEDpwm_led0_redPWM0 通道 0,P0.22,20ms 周期,极性反转可用于呼吸灯等 PWM 效果
按键button0P0.2,上拉 + 低电平有效映射为INPUT_KEY_0

aliases节点将sw0led0~led3pwm-led0watchdog0accel0等别名导出,以便 samples 直接引用。值得注意的是accel0 = &lis2dh12:板载了一颗 ST LIS2DH12 加速度计,挂在 I2C0 总线上(地址0x19),中断引脚为 P0.25。

总线与外设配置

  • UART0:使用nordic,nrf-uart驱动,默认与睡眠两套引脚配置;
  • I2C0:使用nordic,nrf-twim,时钟频率为I2C_BITRATE_FAST(400 kHz),SDA/SCL 位于 P0.29/P0.28,启用上拉;
  • SPI1:使用nordic,nrf-spi,CS 为 P0.3;
  • SPI2:使用nordic,nrf-spi,CS 为 P0.17(低有效),其上挂载了核心的DW1000节点;
  • ADCstatus = "okay"使能;
  • PWM0:输出到 P0.22(与红色 LED 2 复用,启用极性反转);
  • UICR:设置gpio-as-nreset,启用 GPIO 作为复位控制;
  • GPIO / GPIOTE:均使能,支撑按键与中断功能。

引脚复用的完整映射(TX/RX/SCK/MOSI/MISO 等)集中在 decawave_dwm1001_dev-pinctrl.dtsi 中,且每个外设都同时提供defaultsleep两套状态,睡眠态启用low-power-enable以降低静态功耗——这体现了 Zephyr pinctrl 机制在低功耗场景下的典型用法。

核心无线模块:DW1000 UWB 收发器

DWM1001 的亮点在于其 UWB 能力。设备树中 DW1000 节点如下(位于 SPI2 上):

ieee802154: dw1000@0 { compatible = "decawave,dw1000"; spi-max-frequency = <8000000>; int-gpios = <&gpio0 19 GPIO_ACTIVE_HIGH>; /* P0.19 中断 */ reset-gpios = <&gpio0 24 GPIO_ACTIVE_LOW>; /* P0.24 复位 */ status = "okay"; reg = <0>; };

该节点由 Zephyr 的 IEEE 802.15.4 驱动栈承载,驱动实现在 drivers/ieee802154/ieee802154_dw1000.c,配套的寄存器定义见 drivers/ieee802154/ieee802154_dw1000_regs.h。驱动的使能依赖 Kconfig 中的 IEEE802154 与 SPI 选项——在 Kconfig.defconfig 中可以看到:

config SPI default y depends on IEEE802154

即只要启用了 IEEE802154 无线协议栈,SPI 总线会自动开启以驱动 DW1000。这一设计保证了 DW1000 的 SPI 通信始终可用,支撑 UWB 测距/定位应用的开发。

默认软件配置与 Kconfig 选项

板级 defconfig 文件 decawave_dwm1001_dev_defconfig 给出了板卡的默认软件配置:

# 使能 MPU CONFIG_ARM_MPU=y # 使能 Segger RTT CONFIG_USE_SEGGER_RTT=y # 使能 GPIO CONFIG_GPIO=y # 使能 UART 驱动 CONFIG_SERIAL=y # 使能控制台 CONFIG_CONSOLE=y CONFIG_UART_CONSOLE=y CONFIG_RTT_CONSOLE=y

要点解读:

  • CONFIG_ARM_MPU=y:启用 ARM MPU,为应用提供内存保护;
  • CONFIG_USE_SEGGER_RTT=yCONFIG_RTT_CONSOLE=y:由于板载 J-Link OB 支持 RTT,控制台输出既可以通过 USB 虚拟串口(CONFIG_UART_CONSOLE)查看,也可以通过 Segger RTT Viewer 查看,二者同时可用;
  • CONFIG_GPIOCONFIG_SERIALCONFIG_CONSOLE:保证 LED、按键、串口控制台开箱即用。

板卡选择由 Kconfig.decawave_dwm1001_dev 定义:

config BOARD_DECAWAVE_DWM1001_DEV select SOC_NRF52832_QFAA

而 Kconfig.defconfig 中的config I2C / default SENSOR保证启用传感器框架时 I2C(LIS2DH12 加速度计依赖)随之开启。此外 board.yml 声明该板卡为arm架构 MCU,RAM 64 KB、Flash 512 KB(对应 nRF52832 的 512KB Flash / 64KB RAM),支持 Zephyr 与 GNU ARM Embedded 两套工具链。

Flash 分区布局与 MCUboot 支持

decawave_dwm1001_dev.dts 中定义了完整的 Flash 分区表,支持 MCUboot 引导加载与固件升级:

分区起始地址大小标签
boot_partition0x000000000xc000(48 KB)mcuboot
slot0_partition0x0000c0000x32000(200 KB)image-0
slot1_partition0x0003e0000x32000(200 KB)image-1
scratch_partition0x000700000xa000(40 KB)image-scratch
storage_partition0x0007a0000x6000(24 KB)storage

chosen中的zephyr,code-partition = &slot0_partition表明应用程序默认烧写到 slot0。这一布局与 Nordic 生态的 DFU(固件升级)流程一致,若使用 MCUboot 进行 A/B 升级,两个 200KB 的镜像槽位可以容纳大部分 Zephyr 应用。

构建、烧录与调试

环境准备:J-Link 工具链

DWM1001-DEV 板载 J-Link OB,烧录与调试完全复用 Nordic nRF5x 的开发工具链。参考 doc/develop/flash_debug/nordic_segger.rst 完成以下安装:

  1. Segger J-Link 软件包:提供 J-Link 固件、桌面工具、SWD 调试、拖放烧录的 Mass Storage 设备、USB CDC ACM 虚拟串口、RTT 控制台与 Ozone 调试器;
  2. nRF5x 命令行工具(nrfjprog):用于擦除、编程与复位目标芯片。

安装完成后,确认nrfjprog位于 PATH 中。Linux 下若使用虚拟串口,可将当前用户加入dialout组并重新登录;若系统装有 ModemManager,建议先停止它(systemctl stop ModemManager.service)以免其向 TTY 设备发送 AT 指令干扰串口通信。

查看串口输出

原文档给出了使用 minicom 监听串口的示例:

$ minicom -D <tty_device> -b 115200

其中<tty_device>替换为开发板的串口设备节点,例如 Linux 下的/dev/ttyACM0(波特率与设备树中uart0current-speed = <115200>一致)。也可以直接使用west的串口监视能力或其他终端工具。

构建并烧录 hello_world

以 samples/hello_world 为例,构建并烧录:

$ west build -b decawave_dwm1001_dev samples/hello_world $ west flash

west build -b decawave_dwm1001_dev指定板卡,west flash会自动选择可用的 runner 完成烧录。烧录完成后,hello_world 会在串口上打印经典的 "Hello World!" 与 Zephyr 版本信息。

支持的烧录与调试后端(Runners)

board.cmake 声明了三种烧录后端及其参数:

board_runner_args(jlink "--device=nRF52832_xxAA" "--speed=4000" "--reset-after-load") board_runner_args(pyocd "--target=nrf52832") set(OPENOCD_NRF5_SUBFAMILY "nrf52") include(${ZEPHYR_BASE}/boards/common/jlink.board.cmake) include(${ZEPHYR_BASE}/boards/common/pyocd.board.cmake) include(${ZEPHYR_BASE}/boards/common/openocd-nrf5.board.cmake)
  • J-Link(默认优先):以nRF52832_xxAA为目标器件,SWD 时钟 4000 kHz,烧录后自动复位运行;
  • pyOCD:目标为nrf52832
  • OpenOCD:使用 nRF52 子系列配置。

三者均可通过west flash/west debug使用;也可以绕过 runner 直接使用 nrfjprog 手动烧录:

$ nrfjprog --eraseall -f nrf52 $ nrfjprog --program build/zephyr/zephyr.hex -f nrf52 $ nrfjprog --reset -f nrf52

调试与 RTT 输出

由于板载 J-Link OB,除 SWD 单步调试外,还可以使用 Segger RTT 查看控制台日志(配合 defconfig 中的CONFIG_USE_SEGGER_RTT=yCONFIG_RTT_CONSOLE=y)。这在虚拟串口被占用或需要低延迟日志时尤为实用。west debug可启动 J-Link 调试会话(如 Ozone / GDB 后端),具体配置沿用 nordic_segger 文档中的通用 Nordic 流程。

扩展阅读

  • 板卡设备树与分区:decawave_dwm1001_dev.dts
  • 引脚复用:decawave_dwm1001_dev-pinctrl.dtsi
  • 板级 Kconfig:Kconfig.decawave_dwm1001_dev、Kconfig.defconfig
  • 构建/烧录后端:board.cmake
  • DW1000 无线驱动:drivers/ieee802154/ieee802154_dw1000.c 与 寄存器定义
  • Nordic J-Link 工具链安装:doc/develop/flash_debug/nordic_segger.rst
  • Qorvo 板卡系列索引:boards/qorvo/index.rst

需要注意的是,以上构建与烧录流程适用于当前仓库版本所支持的 Zephyr 工具链环境;实际使用时请以仓库内west.yml声明的版本依赖为准。

  • 操作系统
  • 嵌入式
  • RTOS
  • 物联网

【免费下载链接】zephyr

Primary Git Repository for the Zephyr Project. Zephyr is a new generation, scalable, optimized, secure RTOS for multiple hardware architectures.

项目地址:https://gitcode.com/GitHub_Trending/ze/zephyr
点击查看免费下载

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询