十年匠心定制 · 商业建站与技术教学双线并行 咨询热线:400-886-1026 service@lmnt.cn
ARTICLE DETAIL

资讯详情

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

nRF52840 USB Dongle开发实战:从环境搭建到烧录调试全解析

nRF52840 USB Dongle开发实战:从环境搭建到烧录调试全解析 简介nRF52840 MDK USB Dongle 是一套采用 USB Dongle 规格的低成本 nRF52840 微型开发套件面向物联网、低功耗蓝牙、Thread 等无线协议开发者适合快速原型验证、多协议节点测试或 PC 端网络协处理器应用。板载 Nordic nRF52840 多协议 SoC集成 ARM Cortex-M4F、蓝牙5、Thread、802.15.4、ANT、2.4GHz 私有协议以及 NFC-A 与 USB配合可编程按钮、RGB LED、12 个 GPIO、2.4G 芯片天线覆盖从传感器节点到网关的多种场景。压缩包大小约 41.92MB内容聚焦硬件设计参考、固件示例与使用文档可帮助从零搭建 nRF52840 开发环境并快速上手包内文件总数与类型因上游未提供暂无法统计。目前已有 700 余人学习下载适合需要在低成本 USB Dongle 形态上完成多协议开发的嵌入式工程师、物联网爱好者及相关专业学生。 U盘大小、几十块钱、一颗 nRF52840 芯片这三个词凑在一起就是 nrf52840-mdk-usb-dongle 这款 USB Dongle 规格开发套件给人的第一印象。它不只是一块能点灯的小板子nRF52840 这颗 SoC 自带 Cortex-M4F 核心、1MB Flash、256KB RAM同时支持 BLE 5.0、Thread/Zigbee、NFC 和 USB 2.0。把这些能力塞进一个可以直接插在 USB 口上的小壳子里意味着你可以快速验证蓝牙外设、USB HID 设备、低功耗传感器节点甚至把它刷成调试器来用。这篇文章主要写给两类人一类是刚拿到板子、想搞清编译和烧录流程的小白另一类是手头项目需要在量产前做低成本评估的工程师。我会从硬件选型讲起把开发环境搭建、hex 文件烧录、典型应用和常见坑完整过一遍。很多踩坑细节不是官方文档里能直接找到的建议边看边对照手头板子操作。1. 项目整体设计与硬件方案解析1.1 为什么要用 Dongle 外形做开发板把开发板设计成可直接插入的 U 盘形态收益主要在连接与迭代便利上。传统大板需要一根 USB 线调试时线材松动、接触不良都是很烦人的事Dongle 直接插在笔记本或台式机 USB 口上不需要额外供电整个接线链路非常短。对涉及 USB HID 或 BLEUSB 交互的原型来说这种形态已经非常接近最终产品。另一个关键点是成本。板子体积小、元件少BOM 和制板费用都很低同时因为板载天线和最小外围电路它几乎可以直接复用到小批量样品阶段。如果你的产品最终就是一颗 nRF52840完全可以把这块 Dongle 当验证板用省掉一套独立评估板的支出。实际项目里我见过不少人拿它做智能家居网关的早期原型验证完协议栈再改板时间成本压缩很明显。1.2 板上硬件配置速览先看核心nRF52840 属于 Nordic nRF52 系列旗舰型号64 MHz Arm Cortex-M4F带 DSP 指令和浮点单元存储是 1MB Flash 加 256KB RAM。无线部分不仅支持 BLE 5.0还支持 802.15.4Thread/Zigbee、ANT 和私有 2.4G这在同价位板子里非常少见。USB 是 2.0 全速设备接口用于做 HID、CDC 串口这类应用非常合适。板载资源方面MDK USB Dongle 通常包含这些USB-A 插头直插电脑使用用户可编程按键RGB LED可用于状态指示SWD 调试焊盘方便接 J-Link 或 DAPLink 调试PCB 天线支持 2.4G 频段部分版本还引出 NFC 引脚可用于 NFC Tag 应用。这里要特别提醒一个名字上的误会MDK 是这款开发板所属系列的项目代号不是 Keil MDK 那个编译工具链。搜索资料时尽量用“nRF52840 MDK USB Dongle”这个完整词组否则很容易混进大量 Keil 软件配置相关内容。很多人在这一步绕了远路。1.3 与主流 nRF52840 开发板横向对比为了说清楚这板子的定位我把它和另外两块常见的 nRF52840 板子做个对比。对比只看核心体验不看绝对性能因为 SoC 其实是同一颗。项目nrf52840-mdk-usb-dongleNordic nRF52840 DKAdafruit Feather nRF52840 Express形态U盘规格即插即用大板需USB线Feather 扩展板板载调试器需自行刷 DAPLink集成 J-Link集成 DAPLinkNFC有焊盘可扩展有天线无成本很低较高中等适合场景产品原型、便携验证全功能开发调试Arduino/CircuitPython 快速原型从表里能看出来Dongle 最大的优势是形态和成本代价是操作空间小复杂调试不如 DK 方便。如果你只是想把一个蓝牙键盘或者 USB 转 BLE 桥接的功能跑通它是最划算的选择。2. 开发环境选型与 hex 文件烧录2.1 四类开发环境怎么选很多新手拿到板子后第一句就问“用什么开发”。我给的建议是看你项目阶段和已有技能栈如果用官方深度生态优先考虑 nRF Connect SDKZephyr 内核或经典 nRF5 SDK功能最全量产参考价值最高。如果以前是写 STM32 的工程师习惯 Keil MDK可以直接把 nRF5 SDK 例程导入 Keil 编译曲线很平缓。如果追求快速验证创意CircuitPython 和 Arduino core 是最快的几分钟就能跑起外设。如果做研究和课程设计Zephyr 的 west 命令行工作流更适合方便管理多平台代码。选型时不用纠结对错重点是“能让你最快看到结果”。我自己的习惯是创意验证直接上 CircuitPython正式方案回到 nRF Connect SDK这样可以绕开大量底层的反复试错。2.2 烧录 hex 文件的四种方法先解释一下 hex 文件是什么编译好的固件通常以 Intel HEX 文本格式存在。下面按实际场景列出四种烧录方法方法之间互有替代关系不需要全部掌握。方法一UF2 拖拽烧录最适合新手如果板子刷过 UF2 bootloader插入电脑后会以一个可移动磁盘的形式出现。把 hex 固件转成 uf2 格式然后拖进磁盘即可完成烧录。转换工具推荐 Adafruit 的 uf2conv.py命令行格式大致如下python3 uf2conv.py -f 0xADA52840 -b 0x26000 firmware.hex -o firmware.uf2这里 -f 指定 nRF52840 的 family ID-b 指定 bootloader 起始地址。拖拽完成后按一下复位键新固件就开始运行了。这种方式的优点是零成本、不需要额外硬件缺点是只支持 UF2 格式并且要先确认 bootloader 存在。方法二nrfjprog 命令行烧录最稳定如果你手头有 J-Link 或者已经刷成 DAPLink 固件的调试器可以用 nrfjprog 直接烧录nrfjprog --family NRF52 --program firmware.hex --chiperase --reset--chiperase 会先擦除整颗 Flash避免旧固件残留导致奇怪问题量产阶段强烈建议保留。如果没有 debugger但板子自带 USB CDC bootloader也可以用 nrfutil 走串口 DFUnrfutil dfu serial -pkg app_dfu_package.zip -p COM8 -b 115200方法三OpenOCD/pyOCD适合 Linux 环境OpenOCD 和 pyOCD 对 DAPLink 兼容设备支持很好烧录命令也不复杂。这种方式适合已经搭好 Linux 开发环境、不想切到 Windows 工具链的情况。方法四Mbed 式拖拽某些固件支持 Mbed 的拖拽烧录编译产物直接拖到名为 DAPLINK 的磁盘里。虽然这个 Dongle 出厂方案不一定默认支持但刷入带 Mbed 接口的固件后也能这样用。2.3 Keil MDK 编译生成 hex 的经验尽管板子代号里带 MDK 三个字母但很多人实际用的是 Keil MDK 这个 IDE。在 Keil 里给 nRF52 工程生成 hex需要在 Options for Target 页面勾选 Output 标签下的 Create HEX File然后重新编译。生成的 hex 默认采用 Intel HEX 格式数据行长度一般固定为 16 字节这是编译器的标准行为不需要手工改。不过这里有几个容易踩的配置点老例程用 AC5 编译器新版 Keil 只预装 AC6 时会提示找不到 v5 compiler。解决办法是在 Pack Installer 里单独安装 ARM Compiler 5或者在项目选项里手动指定编译器版本。Keil 每次启动自动弹 Pack Installer很烦人。可以在 Pack Installer 的设置里取消 Check for Updates at startup或者在工程视图中禁用自动更新。编译 nRF52 需要安装 NordicSemiconductor 的 Device Family Pack千万别下错成 STM32F4xx 的 DFP两者地址不对会导致外设寄存器定义乱七八糟。如果你需要把 hex 转成 bin、或者合并多个 hex可以用 srec_cat 或 hex2bin 这类工具它们也能控制输出行格式方便后期做固件合并和量产烧录。3. 典型应用场景与实战演示3.1 这块板子到底能做什么从标题就能看出来Dongle 的核心价值是“无线互联 USB 即插即用”最适合做 BLE 与 USB 之间的桥接设备。一个很典型的场景是把普通有线键盘改装成蓝牙键盘或者反过来做一个 2.4G 无线接收器让老式电脑也能用蓝牙键鼠。除此之外它还经常被用在这些场景BLE 串口透传模块让手机 App 和 PC 通信USB HID 安全密钥例如 OpenSK 项目低功耗传感器数据采集收集温湿度、加速度数据后通过 BLE 上报刷成 DAPLink 调试器给其他单片机下载程序配合 CircuitPython 快速验证 I2C/SPI 传感器。因为体积足够小很多智能家居爱好者会直接把它塞进遥控器或网关外壳里做原型这是大型开发板很难做到的。3.2 实操一Zephyr 实现 BLE 键盘我以 nRF Connect SDK 为例展示如何把一个 BLE HID Keyboard 示例跑起来。首先要保证环境里已经装好 west 和工具链然后通过 west 拉取 SDK 并编译west init -m https://github.com/nrfconnect/sdk-nrf . west update west build -b nrf52840dongle/nrf52840 samples/bluetooth/hid_keyboard west flash如果你的 SDK 版本里没有这个 board target可以按相近的 nrf52840dongle/nrf52840 拉起来编译再根据实际原理图调整 dts。烧录完成后用手机或者电脑的蓝牙搜索能看到一个名为 “HID Keyboard” 的设备。配对后板子自带按键会模拟键盘输入RGB LED 会同步指示连接状态。这里有个经验BLE 键盘这类应用对时序和功耗要求比较高建议直接用 Zephyr 的官方示例不要在 Arduino 上硬写协议栈。Arduino 的库虽然上手快但在蓝牙 HID 细节上兼容性不如 Zephyr 原生实现好。3.3 实操二CircuitPython 点灯读按键如果说上面是量产向路线CircuitPython 就是娱乐向、快速验证向。先把 CircuitPython 固件.uf2 格式拖进板子然后写一个 code.py。示例代码如下import board import digitalio import time led digitalio.DigitalInOut(board.LED_RED) # 实际引脚名称以你板子的引脚映射为准 led.direction digitalio.Direction.OUTPUT btn digitalio.DigitalInOut(board.SW) # 板载按键引脚 btn.direction digitalio.Direction.INPUT btn.pull digitalio.Pull.UP while True: led.value not btn.value time.sleep(0.05)这段代码的含义是按下按键时低电平触发灯亮松开则灯灭。实际引脚名可能随板子版本变化第一次跑之前最好先打印一下 dir(board) 查看可用引脚。用 CircuitPython 验证硬件时最大的好处是不需要编译改完 code.py 保存板子立即重启运行开发速度非常快。4. 常见问题与排查技巧实录4.1 插上电脑没有反应出现这种情况先不要急着怀疑板子坏了。先换一个 USB 口优先用主板的直连口而不是 USB Hub排除供电问题。如果板上曾经烧过自定义固件很可能是固件跑飞或者把 USB 相关引脚配置错了此时按住板载按键再插 USB如果能进入 bootloader 模式说明硬件还是好的直接重新烧录官方固件即可。Windows 系统下还要考虑驱动问题尤其是使用 nrfutil 串口 DFU 时需要确认设备管理器里出现的是 COM 口还是带感叹号的未知设备。如果需要安装驱动可以使用通用的 WinUSB/libusb 驱动工具不要盲目禁用系统签名否则后续驱动冲突很麻烦。4.2 烧录过程中频繁超时或中断烧录失败最常见的原因是芯片处于低功耗模式或看门狗在跑导致调试器连不上。解决方法是按住板子复位焊盘或按键让芯片保持在复位状态然后让调试器先连接再释放复位。在 nrfjprog 中可以先执行 --recover 恢复芯片再执行 --chiperase这能清掉大部分因加密或休眠导致的连接问题。如果是通过串口 DFU 烧录注意 bootloader 进入条件通常是上电瞬间按住按键。如果没进入 DFU 模式nrfutil 会一直等握手信号表现为长时间卡住。这种场景下把波特率降到 115200确认 COM 口号无误基本就能解决。4.3 Keil MDK 环境疑难杂症速查现象可能原因解决办法编译报错找不到 ARM Compiler v5Keil 默认只预装 AC6安装 AC5 或在器件选项内指定编译器版本每次打开工程自动弹 Pack Installer自动更新检查未关闭取消 Check for Updates at startup生成的 hex 文件每行长度不一致工具链默认格式所致如需合并或转换用 srec_cat/hex2bin 处理连接低功耗单片机时反复复位休眠或看门狗导致连接失败开启 Connect under Reset或按住硬件复位设备能识别但下载失败Flash 算法选择错误确认 Device Family Pack 与芯片型号匹配4.4 两个容易忽略的细节一个是板载天线的摆放方向。2.4G 天线对金属和人体都非常敏感做信号测试时不要把这 Dongle 直接贴在金属机箱上更不要在金属盒子内部做距离测试否则结果会严重偏差。另一个是出厂固件备份。拿到板子后第一时间把原厂固件读出来保存成 hex后面再怎么折腾都有后悔药。用 nrfjprog 读出来就是一行命令的事别偷懒。在我实际使用过程中最稳定的工作流是先用 CircuitPython 验证外围硬件确定引脚和逻辑没问题后切到 Zephyr 或 nRF5 SDK 做正式量产固件最后统一用 nrfjprog 命令行批量烧录。这样既有开发效率又不容易在后期踩协议栈的坑。这套东西我反复用过很多次目前还没有翻过车。本文还有配套的精品资源点击获取
返回列表