拓冰建站拓冰建站
首页 / 资讯中心 / 正文

Zephyr RTOS 中 Ezurio RM1xx 开发板(rm1xx_dvk)支持详解:LoRa+BLE 双射频模块的驱动、烧录与调试

Zephyr RTOS 中 Ezurio RM1xx 开发板rm1xx_dvk支持详解LoRaBLE 双射频模块的驱动、烧录与调试【免费下载链接】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本篇指南基于 Zephyr 仓库中 boards/ezurio/rm1xx_dvk 目录下的板级文档与配套源码系统讲解 Ezurio RM1xxRM186/RM191LoRaBLE 双射频开发板在 Zephyr 中的完整支持情况硬件特性与外设引脚映射、内部存储与 LoRa 射频配置、设备树中 SPI 双从设备的共享总线设计以及通过 nrfjprog/J-Link 烧录和调试的实操流程。读完本文后你可以独立完成rm1xx_dvk目标板的构建、烧录、调试并理解其设备树中 LoRa 与 SPI NOR 存储共享总线、Flash 分区布局等关键实现细节。一、板级概述RM1xx 模块与 DVK 开发板RM1xx 是 Ezurio 提供的一款同时集成 LoRa 与 BLE 通信能力的小型模块核心硬件构成为主控Nordic Semiconductor nRF51822ARM Cortex-M0 CPUBLE 无线电与内核一体LoRa 射频前端Semtech SX1272收发器芯片版本区分RM191工作在 915MHz LoRa 频段美洲RM186工作在 868MHz LoRa 频段欧洲。RM1xx 模块安装在配套的 RM1xx 开发板DVK上进行开发。该开发板提供的 Zephyr 可用特性包括ADC模数转换器CLOCK时钟FLASH闪存GPIO通用输入输出I2CTWI 控制器NVIC嵌套向量中断控制器PWM脉宽调制RADIOBluetooth Low Energy 无线电RTCnRF RTC 系统时钟Segger RTTRTT 控制台SPI串行外设接口UART通用异步收发器WDT看门狗定时器在 Zephyr 中该板子以rm1xx_dvk为板级标识BOARDname: rm1xx_dvk厂商目录为ezurio。从 board.yml 可以看到其板级元数据board: name: rm1xx_dvk full_name: RM1xx DVK vendor: ezurio socs: - name: nrf51822而 Kconfig.rm1xx_dvk 中将其映射到 nRF51822 的 QFAC 封装 SoCconfig BOARD_RM1XX_DVK select SOC_NRF51822_QFAC模块的更多硬件资料可参考原板级文档中给出的 Ezurio RM1xx 产品页与 Nordic Semiconductor Infocenter 处理器数据手册外部链接以厂商官方页面为准。二、时钟硬件RM1xx 模块内部有两个振荡器慢时钟Slow clock32.768 kHz主时钟Main clock16 MHz。这是 nRF51 系列的典型时钟配置低功耗慢时钟用于 RTC 与 Sleep 模式计时主时钟作为 Cortex-M0 内核运行时钟基准。三、连接与 IO按钮与 GPIO 扩展器3.1 板载按钮开发板上的按钮定义非常简洁仅有BUTTON2 SW0 P0.05这一点与设备树完全对应。在 rm1xx_dvk.dts 中buttons { compatible gpio-keys; button2: button_2 { gpios gpio0 5 (GPIO_PULL_UP | GPIO_ACTIVE_LOW); label Push button switch 2 (BUTTON2); zephyr,code INPUT_KEY_0; }; };即 BUTTON2 接在P0.05上内部上拉、低电平有效并映射为 input 子系统的INPUT_KEY_0键值。同时板级设备树通过别名保证与 Zephyr 示例程序的兼容性aliases { sw0 button2; lora0 lora0; watchdog0 wdt0; };这意味着可以直接使用DT_ALIAS(sw0)、DT_ALIAS(lora0)、DT_ALIAS(watchdog0)在 C 代码中引用这些节点无需硬编码设备标签。3.2 MCP23S08 SPI GPIO 扩展器开发板上还配有一颗Microchip MCP23S08 SPI 端口扩展器用于扩展 IO 数量。需要注意Zephyr 官方文档明确说明该芯片目前尚不受 Zephyr 支持因此在 Zephyr 应用中无法直接以标准 GPIO 接口驱动该扩展器如需使用需自行编写驱动或按 MCP23S08 数据手册通过 SPI 寄存器操作。四、设备树深度解析SPI 总线共享、存储分区与 LoRa 配置设备树是理解该板级支持最核心的部分以下逐块解析 rm1xx_dvk.dts。4.1 chosen 节点与默认设备chosen { zephyr,console uart0; zephyr,shell-uart uart0; zephyr,bt-mon-uart uart0; zephyr,bt-c2h-uart uart0; zephyr,sram sram0; zephyr,flash flash0; zephyr,code-partition slot0_partition; };控制台、Shell、蓝牙监控/控制器到主机 UART 全部走uart0主 Flash 为flash0nRF51822 内部 256KB Flash代码分区为slot0_partition。4.2 外设使能与引脚复用设备树中显式使能了以下外设均带 default/sleep 两组 pinctrlgpiote、gpio0GPIOTE 事件引擎与 P0 端口i2c0nordic,nrf-twi兼容SDAP0.30、SCLP0.29见 rm1xx_dvk-pinctrl.dtsiuart0nordic,nrf-uart兼容波特率 115200current-speed 115200TXP0.21、RXP0.22、RTSP0.23、CTSP0.24spi0注意设备树注释SPI0 cannot be used with I2C0即 SPI0 与 I2C0 引脚复用冲突因此 spi0默认未置status okay禁用但其 CS 脚为 P0.04spi1默认使能SCKP0.11、MOSIP0.09、MISOP0.10两个 CS 片选脚P0.02 与 P0.08均为低电平有效、上拉。引脚复用细节全部集中在 rm1xx_dvk-pinctrl.dtsi其中 i2c0_default / i2c0_sleep / spi0_default / spi0_sleep / spi1_default / spi1_sleep / uart0_default / uart0_sleep 八组 pinctrl 节点完整定义了默认与低功耗两种状态下的引脚选择sleep 状态均带low-power-enable属性便于系统休眠时释放或保持引脚。4.3 SPI1 总线上的两个从设备EEPROM 与 LoRa这是本板级设计中最值得关注的部分——512KB 的 Adesto AT25DF041B SPI NOR 存储与 Semtech SX1272 LoRa 收发器共享同一条 SPI1 总线通过两个不同的 CS 脚P0.02 对应 CS0reg 0P0.08 对应 CS1reg 1区分从设备at25: at25df041b0 { compatible jedec,spi-nor; reg 0; spi-max-frequency 1000000; jedec-id [1f 44 02]; size 0x400000; has-lock 0xbc; has-dpd; t-enter-dpd 500; t-exit-dpd 20; }; lora0: lora1 { compatible semtech,sx1272; reg 1; reset-gpios gpio0 7 GPIO_ACTIVE_HIGH; dio-gpios gpio0 12 GPIO_ACTIVE_HIGH, gpio0 13 GPIO_ACTIVE_HIGH, gpio0 14 GPIO_ACTIVE_HIGH, gpio0 15 GPIO_ACTIVE_HIGH, gpio0 16 GPIO_ACTIVE_HIGH, gpio0 1 GPIO_ACTIVE_HIGH; rfi-enable-gpios gpio0 19 GPIO_ACTIVE_HIGH; rfo-enable-gpios gpio0 18 GPIO_ACTIVE_HIGH; spi-max-frequency 1000000; };关键参数说明at25AT25DF041Bcompatible jedec,spi-nor即由 Zephyr 的 spi-nor 驱动直接支持无需自定义驱动JEDEC ID 为1f 44 02容量0x4000004MB 512KB支持写保护锁has-lock与掉电深度休眠DPD进入 500µs / 退出 20µsSPI 最大时钟 1MHz。文档特别提示由于 EEPROM 与 SX1272 共享 SPI 总线应优先保证 LoRa 射频的总线访问优先级LoRa 收发对时序敏感存储读写相对可以容忍等待。lora0SX1272compatible semtech,sx1272可直接使用 Zephyr 的 LoRa 射频驱动框架RESET 脚 P0.07DIO0~DIO5 分别对应 P0.12/P0.13/P0.14/P0.15/P0.16/P0.01RF 前端还有 rfiP0.19/rfoP0.18两个使能 GPIO用于切换射频前端路径。SPI 时钟同样限制在 1MHz。4.4 内部 Flash 分区与外置存储分区nRF51822 内部 256KB Flash 被划分为三部分总容量 0x40000 256KB分区标签起始大小用途boot_partitionmcuboot0x0000052KB (0xC000)MCUboot 引导加载slot0_partitionimage-00x0C000188KB (0x30000)主应用镜像code-partitionstorage_partitionstorage0x3C00016KB (0x4000)FCB/LittleFS/NVS 存储外置 AT25DF041B4MB上则划分了0x00000~0x30000188KB 预留为 slot1对应 MCUboot 的备用镜像区支持 A/B 双区升级时占用外置 NOR 的等长空间lfs_partitionlfs_storage0x30000 起 68KB供 LittleFS 等文件系统使用。这一布局说明该板级目标明确面向MCUboot 双区 OTA场景应用镜像在内部 Flash 的 image-0slot1 镜像放置在外置 SPI NOR 上配合 16KB storage 分区存放 FCBFile System Control Block。4.5 DTC 警告抑制pre_dt_board.cmake 中加入# Suppress unique_unit_address_if_enabled to handle the following overlaps: # - power40000000 clock40000000 nrf-mpu40000000 list(APPEND EXTRA_DTC_FLAGS -Wno-unique_unit_address_if_enabled)原因是 nRF51 外设中 power/clock/nrf-mpu 三个节点共用 0x40000000 基址属于 nRF51 设备树的固有重叠通过关闭该 dtc 检查避免编译期警告。五、defconfig最小化默认配置r m1xx_dvk_defconfig 内容非常精简只启用串口控制台所必需的基础项# enable GPIO CONFIG_GPIOy # enable uart driver CONFIG_SERIALy # enable console CONFIG_CONSOLEy CONFIG_UART_CONSOLEy即默认配置下保证 GPIO、UART 驱动与控制台可用其余LoRa、I2C、SPI NOR、BLE 等按需在各应用的 prj.conf 中开启。Kconfig.defconfig 中BOARD_RM1XX_DVK分支当前为空表示没有板级自动附加的 Kconfig 选项。六、烧录与调试Programming and Debuggingboard.cmake 声明了三个调试/烧录 runner 及其参数board_runner_args(nrfjprog --nrf-familyNRF51) board_runner_args(jlink --devicenRF51822_xxAC --speed4000) include(${ZEPHYR_BASE}/boards/common/nrfutil.board.cmake) include(${ZEPHYR_BASE}/boards/common/nrfjprog.board.cmake) include(${ZEPHYR_BASE}/boards/common/jlink.board.cmake)nrfjprogNordic 官方烧录工具识别芯片族为 NRF51J-Link (jlink)Segger J-Link 调试器目标器件nRF51822_xxACSWD 速度 4000 kHznrfutilNordic 工具链包含 DFU 等能力。6.1 烧录流程以 hello_world 为例按 Zephyr 文档中 nordic_segger 相关章节安装并配置 Segger J-Link 驱动及 nrfjprog 等工具该板通过板载 Segger 调试接口连接主机先用终端程序监听串口输出nRF51822 的 UART0115200 波特率$ minicom -D tty_device -b 115200其中tty_device替换为开发板实际串口号Linux 下通常为/dev/ttyACM0以rm1xx_dvk为 BOARD 构建并烧录 hello_world 示例典型 west 命令为$ west build -b rm1xx_dvk samples/hello_world $ west flash --runner nrfjprog也可使用--runner jlink走 J-Link 通道。6.2 调试调试同样依赖 Segger 工具链J-Link / nrfjprog / RTTZephyr 文档中该板列出的支持 runner 即上述三者。RTT 控制台在板级特性列表中被明确支持Segger RTT可在无 UART 引脚可用时作为输出通道。七、要点回顾rm1xx_dvk板级目标对应 Ezurio RM186868MHz/RM191915MHzLoRaBLE 模块 开发板SoC 为 nRF51822Cortex-M016MHz 主时钟 / 32.768kHz 慢时钟设备树将 AT25DF041B SPI NOR 与 SX1272 LoRa 挂在同一 SPI1 总线的两个 CS 上LoRa 侧使用 Zephyrsemtech,sx1272兼容驱动存储侧使用通用jedec,spi-nor驱动两者均为框架内现成驱动无需板级自定义代码SPI0 与 I2C0 引脚冲突spi0 默认禁用——移植自定义外设时注意选择 spi1Flash 分区为 MCUboot A/B 升级设计image-0188KB在内部 Flashslot1 预留区与 LittleFS 分区68KB在外置 4MB NOR 上烧录/调试走 nrfjprog 与 J-LinkdevicenRF51822_xxAC串口控制台默认 115200 波特率UART0TXP0.21/RXP0.22。主要参考文件板级文档、板级设备树、引脚复用文件、默认配置、runner 配置。【免费下载链接】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),仅供参考
分享:

看完干货,该让你的企业上线了

免费需求沟通 · 48 小时内出具建站方案 · 河南本地可上门