ARTICLE DETAIL

资讯详情

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

在 RIOT 中为 Nordic nRF51DK 开发板烧录固件:DAPLink 升级与 OpenOCD 使用指南

在 RIOT 中为 Nordic nRF51DK 开发板烧录固件:DAPLink 升级与 OpenOCD 使用指南 在 RIOT 中为 Nordic nRF51DK 开发板烧录固件DAPLink 升级与 OpenOCD 使用指南【免费下载链接】RIOTRIOT - The friendly OS for IoT项目地址: https://gitcode.com/GitHub_Trending/riot/RIOTnRF51 DK 是 Nordic 基于 nRF51 系列 SoC 推出的低成本单板开发套件面向 Bluetooth low energyBLE、ANT 和 2.4GHz 私有协议应用。本指南围绕 RIOT 仓库中 boards/nrf51dk/doc.md 的技术说明展开讲解如何解决板载 J-Link 调试器 UART 半工问题的思路、将板载烧录器固件升级为 DAPLink 的具体步骤以及如何在任意 RIOT 应用目录下用BOARDnrf51dk make flash一步完成烧录。读完本文你将掌握 nRF51DK 在 RIOT 下的板级资源布局、烧录工具链选型与完整的刷机/烧录操作流程。板级概览nRF51DK 与 RIOT 的适配基础nRF51 DK 采用 nRF51 系列 SoC具体型号为 nrf51x22xxac见 boards/nrf51dk/Makefile.features是一块低成本、通用型的单板开发套件主要面向三类无线应用Bluetooth low energy、ANT 以及 2.4GHz 专有协议。RIOT 通过boards/nrf51dk目录为其提供完整的板级支持包括构建配置Makefile 系列、Kconfig 描述、外设配置与引脚映射。从 boards/nrf51dk/Kconfig 可以看到该板在 Kconfig 体系下通过BOARD_NRF51DK选项被选中同时select BOARD_COMMON_NRF51与select CPU_MODEL_NRF51X22XXAC分别引入了 nrf51 系列板的公共配置与具体 CPU 型号并source了RIOTBOARD/common/nrf51/Kconfig。这意味着 nRF51DK 的绝大多数公共逻辑如烧录器默认选择都复用了boards/common/nrf51目录下的一套实现。板级支持的目录结构如下boards/nrf51dk/include/board.h —— LED 与按键引脚定义boards/nrf51dk/include/periph_conf.h —— UART/SPI/I2C/ADC 外设配置boards/nrf51dk/include/gpio_params.h —— SAUL 驱动的 GPIO 参数映射boards/nrf51dk/include/arduino_iomap.h —— MCU 引脚到 Arduino 引脚的映射boards/nrf51dk/Makefile.features —— 板级特性声明boards/nrf51dk/Makefile.include —— 默认烧录器OpenOCD与串口端口配置板载硬件资源LED、按键与 Arduino 兼容在 boards/nrf51dk/include/board.h 中定义了 4 个 LED 与 4 个按键的引脚LED0–LED3 分别挂在 P0.21、P0.22、P0.23、P0.24 上并通过LEDx_ON、LEDx_OFF、LEDx_TOGGLE宏直接操作NRF_GPIO-OUTCLR、NRF_GPIO-OUTSET与NRF_GPIO-OUT寄存器BTN0–BTN3 分别挂在 P0.17、P0.18、P0.19、P0.20 上模式均为GPIO_IN_PU上拉输入。值得注意的是 LED 引脚在 boards/nrf51dk/include/gpio_params.h 中同时被映射为 SAUL GPIO 设备名称分别为 LED 1 至 LED 4并带有SAUL_GPIO_INVERTED | SAUL_GPIO_INIT_CLEAR标志低电平点亮、上电初始化为熄灭。因此启用saul_default模块后可以直接通过 SAUL 命令行接口操作板载 LED。外设配置UART/SPI/I2C/ADCboards/nrf51dk/include/periph_conf.h 给出了完整的外设配置外设使用单元引脚/说明UARTNRF_UART0映射到 USB 虚拟串口RXP0.11、TXP0.9启用periph_uart_hw_fc时 RTSP0.8、CTSP0.10SPINRF_SPI0SCLKP0.29、MOSIP0.25、MISOP0.28I2CNRF_TWI1SCLP0.7、SDAP0.30速度I2C_SPEED_NORMAL使用 PPI 通道 0ADCAIN2–AIN7通道 2–7 分别映射到 Arduino 引脚 A0–A5P0.01–P0.06ADC 通道与 Arduino 引脚的对应关系来自 boards/nrf51dk/include/periph_conf.h 中的注释表ADC 通道MCU 引脚板载 Arduino 引脚AIN0P0.26已引出无对应 Arduino UNO 引脚AIN1P0.27已引出无对应 Arduino UNO 引脚AIN2P0.01A0AIN3P0.02A1AIN4P0.03A2AIN5P0.04A3AIN6P0.05A4AIN7P0.06A5从 boards/nrf51dk/Makefile.features 可见该板声明了periph_adc、periph_i2c、periph_spi、periph_uart、periph_uart_hw_fc等特性并支持arduino_analog、arduino_i2c、arduino_pins、arduino_shield_isp、arduino_shield_uno、arduino_spi即完整的 Arduino UNO 盾板兼容能力。同时boards/nrf51dk/include/arduino_iomap.h 显示 Arduino 的 SPID11/D12/D13与 ISP SPI 都复用SPI_DEV(0)对应 P0.25/P0.28/P0.29。为什么要升级烧录器固件板载 J-Link 的 UART 半工问题nRF51DK 出厂时板载一颗 J-Link 调试器芯片。RIOT 文档明确指出该 J-Link 与 UART 配合不佳——shell 只工作于 RX 方向TX 方向不可用。这意味着如果你直接通过板载 J-Link 的虚拟串口连接 RIOT shell只能接收到来自开发板的数据RX却无法向开发板发送命令TX 失效shell 交互会处于只读的瘫痪状态。因此RIOT 文档给出的推荐做法是将板载烧录器固件替换为 DAPLink。DAPLink 是 ARM 维护的开源 CMSIS-DAP 实现替换后不仅能获得可靠的虚拟串口支持还能继续以 CMSIS-DAP 调试适配器的方式配合 OpenOCD 完成烧录与调试boards/nrf51dk/Makefile.include 中即设置OPENOCD_DEBUG_ADAPTER dap。从 boards/nrf51dk/Makefile.include 也可以看到在 macOS 上默认串口端口通过PORT_DARWIN ? $(firstword $(sort $(wildcard /dev/tty.SLAB_USBtoUART*)))匹配即 DAPLink 枚举出的 CP210xSilicon Labs USB-UART虚拟串口这也印证了升级 DAPLink 后 UART 通道可用的设计意图。将板载烧录器升级为 DAPLink完整步骤以下步骤来自 boards/nrf51dk/doc.md用于把 nRF51DK 板载的 J-Link 烧录器固件替换为 DAPLink。操作前请确认手头有可用的 USB 数据线并注意固件文件与目标板匹配。下载并解压 DAPLink 发布包下载 DAPLink v0251 对应的发布压缩包文件名为0251_release_package_9295000c.zip解压后得到包含0251_sam3u2c_mkit_dk_dongle_nrf5x_0x5000.bin在内的固件文件集合。进入 BOOTLOADER 模式按住开发板上的复位reset按钮不放同时将板的 USB 调试口连接到电脑。此时系统应将板枚举为一个名为BOOTLOADER的存储设备。拖拽刷入固件用文件管理器打开BOOTLOADER盘将固件文件0251_sam3u2c_mkit_dk_dongle_nrf5x_0x5000.bin直接拖拽/复制到该文件夹内。这相当于通过板载 bootloader 的拖放drag-n-drop机制完成烧录无需额外刷写工具。重新上电验证对开发板重新上电power-cycle。此时应出现一个新的 DAPLink 挂载点盘符/串口说明固件替换成功。完成上述步骤后板载调试器即以 DAPLink 身份工作虚拟串口通常是 CP210x USB-UART可正常收发shell 双向交互恢复可用。烧录流程OpenOCD 与 make flash升级为 DAPLink 后RIOT 使用OpenOCD作为该板的默认烧录程序。相关的默认配置可以在以下文件中找到boards/nrf51dk/Makefile.include 中设置了PROGRAMMER ? openocd和OPENOCD_DEBUG_ADAPTER dapboards/common/nrf51/Makefile.include 进一步明确使用 OpenOCD 时加载公共配置文件$(RIOTBOARD)/common/nrf51/dist/openocd.cfg使用 J-Link 时则设置JLINK_DEVICE nrf51822该路径仅作备选因为文档推荐将 J-Link 替换为 DAPLink。其中 boards/common/nrf51/dist/openocd.cfg 的内容为set WORKAREASIZE 0x4000 source [find target/nrf51.cfg] $_TARGETNAME configure -rtos auto即设置 16 KiB0x4000的工作区大小、加载 OpenOCD 内置的target/nrf51.cfg目标定义并启用 RTOS 自动检测RIOT 应用可被识别为 FreeRTOS/ChibiOS 等 RTOS 线程。值得注意的是 boards/common/nrf51/Makefile.include 还处理了一个特例若应用中使用了nimble蓝牙协议栈包则会追加-DBOARD_NRF51_XTIMER_ALT编译选项切换 xtimer 的映射以避免与 BLE 协议栈冲突——这是 nRF51 系列板在编译期处理软硬件资源协调的典型例子。烧录命令在任意 RIOT 应用目录下执行BOARDnrf51dk make flash以 examples/basic 下的应用为例可以这样操作cd examples/basic/hello-world BOARDnrf51dk make flash该命令会完成应用的编译、链接并通过 OpenOCD DAPLinkCMSIS-DAP 接口将固件写入 nRF51 芯片。由于 boards/common/nrf51/Makefile.include 将 OpenOCD 登记进PROGRAMMERS_SUPPORTED你也可以显式指定烧录程序BOARDnrf51dk PROGRAMMERopenocd make flash烧录完成后通过 DAPLink 的虚拟串口连接 RIOT shell。在 Linux 下通常使用make termRIOT 会根据 PORT 设置自动选择串口或在 macOS 下直接使用PORT/dev/tty.SLAB_USBtoUART0 BOARDnrf51dk make term打开终端该默认端口规则同样定义于 boards/nrf51dk/Makefile.include。此时 shell 的收发都正常可以执行 RIOT 的 shell 命令与应用交互。相关依赖与模块注意事项boards/nrf51dk/Makefile.dep 揭示了该板的两个自动依赖规则若应用启用了saul_default模块会自动追加saul_gpio从而将板载 LED 作为 SAUL GPIO 设备暴露对应 boards/nrf51dk/include/gpio_params.h 中的映射若应用启用了periph_uart模块会强制要求periph_uart_hw_fc特性硬件流控这是因为 nRF51DK 的 UART 配置默认就带 RTS/CTS 引脚定义见 boards/nrf51dk/include/periph_conf.h。而在 boards/common/nrf51/Makefile.dep 层面启用netdev_default会自动引入nrfminnRF51 的 2.4GHz 私有无线驱动启用saul_default会引入saul_nrf_temperature片上温度传感器。这意味着只需选中对应默认模块即可在 nRF51DK 上快速获得无线网络与传感器接入能力。小结nRF51DK 在 RIOT 中是一块支持完善的 BLE/ANT/2.4GHz 开发板其烧录链路的关键在于两点一是把板载的 J-Link 烧录器固件升级为 DAPLink拖放固件到BOOTLOADER盘即可用以修复 UART TX 不可用的问题二是使用 RIOT 默认的 OpenOCD 通过 CMSIS-DAP 接口完成烧录BOARDnrf51dk make flash。理解 boards/nrf51dk/doc.md 中描述的这一流程再结合 boards/nrf51dk 目录下的板级配置就可以顺利地在 nRF51DK 上编译、烧录并运行 RIOT 应用并通过 DAPLink 虚拟串口与 RIOT shell 进行完整的双向交互。【免费下载链接】RIOTRIOT - The friendly OS for IoT项目地址: https://gitcode.com/GitHub_Trending/riot/RIOT创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表