ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

RIOT 对 nRF52840-Dongle 的支持:硬件特性、烧录流程与 STDIO 控制台完全指南

RIOT 对 nRF52840-Dongle 的支持:硬件特性、烧录流程与 STDIO 控制台完全指南 RIOT 对 nRF52840-Dongle 的支持硬件特性、烧录流程与 STDIO 控制台完全指南【免费下载链接】RIOTRIOT - The friendly OS for IoT项目地址: https://gitcode.com/GitHub_Trending/riot/RIOTnRF52840-Dongle 是 Nordic Semiconductor 推出的 USB 棒状开发板也是 RIOT 官方支持的轻量级 IoT 目标板之一。本文以 boards/nrf52840dongle/doc.md 为核心骨架结合该板在仓库中的真实板级配置board.h、periph_conf.h、Makefile.include等完整讲解其硬件资源、无独立调试器的 USB 引导烧录流程、SAUL 快速上手命令以及 CDC-ACM 虚拟串口控制台的获取与排错帮助读者从零开始在 RIOT 中编译、烧录并调试这块体积小巧却功能完备的开发板。一、板卡概览一块只有 nRF52840 自己的 USB 棒nRF52840-Dongle 是外形类似 USB 存储棒的裸板设备板上除了 nRF52840 芯片本身几乎别无他物。它同时提供BLE、802.15.4 与 USB三种连接能力非常适合做无线传感器节点、协议嗅探器或快速原型验证。与同类 USB 棒如 nRF52840-MDK不同这块板没有板载专用调试器programmer而是依赖芯片内置引导程序bootloader通过 USB 直接通信来完成烧录。这意味着你不需要 J-Link 之类的调试器硬件只需要一根 USB 线即可完成一切操作。板载外设精简但够用两颗 LEDLD1绿色与LD2RGB 三色一个用户按键SW1与一个复位按键15 个可配置外部引脚以边缘焊盘形式引出提示15 个可用外部引脚这一数字与芯片丰富的引脚资源并不矛盾——nRF52840 的大量引脚已被 USB、LED、按键及射频电路占用实际可自由布线的引脚为 15 个设计外接电路时需以此为上限。二、硬件规格nRF52840 的完整能力清单文档中给出的硬件参数表完整摘录如下这是评估应用可行性的第一手依据项目规格MCUnRF52840内核家族ARM Cortex-M4厂商Nordic SemiconductorRAM256 KiBFlash1 MiB主频64 MHzFPU浮点单元支持定时器5 个32 位RTC3 个ADC1 个 12 位8 通道UART2 个SPI4 个主机 / 3 个从机I2C2 个I2S1 个PWM4 组 × 4 通道射频2.4 GHz兼容 BLE输出功率 -20 dBm ~ 8 dBm接收灵敏度 -95 dBmVcc1.7 V – 5.5 V从板级配置确认外设引脚分配上述外设能力在仓库的 boards/nrf52840dongle/include/periph_conf.h 中都有真实的引脚级配置可以直接查阅确认UART使用NRF_UARTE0rx_pin GPIO_PIN(0, 13)、tx_pin GPIO_PIN(0, 15)。文档特别说明这块板没有显式的 UART 引脚此处是借用 P0.13/P0.15 提供易用的串口调试口详见下文STDIO一节。PWMNRF_PWM0的 4 个通道依次驱动 LD1 与 LD2 的红、绿、蓝三通道——即GPIO_PIN(0, 6)、GPIO_PIN(0, 8)、GPIO_PIN(1, 9)、GPIO_PIN(0, 12)。这也是为什么saul write一条命令就能让 LED 平滑地呼吸出任意颜色。SPINRF_SPIM0sclk P0.20、mosi P0.22、miso P0.24。I2CNRF_TWIM1scl P0.29、sda P0.31速率为I2C_SPEED_NORMAL。LED 与按键的引脚定义集中在 boards/nrf52840dongle/include/board.h符号引脚说明LED0_PINGPIO_PIN(0, 6)绿色 LED LD1LED1_PINGPIO_PIN(0, 8)LD2 红色通道LED2_PINGPIO_PIN(1, 9)LD2 绿色通道LED3_PINGPIO_PIN(0, 12)LD2 蓝色通道BTN0_PINGPIO_PIN(1, 6)用户按键 SW1GPIO_IN_PU上拉输入board.h还为每个 LED 通道提供了LEDx_ON/LEDx_OFF/LEDx_TOGGLE宏内部实现为gpio_clear/gpio_set/gpio_toggle注意该板 LED 为低电平点亮应用代码可以直接使用这些宏控制指示灯。三、快速开始一条命令完成编译、烧录与串口文档给出的最快上手路径如下# 编译 saul 示例、烧录固件并打开串口终端 make BOARDnrf52840dongle -C examples/basic/saul flash term若烧录环节出问题可先跳到下文烧录与引导程序一节排查其余情况此命令会一次完成交叉编译examples/basic/saul示例通过 USB 引导程序将固件烧入板内打开串口终端进入 RIOT Shell。进入 Shell 后执行 saul write 2 10 40 10此时LD2 会发出柔和的青绿色turquoise光芒。这正是 SAULSensor Actuator Uber Layer框架在板级驱动的直接体现写入的是 RGB 三通道的 PWM 占空比10/40/10 的组合恰好调出青色。SAUL 在板上的设备映射从 boards/nrf52840dongle/Makefile.dep 可以看到当启用saul_default时板级会自动追加三个模块ifneq (,$(filter saul_default,$(USEMODULE))) USEMODULE saul_gpio USEMODULE saul_pwm USEMODULE saul_nrf_vddh endifsaul_pwm将 PWM0 的四个通道即四路 LED注册为 SAUL 执行器因此saul write才能直接驱动 LED 颜色saul_gpio把按键注册为 SAUL 输入设备映射定义在 boards/nrf52840dongle/include/gpio_params.h名称为SW 1标志位为SAUL_GPIO_INVERTED按下时电平反转配合硬件上拉逻辑saul_nrf_vddh提供对 nRF52840 VDDH 电源轨的监测可在 Shell 中读取供电电压。四、烧录与引导程序nrfutil 驱动的 USB DFU 流程由于板载的是 Nordic 官方串行引导程序而非 RIOT 或第三方 bootloader烧录依赖 Nordic 的专有工具nrfutil# 安装 nrfutil较新版本为 Rust 实现命令如下 nrfutil install nrf5sdk-tools两点注意事项来自文档nrfutil 即使不执行install命令也会把自己安装到~/.nrfutil目录下早期基于 Python 的 nrfutil 版本已不再被 Nordic 维护且在Python 3.11上已经失效务必使用新版。烧录链路hex → zip → DFUnrfutil 的职责是把编译产物打包成引导程序可识别的 zip 包再经 USB 发给引导程序。这一整套流程已被封装进 RIOT 标准的make flash目标中板级细节在 boards/nrf52840dongle/Makefile.includePROGRAMMER ? nrfutil ROM_OFFSET 0x1000 ROM_LEN 0xdf000 FLASHFILE $(HEXFILE) FLASHDEPS $(HEXFILE).zip FLASHER nrfutil FFLAGS dfu usb-serial --port${PORT} --package$(HEXFILE).zip对应的打包规则%.hex.zip: %.hex $(FLASHER) pkg generate --hw-version 52 --sd-req 0x00 --application-version 1 --application $ $其中涉及三个关键内存布局参数含义如下ROM_OFFSET 0x1000应用起始地址从 0x1000 开始。引导程序所在的 MBRMaster Boot Record静态占用前 4 KiBROM_LEN 0xdf000应用区长度为 892 KiB。这是因为板载 Open USB Bootloader 占据了末尾的 128 KiB为应用留下约 892 KiB 空间--hw-version 52/--sd-req 0x00声明硬件版本为 52且不依赖 SoftDevice。换言之烧录 RIOT 固件会覆盖芯片上任何已有的 SoftDevice——文档明确指出这正是这块板最小可用示例的标准做法因为 RIOT 自带 BLE 协议栈无需 Nordic SoftDevice。如何进入引导程序引导程序在固件烧录前必须处于激活状态进入方式分两种情况如果板子上已经在运行 RIOT 固件make flash会自动重置 CPU 并切入引导程序无需手动干预。其底层机制是usb_board_reset模块——makefiles/tools/usb_board_reset.mk 中通过stty以1200 baud打开 ttyACM 设备来触发引导程序复位600 baud 则触发应用复位。如果运行的是其他固件或 RIOT 已崩溃需要手动按下板上的复位按键来进入引导程序。引导程序是否就绪以LD2 呈红色脉冲呼吸作为指示信号。值得注意的还有一个硬件设计细节从 boards/nrf52840dongle/reset.c 可以看到P0.19 引脚连接着芯片的 RESET 线。RIOT 的usb_board_reset_in_bootloader()正是把该引脚拉低来实现软复位进引导程序的/* P0.19 is connected to the RESET line */ #define BSP_SELF_PINRESET_PIN GPIO_PIN(0, 19) void usb_board_reset_in_bootloader(void) { gpio_init(BSP_SELF_PINRESET_PIN, GPIO_OUT); gpio_clear(BSP_SELF_PINRESET_PIN); }这个复位链路在 boards/common/nrf52/bootloader_nrfutil.dep.mk 中被自动接上只要启用了stdio_cdc_acm模块就会自动追加usb_board_reset模块从而让make flash具备自动复位进引导程序的能力。五、获取 STDIO 控制台CDC-ACM 虚拟串口与备用 UART默认方式USB 虚拟串口CDC-ACM这块板获取控制台的标准方式是模拟 USB 串口CDC-ACM。在 RIOT 中只要启用stdio_cdc_acm模块板子就会通过 USB 呈现一个/dev/ttyACM*虚拟串口设备文档强调除非显式启用了其他 stdio 模块否则该模块会自动生效。烧录完成后执行make term即可打开控制台make flash term会先烧录再开终端。关于 ModemManager 的已知问题在安装了ModemManager 1.10的 Linux 系统上make term可能在设备枚举后的几秒内失败。这是 ModemManager 与 CDC-ACM 设备交互的已知问题已在 1.12.4 版本修复在更早版本中通常也只是短暂的一次性打扰稍等重试即可。备用 UART 调试口为了降低调试难度板级把P0.13 与 P0.15 分别配置为 RX 与 TX对应periph_conf.h中NRF_UARTE0的rx_pin/tx_pin。它们的双重用途是在未启用 CDC-ACM 时作为 stdio 的承载串口启用了 CDC-ACM 时作为可自由使用的自定义 UART例如连接外设或接 USB-TTL 转接器输出日志。应用开发提示由于 UART0 默认被 stdio 占用若业务代码需要额外串口应从uart_config[]之外的能力出发或按需在periph_conf.h基础上评估引脚复用涉及修改板级配置时请以当前仓库的 boards/nrf52840dongle 目录为准。六、支持的平台特性一览从 boards/nrf52840dongle/Makefile.features 可以确认该板在 RIOT 构建系统中声明的能力CPU_MODEL nrf52840xxaa FEATURES_PROVIDED periph_i2c FEATURES_PROVIDED periph_pwm FEATURES_PROVIDED periph_uart FEATURES_PROVIDED periph_usbdev FEATURES_PROVIDED periph_spi FEATURES_PROVIDED vdd_lc_filter_reg0 FEATURES_PROVIDED vdd_lc_filter_reg1 FEATURES_PROVIDED highlevel_stdio这串列表意味着I2C、PWM、UART、USB 设备、SPI 外设驱动均可用vdd_lc_filter_reg0/1表示片上稳压器低泄漏滤波寄存器可用SAUL 的saul_nrf_vddh电压监测即依赖于此highlevel_stdio表示支持高层 stdio如 CDC-ACM而非仅限低层串口。在 Kconfig 层面boards/nrf52840dongle/Kconfig 通过BOARD_COMMON_NRF52与CPU_MODEL_NRF52840XXAA完成与 nRF52 公共板级及具体芯片型号的关联。七、总结nRF52840-Dongle 在 RIOT 中的支持是一套完整的无调试器开发方案硬件层面nRF52840Cortex-M4 64 MHz、256 KiB RAM、1 MiB Flash加上 BLE/802.15.4/USB 三合一连接能力LED、按键、PWM、UART、SPI、I2C 引脚配置在 board.h 与 periph_conf.h 中一目了然烧录层面基于 Nordic 官方引导程序 nrfutil 的 DFU 链路Makefile.include配合usb_board_reset实现烧录即自动复位进引导程序仅在外部固件或崩溃场景下需要手动按复位键交互层面stdio_cdc_acm提供开箱即用的虚拟串口控制台P0.13/P0.15 作为备用 UART 调试口SAUL 让 LED 与按键通过 Shell 命令即可直接操控。对于希望以最低硬件成本快速体验 RIOT 无线与网络能力的开发者而言make BOARDnrf52840dongle -C examples/basic/saul flash term就是全部起点。【免费下载链接】RIOTRIOT - The friendly OS for IoT项目地址: https://gitcode.com/GitHub_Trending/riot/RIOT创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表