Zephyr RTOS 中的 RAK4631 WisBlock 板级支持:硬件特性、引脚映射与 J-Link 烧录调试指南
【免费下载链接】zephyrPrimary 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
RAK4631 是 RAK WisBlock 生态中的 LPWAN 核心模块(WisBlock Core),将 Nordic nRF52840(支持 Bluetooth 5.0/BLE)与 Semtech SX1262 LoRa 收发器合二为一,成为面向远距离、低功耗物联网节点的通信解决方案。本文基于 Zephyr 仓库中 RAK4631 的板级支持文件(boards/rakwireless/rak4631)与官方板卡文档(boards/rakwireless/rak4631/doc/index.rst),完整介绍该板卡的硬件规格、Zephyr 设备树中的外设与引脚映射、支持的板级功能,以及通过 Segger J-Link 完成烧录与调试的完整实操流程。读完本文,你将能够从零开始构建并烧录 Zephyr 应用(如 hello_world)到 RAK4631,并掌握其底层外设配置原理。
RAK4631 模块概览与定位
RAK4631 是 RAK WisBlock 体系中的核心模块(WisBlock Core)。WisBlock 采用积木式设计:核心模块(Core)负责计算与无线通信,各类传感器、显示、接口模块(Sensor/IO 模块)通过标准连接器叠加在 WisBlock Base 底板上。RAK4631 正是这个体系中的"大脑"与"通信中枢"。
其最突出的特点是双无线架构:
- Nordic nRF52840:ARM Cortex-M4F 处理器,主频 64 MHz,支持 Bluetooth 5.0(BLE),同时提供丰富的外设接口;
- Semtech SX1262:新一代 LoRa 收发器,相比上一代 SX127x 系列,在相同发射功率下功耗更低,这正是 RAK4631 被称为超低功耗通信方案的根基。
将 BLE 与 LoRa 组合在同一核心模块上,使得节点既可以借助 BLE 进行本地近场配置、OTA 升级或短距数据传输,又可以通过 LoRa 实现数公里级、低功耗的远距离上行链路——这是典型的 LPWAN 物联网节点形态。
Zephyr RTOS 对该模块提供了完整的板级支持,板卡标识符为rak4631/nrf52840,意味着可以在不修改任何板级配置的情况下直接构建并运行 Zephyr 应用。
硬件规格
根据板卡文档(boards/rakwireless/rak4631/doc/index.rst),RAK4631 的硬件特性如下:
- 处理器:nRF52840 ARM Cortex-M4F,64 MHz CPU 时钟
- USB:1 个 Micro-AB USB OTG 主机/设备接口
- LoRa:Semtech SX1262 低功耗、高增益 LoRa 收发器
- 天线:LoRa 天线与 BLE 天线各配备 iPEX 连接器
- 接口:I2C、UART、GPIO、ADC 等多种接口
- 指示灯:RAK5005 底板(WisBlock Base)上提供 2 颗用户 LED
- 供电:可通过 Micro USB、3.7V 可充电电池或 5V 太阳能电池板接口供电
需要注意的是,RAK4631 模块本身无法独立工作——要使用它,至少需要一块WisBlock Base 底板(如 RAK5005)。底板既是 RAK4631 的供电来源,也承担编程/调试接口(USB 转串口与 SWD 调试)的功能。Zephyr 文档中提到的 2 颗用户 LED(LED1/LED2)实际位于 RAK5005 底板上,而非核心模块上。
从 Zephyr 的板卡定义(boards/rakwireless/rak4631/board.yml)可以看到官方登记的硬件资源:flash 1024 KB、RAM 256 KB,架构为 ARM(Cortex-M4F),支持的 Zephyr 外设包括 adc、bluetooth、counter、gpio、i2c、pwm、usb_device、watchdog、lora。
支持的 Zephyr 功能
Zephyr 通过设备树(Devicetree)与 Kconfig 两层机制来声明板卡能力。RAK4631 在 Zephyr 中支持的外设由 boards/rakwireless/rak4631/rak4631_nrf52840.yaml 中的supported字段声明:
| 功能分类 | 支持情况 |
|---|---|
| ADC | 支持(nRF52840 SAADC) |
| Bluetooth | 支持(BLE 5.0) |
| Counter | 支持 |
| GPIO | 支持 |
| I2C | 支持(两路 TWI) |
| PWM | 支持 |
| USB Device | 支持(nRF USB 设备控制器) |
| Watchdog | 支持 |
| LoRa | 支持(Semtech SX1262) |
板卡默认固件配置位于 boards/rakwireless/rak4631/rak4631_nrf52840_defconfig,启用了几项基础能力:
CONFIG_ARM_MPU=y:启用 ARM MPU(内存保护单元)CONFIG_HW_STACK_PROTECTION=y:启用硬件栈保护CONFIG_USE_SEGGER_RTT=y:启用 Segger RTT(配合 J-Link 使用)CONFIG_GPIO=y/CONFIG_SERIAL=y/CONFIG_CONSOLE=y/CONFIG_UART_CONSOLE=y:GPIO、串口与 UART 控制台
而在 boards/rakwireless/rak4631/Kconfig.rak4631 中,BOARD_RAK4631选择SOC_NRF52840_QIAA,即 nRF52840 QIAA 封装(QFN-73,与 QIA A 变体对应)。
连接与 IO 映射(设备树解读)
Zephyr 对 RAK4631 的引脚定义集中在设备树源文件 boards/rakwireless/rak4631/rak4631_nrf52840.dts 与引脚控制文件 boards/rakwireless/rak4631/rak4631_nrf52840-pinctrl.dtsi 中。
LED 引脚
板卡文档中记录的 2 颗用户 LED(位于 RAK5005 底板上)在设备树中被声明为gpio-leds:
- LED1(绿色)= P1.3
- LED2(蓝色)= P1.4
设备树中对应节点为:
leds { compatible = "gpio-leds"; blue_led: led_2 { gpios = <&gpio1 4 GPIO_ACTIVE_LOW>; label = "Blue LED"; }; green_led: led_1 { gpios = <&gpio1 3 GPIO_ACTIVE_LOW>; label = "Green LED"; }; };注意两个 LED 均为GPIO_ACTIVE_LOW,即低电平点亮。别名(aliases)中led0指向蓝色 LED(P1.4),led1通过 Zephyr 的 LED API 惯例可对应绿色 LED(P1.3)。应用代码使用DT_ALIAS或gpio_dt_spec即可轻松控制。
串口(UART)
设备树中chosen节点将系统控制台、shell、mcumgr 及蓝牙监控串口统一指向uart1:
chosen { zephyr,console = &uart1; zephyr,shell-uart = &uart1; zephyr,uart-mcumgr = &uart1; zephyr,bt-mon-uart = &uart1; zephyr,bt-c2h-uart = &uart1; };实际有两路 UART 被使能:
- UART0(
nordic,nrf-uart):TX=P0.20、RX=P0.19,用于与底板上 USB 转串口芯片通信,即文档所述的/dev/ttyACM0调试串口; - UART1(
nordic,nrf-uarte):TX=P0.16、RX=P0.15,作为默认控制台/Shell 输出通道。
两路串口波特率均为 115200。引脚控制文件 rak4631_nrf52840-pinctrl.dtsi 中为每路 UART 都定义了default与sleep两组 pinctrl 状态,其中 sleep 状态带有low-power-enable标志,用于在低功耗模式下将引脚置于省电状态。
I2C / SPI / QSPI 与 SX1262 LoRa 射频
板载外设总线在设备树中配置如下:
- I2C0(
nordic,nrf-twi):SDA=P0.13、SCL=P0.14,已使能,可用于挂载 WisBlock 传感器模块; - I2C1(
nordic,nrf-twi):SDA=P0.24、SCL=P0.25,设备树中默认关闭(status被注释掉),因为I2C1 与 SPI1 存在引脚复用冲突,二者不能同时使用; - SPI1(
nordic,nrf-spi):SCK=P1.11、MOSI=P1.12、MISO=P1.13,片选 CS 为 P1.10(低有效),已使能; - QSPI:已使能,引脚 SCK=P0.3、IO0=P0.30、IO1=P0.29、IO2=P0.28、IO3=P0.2、CSN=P0.26,用于连接外部 SPI NOR Flash。
SX1262 LoRa 收发器通过 SPI1 挂载,设备树节点为lora@0:
lora: lora@0 { compatible = "semtech,sx1262"; reg = <0>; reset-gpios = <&gpio1 6 GPIO_ACTIVE_LOW>; busy-gpios = <&gpio1 14 GPIO_ACTIVE_HIGH>; rx-enable-gpios = <&gpio1 5 GPIO_ACTIVE_LOW>; dio1-gpios = <&gpio1 15 GPIO_ACTIVE_HIGH>; dio2-tx-enable; dio3-tcxo-voltage = <SX126X_DIO3_TCXO_3V3>; tcxo-power-startup-delay-ms = <5>; spi-max-frequency = <1000000>; };各属性的实际含义:
| 属性 | 引脚/取值 | 说明 |
|---|---|---|
reset-gpios | P1.6(低有效) | SX1262 硬件复位引脚 |
busy-gpios | P1.14(高有效) | SX1262 忙状态检测引脚,SPI 通信前需查询 |
rx-enable-gpios | P1.5(低有效) | 接收通道使能(配合 RF 开关) |
dio1-gpios | P1.15(高有效) | 中断输出引脚,用于收发完成/超时中断 |
dio2-tx-enable | — | 由 DIO2 控制 TX/RX 射频开关 |
dio3-tcxo-voltage | SX126X_DIO3_TCXO_3V3 | 通过 DIO3 输出 3.3V 供电给 TCXO 晶振 |
tcxo-power-startup-delay-ms | 5 | TCXO 上电稳定等待时间 |
spi-max-frequency | 1000000 | SPI 时钟频率 1 MHz |
宏SX126X_DIO3_TCXO_3V3来自 dts/dt-bindings/lora/sx126x.h(该文件在仓库中位于 include/zephyr/dt-bindings/lora/sx126x.h 对应的绑定目录下)。这些配置与 Zephyr 的 LoRa 子系统(subsys/lorawan)及semtech,sx1262驱动(drivers/lora 目录下的 sx126x 实现)配合,提供完整的 LoRa 收发送收发能力。lora0别名使得应用可通过DEVICE_DT_GET(DT_ALIAS(lora0))获取设备句柄。
其他外设
- ADC:
&adc已使能(SAADC); - 电源:
®1配置为 DCDC 模式(NRF5X_REG_MODE_DCDC),以实现更优的转换效率; - UICR:
gpio-as-nreset(将 GPIO 用作复位引脚)与nfct-pins-as-gpios(将 NFC 引脚释放为普通 GPIO); - USB:
zephyr_udc0指向&usbd(nordic,nrf-usbd),支持 USB 设备功能。
编程与调试:J-Link 烧录与调试完整流程
硬件连接前提
RAK4631 需插在 WisBlock Base 底板上,底板提供 USB 调试口与 SWD 接口。板卡文档(boards/rakwireless/rak4631/doc/index.rst)明确要求连接Segger J-Link OB 调试器(即底板板载的 J-Link OB),它提供对 nRF52840 芯片的调试接口,可使用 JLink 与芯片通信。
第一步:安装 J-Link 软件
- 从 Segger 官网的 "J-Link Software and Documentation Pack" 下载对应 Linux 版本并安装;
- 确保
JLinkExe可执行文件在系统 PATH 中可用(Zephyr 的 west flash/debug 命令会调用它)。
第二步:打开串口监视终端
在 Linux 下,调试串口设备节点为/dev/ttyACM0。可使用 minicom 监听输出:
$ minicom -D /dev/ttyACM0 -o参数说明:
-D /dev/ttyACM0:指定串口设备;-o:不发送 modem 初始化字符串。
连接参数必须设置为:
| 参数 | 值 |
|---|---|
| 波特率 | 115200 |
| 数据位 | 8 |
| 校验位 | None |
| 停止位 | 1 |
第三步:构建并烧录 hello_world
连接 RAK4631 到主机的 USB 调试口后,即可构建并烧录 Zephyr 的hello_world示例(samples/hello_world):
$ west build -b rak4631/nrf52840 samples/hello_world $ west flashwest build中的-b rak4631/nrf52840即板卡标识符。烧录由 boards/rakwireless/rak4631/board.cmake 中声明的 runner 完成:
board_runner_args(jlink "--device=nRF52840_xxAA" "--speed=4000") board_runner_args(pyocd "--target=nrf52840" "--frequency=4000000") include(${ZEPHYR_BASE}/boards/common/nrfutil.board.cmake) include(${ZEPHYR_BASE}/boards/common/nrfjprog.board.cmake) 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)可以看到该板卡同时支持jlink、nrfutil、nrfjprog、pyocd、openocd-nrf5多种烧录方式,其中 jlink runner 默认使用nRF52840_xxAA设备名与 4000 kHz 速度。默认 runner 由 west 环境决定(通常为 jlink)。
烧录成功后,终端应输出:
Hello World! rak4631_nrf52840其中rak4631_nrf52840是 Zephyr 板卡模型名,来源于设备树的model属性("RAKWireless RAK4631 WisBlock LPWAN Module with a Nordic NRF52840 SoC")对应的 CONFIG_BOARD 字符串。
第四步:调试
使用 Zephyr 标准的调试流程,以 hello_world 为例:
$ west build -b rak4631/nrf52840 samples/hello_world $ west debugwest debug会启动 GDB 并连接 J-Link,进入交互式调试会话,支持断点、单步、内存查看等常规调试操作。板卡默认固件已启用CONFIG_USE_SEGGER_RTT=y,因此在调试会话中还可以配合 RTT Viewer 查看 RTT 日志,作为串口控制台之外的补充输出通道。
小结
RAK4631 在 Zephyr 中是一个"开箱即用"的 BLE + LoRa 双模 LPWAN 板卡:设备树完整声明了 SX1262 LoRa 收发器(SPI1 挂载)、两路 UART、两路 I2C、QSPI、USB、ADC 等外设,lora0、led0等别名简化了应用层开发。烧录调试链路以 Segger J-Link OB 为默认方案,同时兼容 nrfutil、pyocd、openocd 等 runner。
对于开发者而言,掌握本文的引脚映射与设备树结构,即可在此基础上为 RAK4631 编写 LoRaWAN 节点应用(参见 samples/subsys 中的 LoRaWAN 相关示例)、BLE 应用或复合应用,并结合 RAK WisBlock 丰富的传感器模块快速搭建完整的物联网节点原型。
【免费下载链接】zephyrPrimary 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),仅供参考