news 2026/9/21 0:05:34

Zephyr RTOS 中的 RAK4631 WisBlock 板级支持:硬件特性、引脚映射与 J-Link 烧录调试指南

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Zephyr RTOS 中的 RAK4631 WisBlock 板级支持:硬件特性、引脚映射与 J-Link 烧录调试指南

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_ALIASgpio_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 被使能:

  • UART0nordic,nrf-uart):TX=P0.20、RX=P0.19,用于与底板上 USB 转串口芯片通信,即文档所述的/dev/ttyACM0调试串口;
  • UART1nordic,nrf-uarte):TX=P0.16、RX=P0.15,作为默认控制台/Shell 输出通道。

两路串口波特率均为 115200。引脚控制文件 rak4631_nrf52840-pinctrl.dtsi 中为每路 UART 都定义了defaultsleep两组 pinctrl 状态,其中 sleep 状态带有low-power-enable标志,用于在低功耗模式下将引脚置于省电状态。

I2C / SPI / QSPI 与 SX1262 LoRa 射频

板载外设总线在设备树中配置如下:

  • I2C0nordic,nrf-twi):SDA=P0.13、SCL=P0.14,已使能,可用于挂载 WisBlock 传感器模块;
  • I2C1nordic,nrf-twi):SDA=P0.24、SCL=P0.25,设备树中默认关闭(status被注释掉),因为I2C1 与 SPI1 存在引脚复用冲突,二者不能同时使用
  • SPI1nordic,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-gpiosP1.6(低有效)SX1262 硬件复位引脚
busy-gpiosP1.14(高有效)SX1262 忙状态检测引脚,SPI 通信前需查询
rx-enable-gpiosP1.5(低有效)接收通道使能(配合 RF 开关)
dio1-gpiosP1.15(高有效)中断输出引脚,用于收发完成/超时中断
dio2-tx-enable由 DIO2 控制 TX/RX 射频开关
dio3-tcxo-voltageSX126X_DIO3_TCXO_3V3通过 DIO3 输出 3.3V 供电给 TCXO 晶振
tcxo-power-startup-delay-ms5TCXO 上电稳定等待时间
spi-max-frequency1000000SPI 时钟频率 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);
  • 电源&reg1配置为 DCDC 模式(NRF5X_REG_MODE_DCDC),以实现更优的转换效率;
  • UICRgpio-as-nreset(将 GPIO 用作复位引脚)与nfct-pins-as-gpios(将 NFC 引脚释放为普通 GPIO);
  • USBzephyr_udc0指向&usbdnordic,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 软件

  1. 从 Segger 官网的 "J-Link Software and Documentation Pack" 下载对应 Linux 版本并安装;
  2. 确保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 flash

west 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 debug

west 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 等外设,lora0led0等别名简化了应用层开发。烧录调试链路以 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),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/21 0:03:11

AI技能模块架构解析与协同办公实践

1. 项目背景与核心价值上周五深夜&#xff0c;当我正在调试一个复杂的客户需求文档时&#xff0c;团队新来的AI助手突然弹出一条消息&#xff1a;"需要我帮你整理这份文档的版本差异吗&#xff1f;"这个简单的询问背后&#xff0c;是我们最新部署的SKILLS能力模块在发…

作者头像 李华
网站建设 2026/9/21 0:02:16

OpenResearch:构建可复现的开放式研究工作流

第一次看到“OpenResearch”这个名字&#xff0c;我脑子里冒出的不是某个具体软件&#xff0c;而更像一种研究方式的宣言&#xff1a;开放、可复现、可验证。这三件事放在一起&#xff0c;其实比大多数人想象中难得多。过去几年我一直在折腾自己的研究工作流&#xff0c;从纯纸…

作者头像 李华
网站建设 2026/9/20 23:56:54

C++和OpenCV车牌识别实战:从定位到识别的完整流程

简介&#xff1a;C结合OpenCV实现的车牌识别系统&#xff0c;是一份面向计算机视觉初学者与智能交通项目开发者的完整工程资料&#xff0c;适用于高速公路收费、停车场管理、城市交通监控等场景的学习与原型验证。系统贯穿图像采集、预处理、车牌定位、字符分割、字符识别全流程…

作者头像 李华
网站建设 2026/9/20 23:56:41

大华Java SDK迁移SpringBoot完整实践:从库加载到设备管理

1. 迁移前的整体判断与方案选型 1.1 大华Java SDK到底是个什么东西 先聊一个基本认知问题。大华官方提供的Java SDK&#xff0c;表面上看是一堆 .jar 包加几个 .dll 或 .so 文件&#xff0c;但它的核心底层其实是C实现的native库&#xff0c;Java层通过JNA技术去调用。…

作者头像 李华