新闻详情

新闻详情

首页 / 资讯中心 / 详情

nRF52840 Dongle + Wireshark:BLE 空口抓包实战与避坑指南

发布时间:2026/9/28 12:56:58来源:尧图网络
nRF52840 Dongle + Wireshark:BLE 空口抓包实战与避坑指南
1. 为什么选择 nRF52840 Dongle 做 BLE 空口抓包搞 BLE 开发的人迟早会碰到一个坎设备连不上、连接频繁断开、配对失败、数据对不上。代码翻来覆去看不出问题日志打了一堆也定位不到根因。这时候你需要的不是继续读代码而是直接看空口上到底发生了什么。BLE 是无线通信设备之间的交互全在 2.4GHz 频段上跑。你看不到摸不着只能靠抓包工具把空口数据捞出来分析。市面上能抓 BLE 空口的方案不少但nRF52840 Dongle加Wireshark这套组合是我用过性价比最高、上手最快、坑也最少的方案。nRF52840 Dongle 是 Nordic 出的一块 USB 棒子长得跟普通 U 盘差不多插到电脑 USB 口就能用。它本身是一块完整的 nRF52840 开发板带 USB 接口、按键、RGB LED最关键的是它支持 Nordic 官方的nRF Sniffer固件。烧上这个固件之后它就从一块通用开发板变成了专用的 BLE 空口嗅探器。价格大概一百多块比起动辄几千的专业嗅探设备门槛低太多了。Wireshark 是网络协议分析的老牌工具支持 BLE 抓包解析。nRF Sniffer 抓到的数据会通过 USB 传给 WiresharkWireshark 负责解码、展示、过滤。两者配合起来你能看到 BLE 广播包、连接请求、数据交互、断开过程的完整时序每一层协议字段都能展开看。这套方案适合谁如果你是 BLE 固件开发者、物联网产品工程师、嵌入式爱好者或者正在调试 BLE 连接问题但苦于没有工具那这套方案就是为你准备的。不需要你懂射频不需要你买频谱仪只要会烧固件、会装软件就能把空口包抓下来。我见过太多人卡在第一步——固件烧不进去。nRF52840 Dongle 的烧录方式和普通开发板不一样它没有板载调试器得用 Nordic 的 nRF Connect Programmer 通过 USB DFU 方式烧。这一步坑特别多后面我会专门用一章来讲怎么避坑。2. 抓包前的准备工作硬件、软件、环境一个都不能少2.1 硬件清单与选型理由先说硬件。核心设备就一个nRF52840 Dongle型号 PCA10059。注意别买错Nordic 还有 nRF52840 DK 开发板那个是带调试器的大家伙虽然也能抓包但价格贵好几倍而且体积大不方便。Dongle 才是抓包的正解。除了 Dongle你还需要一台电脑。Windows、Linux、macOS 都行但 Windows 用户最多坑也最集中后面避坑指南主要针对 Windows。电脑上要有可用的 USB 口建议直接插主板上的 USB 口别用前面板或者 USB Hub供电不稳会导致 Dongle 识别异常。如果你要抓的是自己开发的 BLE 设备那设备本身当然要有。另外建议准备一个已知能正常工作的 BLE 设备作为对照比如手机或者手环用来验证抓包环境是否正常。注意nRF52840 Dongle 出厂时自带一个简单的 BLE 示例固件但那个不能用来抓包。必须烧录 nRF Sniffer 固件才能进入嗅探模式。2.2 软件全家桶版本选择与下载渠道软件方面需要三样东西第一nRF Connect for Desktop。这是 Nordic 官方的桌面工具集里面包含 Programmer 工具用来给 Dongle 烧固件。去 Nordic 官网下载选对应操作系统的版本。建议下载最新稳定版老版本可能识别不到新的固件包。第二nRF Sniffer 固件包。这个固件包里面包含 hex 文件和相关配置。Nordic 官网有下载文件名类似nrf_sniffer_for_bluetooth_le_xxx.zip。下载下来解压里面会有hex目录存放固件文件。第三Wireshark。去 Wireshark 官网下载最新稳定版。安装的时候注意会提示安装Npcap驱动这个必须装它是抓包的核心驱动。如果你电脑上已经装过 Npcap 或者 WinPcap可能会冲突建议先卸载旧的再装。版本兼容性这块我踩过坑。nRF Sniffer 固件版本和 Wireshark 插件版本要匹配固件包里的extcap目录下有对应的 Wireshark 插件文件。如果你只更新了固件没更新插件或者反过来Wireshark 里可能看不到 nRF Sniffer 接口。所以每次更新固件记得把插件也一起更新。2.3 环境检查驱动、权限、USB 识别软件装完之后先别急着烧固件。把 Dongle 插上电脑打开设备管理器看看能不能识别。正常情况下会看到一个 USB 设备可能显示为 nRF52840 Dongle 或者 USB Composite Device。如果设备管理器里出现黄色感叹号说明驱动有问题。Windows 10 和 Windows 11 一般能自动识别如果不行去 Nordic 官网下载 nRF Connect Programmer 的时候会附带 USB 驱动手动装一下。Linux 用户需要注意权限问题。普通用户默认没有 USB 设备访问权限需要添加 udev 规则。nRF Sniffer 固件包里通常有99-nrf-sniffer.rules文件复制到/etc/udev/rules.d/目录下然后重新加载 udev 规则。macOS 用户相对省心一般插上就能用。提示如果你用的是虚拟机USB 直通可能会出问题。建议在物理机上操作或者确保虚拟机 USB 控制器设置正确。3. 固件烧录整个流程最容易翻车的地方3.1 nRF52840 Dongle 的烧录原理这是整篇教程最核心也最容易出问题的部分。nRF52840 Dongle 和普通开发板不一样它没有板载 J-Link 调试器。普通开发板用 SWD 接口烧录Dongle 没有这个接口它用的是USB DFUDevice Firmware Update方式。DFU 烧录的逻辑是这样的Dongle 上有一个 Nordic 预置的Open Bootloader这个 Bootloader 在设备上电或者按键触发时会进入 DFU 模式。进入 DFU 模式后Dongle 会枚举成一个 USB DFU 设备电脑上的 Programmer 工具就能通过 USB 把新固件推送到 Dongle 的 Flash 里。关键点在于Dongle 必须进入 DFU 模式电脑才能烧录。怎么进入 DFU 模式按一下 Dongle 上的复位按键。这个按键很小在 USB 接口旁边需要用笔尖或者针戳一下。按下去之后Dongle 上的 RGB LED 会开始闪烁红色表示进入了 DFU 模式。3.2 用 nRF Connect Programmer 烧录固件打开 nRF Connect for Desktop找到 Programmer 应用点击打开。界面左上角会有一个设备选择下拉框正常情况下应该能看到你的 Dongle。如果看不到点一下 Select device 旁边的刷新按钮。选中设备后点击 Add file 按钮找到你解压的 nRF Sniffer 固件包里的 hex 文件。路径大概是nrf_sniffer_for_bluetooth_le_xxx/hex/nrf_sniffer_for_bluetooth_le_xxx.hex。加载之后Programmer 会显示固件信息包括起始地址和大小。确认无误后点击 Write 按钮开始烧录。烧录过程大概十几秒进度条走完会提示成功。烧录完成后Dongle 会自动重启RGB LED 会变成绿色闪烁表示 nRF Sniffer 固件已经运行起来了。注意烧录过程中千万不要拔掉 Dongle否则可能导致固件损坏需要重新进入 DFU 模式恢复。3.3 烧录失败的常见原因与排查烧录失败是新手遇到最多的问题我整理了几种典型情况情况一Programmer 里看不到设备。先检查 Dongle 是否进入了 DFU 模式LED 是否在闪红色。如果没闪重新按复位键。如果按了还是不行换一个 USB 口试试有些 USB 口供电不足或者驱动有问题。情况二烧录到一半报错。最常见的原因是 USB 连接不稳定。换一根质量好的 USB 线或者直接插主板 USB 口。另外如果电脑上同时运行了其他占用 USB 的软件比如虚拟机、串口工具也可能干扰烧录先关掉。情况三烧录成功但 Wireshark 里看不到接口。这说明固件烧进去了但 Wireshark 插件没装好。检查 Wireshark 安装目录下的extcap文件夹看看有没有nrf_sniffer.py或者类似文件。如果没有把固件包里的extcap目录内容复制过去。然后重启 Wireshark。情况四Dongle 变砖了。别慌nRF52840 Dongle 很难真正变砖。按住复位键不放再插 USB等几秒松开Dongle 会强制进入 DFU 模式然后重新烧录即可。3.4 固件版本与 Wireshark 插件的匹配这个问题值得单独拿出来说。nRF Sniffer 固件包解压后目录结构大概是这样的nrf_sniffer_for_bluetooth_le_xxx/ ├── hex/ │ └── nrf_sniffer_for_bluetooth_le_xxx.hex ├── extcap/ │ ├── nrf_sniffer.py │ └── ... └── doc/hex目录是固件extcap目录是 Wireshark 插件。烧录固件用hex里的文件Wireshark 抓包用extcap里的文件。两者版本必须一致否则可能出现协议解析错误或者接口不识别。安装插件的方法把extcap目录下的所有文件复制到 Wireshark 安装目录的extcap文件夹里。Windows 默认路径是C:\Program Files\Wireshark\extcap。复制完之后重启 Wireshark在接口列表里应该能看到 nRF Sniffer for Bluetooth LE 这个接口。4. Wireshark 抓包实操从广播包到连接交互4.1 Wireshark 接口配置与抓包启动Wireshark 装好、插件放好之后打开 Wireshark。主界面上会列出所有可用接口除了你电脑的网卡还应该有一个叫 nRF Sniffer for Bluetooth LE 的接口。如果没看到点一下刷新按钮或者检查插件是否放对位置。选中这个接口但先别急着点开始。nRF Sniffer 需要配置一下抓包参数。点击接口旁边的齿轮图标或者双击接口进入配置页面。这里有几个关键选项Device选择你的 Dongle。如果只有一个默认就是它。Channel选择要抓的 BLE 信道。BLE 广播使用 37、38、39 三个信道连接后会在 0-36 信道之间跳频。如果你想抓广播包选 37、38 或 39如果想抓连接后的数据选 Advertising 或者 Data 模式。Target Address目标设备地址。如果你只想抓某个特定设备填它的 MAC 地址。留空则抓所有设备。配置好之后点 Start 开始抓包。这时候 Dongle 上的 LED 会变成蓝色闪烁表示正在嗅探。4.2 广播包抓取与分析BLE 设备在未连接时会周期性地在 37、38、39 三个信道上发送广播包。广播包里包含设备名称、MAC 地址、服务 UUID、发射功率等信息。抓广播包是了解设备行为的第一步。在 Wireshark 里广播包会显示为 LE LL 协议展开后能看到 Adv PDU 字段。重点看这几个字段AdvA广播设备的 MAC 地址。AdvData广播数据里面包含设备名称、服务 UUID、厂商自定义数据等。RSSI信号强度用来判断设备距离。我一般会先用广播包确认设备是否在正常广播广播间隔是否稳定广播数据是否符合预期。如果设备根本不发广播那后面连接的问题就不用查了先解决广播。提示Wireshark 的过滤器很好用。比如只想看某个设备的广播包可以输入btle.advertising_address xx:xx:xx:xx:xx:xx。想看特定类型的广播包可以用btle.advertising_header.pdu_type 0x00过滤可连接广播。4.3 连接建立过程抓取广播包看完了接下来抓连接过程。BLE 连接建立有一套固定的时序设备 A 发送连接请求CONNECT_REQ设备 B 响应然后双方进入连接状态开始按照连接参数进行数据交互。在 Wireshark 里连接请求会显示为 CONNECT_REQ 包展开后能看到连接参数Access Address连接后的接入地址用来区分不同的连接。CRCInitCRC 初始值。WinSize、WinOffset窗口大小和偏移。Interval连接间隔单位是 1.25ms。Latency从设备延迟。Timeout连接超时时间。这些参数决定了连接后的通信行为。比如连接间隔设得太小功耗会高设得太大数据传输延迟会大。抓包的时候可以对照代码里配置的参数看看实际空口上是不是一致。连接建立后Wireshark 会自动跟踪这个连接后续的数据包都会归到这个连接下。你可以看到 LL 层的空包、数据包、控制包以及上层 ATT、GATT 的交互。4.4 数据交互与断开过程分析连接建立后主从设备之间会进行数据交互。如果你在调试 GATT 通信可以看到 ATT 层的 Read、Write、Notify、Indicate 等操作。每个操作都有对应的响应包通过抓包可以确认数据是否正确送达、响应是否及时。断开过程也值得关注。BLE 断开有两种方式一种是主动断开一方发送 LL_TERMINATE_IND 包另一种是超时断开连接超时后自动断开。抓包时如果看到 LL_TERMINATE_IND说明是主动断开如果看到连接突然消失没有终止包那可能是超时或者信号丢失。我遇到过一个问题设备连接后几秒钟就断开代码里看不出问题。抓包后发现从设备一直没有回应主设备的空包导致连接超时。后来查出来是从设备的射频配置有问题导致接收灵敏度不够。这种问题不抓包根本定位不到。5. 常见问题与排查技巧实录5.1 Wireshark 打不开或找不到接口这是新手最常见的问题。Wireshark 打不开可能是 Npcap 驱动没装好或者和系统里的其他抓包驱动冲突。解决办法卸载所有抓包驱动Npcap、WinPcap重启电脑重新安装 Wireshark安装时勾选 Npcap。找不到 nRF Sniffer 接口先确认插件是否放到了正确的extcap目录。然后检查 Wireshark 的版本太老的版本可能不支持最新的插件。另外Dongle 必须处于空闲状态如果被其他软件占用了Wireshark 也看不到。5.2 抓不到包或抓到的包不完整抓不到包先看 Dongle 的 LED 状态。蓝色闪烁表示正在嗅探如果 LED 不亮或者常亮说明固件没跑起来重新烧录。抓到的包不完整通常是信道配置问题。BLE 广播在 37、38、39 三个信道轮询如果你只选了一个信道可能会漏掉部分广播包。建议三个信道都选上。另外如果目标设备使用了扩展广播或者周期性广播需要确认 nRF Sniffer 固件版本是否支持。信号强度也会影响抓包质量。Dongle 离目标设备太远RSSI 太低会丢包。建议把 Dongle 放在目标设备附近一米以内最好。5.3 固件烧录报错与恢复方法烧录报错的情况前面已经说了几种这里补充一个恢复方法。如果 Dongle 完全没反应LED 不亮电脑也识别不到试试强制进入 DFU 模式按住复位键插 USB保持按住 3 秒后松开。这时候 LED 应该会闪红色电脑会识别到一个 DFU 设备然后重新烧录。如果连 DFU 模式都进不去那可能是硬件问题比如 USB 口损坏或者 Flash 损坏。这种情况比较少见但如果你买的是二手 Dongle有可能遇到。5.4 常见问题速查表问题现象可能原因解决方法Programmer 看不到设备Dongle 未进入 DFU 模式按复位键确认 LED 闪红色烧录中途报错USB 连接不稳定换 USB 口换线关闭其他 USB 软件Wireshark 无 nRF Sniffer 接口插件未安装或版本不匹配复制 extcap 文件到 Wireshark 目录抓不到广播包信道选择错误同时选 37、38、39 信道抓到的包解析异常固件与插件版本不一致更新固件和插件到同一版本连接后频繁断开连接参数配置不当抓包查看 Interval、Timeout 参数Dongle 变砖固件损坏强制进入 DFU 模式重新烧录5.5 实操心得与避坑建议最后分享几个我踩过坑之后总结的经验。第一USB 线很关键。nRF52840 Dongle 对 USB 线质量比较敏感劣质线会导致供电不足、数据传输不稳定。我一开始用了一根便宜的延长线烧录十次有五次失败换了原装线之后一次成功。第二Wireshark 版本别追新。最新版 Wireshark 有时候和 nRF Sniffer 插件兼容性不好建议用官方推荐的稳定版本。我目前用的是 3.6.x 系列配合 nRF Sniffer 4.1.0 固件一直很稳。第三抓包时关闭其他无线设备。2.4GHz 频段很拥挤WiFi、蓝牙鼠标、无线键盘都在这个频段上跑。抓包时尽量关掉不必要的无线设备减少干扰。第四保存抓包文件。Wireshark 抓到的数据可以保存为 pcapng 文件方便后续分析或者发给同事。我习惯每次抓包都保存一份标注好时间、设备、问题现象后面查起来很方便。第五善用过滤器。BLE 抓包数据量很大不加过滤的话几秒钟就能刷出几千个包。学会用 Wireshark 的显示过滤器比如btle只看 BLE 包btatt只看 ATT 层btl2cap只看 L2CAP 层能大幅提升分析效率。这套 nRF52840 Dongle 加 Wireshark 的抓包方案我从开始摸索到熟练使用大概花了一周时间其中大部分时间都耗在固件烧录和插件配置上。一旦环境搭好后面抓包分析就是水到渠成的事。希望这篇教程能帮你少走弯路把时间花在真正的问题定位上而不是跟工具较劲。
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

IIS网站部署全攻略:从安装到外网访问实战指南 2026/9/29 4:41:05

IIS网站部署全攻略:从安装到外网访问实战指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

阅读更多 →
S7-1200 PID控制实战:从PID_Compact组态到参数整定与避坑指南 2026/9/29 4:41:05

S7-1200 PID控制实战:从PID_Compact组态到参数整定与避坑指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

阅读更多 →
嵌入式MCU开发全流程:编译、烧录与仿真的避坑指南 2026/9/29 4:41:05

嵌入式MCU开发全流程:编译、烧录与仿真的避坑指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

阅读更多 →
物联网三层架构实战:感知、连接与处理的核心技术解析 2026/9/29 4:41:05

物联网三层架构实战:感知、连接与处理的核心技术解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

阅读更多 →
Vivado FPGA工程创建全流程:从Verilog到比特流下载 2026/9/29 4:41:05

Vivado FPGA工程创建全流程:从Verilog到比特流下载

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

阅读更多 →
MTK平台充电调试全解析:从硬件通路到快充协议 2026/9/29 4:40:58

MTK平台充电调试全解析:从硬件通路到快充协议

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞 ✉