新闻详情

新闻详情

首页 / 资讯中心 / 详情

nRF52840 Dongle + Wireshark BLE抓包实战:从固件烧录到协议分析

发布时间:2026/9/28 6:22:42来源:尧图网络
nRF52840 Dongle + Wireshark BLE抓包实战:从固件烧录到协议分析
1. 为什么BLE抓包值得你花时间折腾做低功耗蓝牙开发的人迟早会撞上同一个问题设备连不上、连上了频繁掉线、数据对不上、功耗异常偏高。你翻遍代码逻辑看起来没问题但问题就是解决不了。原因很简单——你看到的只是代码层面的“应该怎样”而空口上实际跑的报文可能跟你的预期完全不一样。BLE抓包就是让你从“猜”变成“看”的手段。它能把设备之间每一次广播、扫描、连接、数据交互的原始报文完整记录下来让你直接看到协议栈底层到底发生了什么。而nRF52840 Dongle配合Wireshark这套组合是目前个人开发者和小团队最容易上手、成本最低的方案之一。一个Dongle不到百元Wireshark免费开源烧录一次固件就能长期使用。这套方案适合谁嵌入式工程师调试BLE产品、IoT开发者排查连接异常、安全研究人员分析BLE设备行为、甚至只是想搞清楚BLE协议栈到底怎么跑的学习者。不管你用的是Nordic自己的芯片还是其他厂商的BLE方案只要空口上跑的是标准BLE协议这个Dongle就能抓。但我要提前说清楚这套东西看起来简单实际第一次搞的时候坑不少。固件烧录方式跟普通开发板完全不一样Wireshark的接口配置也有讲究抓包时的参数设置直接影响你能不能看到有用的数据。下面我把整个流程拆开讲包括我踩过的那些坑。2. 硬件与软件准备别急着插上就用2.1 nRF52840 Dongle到底是个什么东西nRF52840 Dongle是Nordic出的一块USB棒状开发板核心芯片是nRF52840支持BLE 5.0、Thread、Zigbee、802.15.4等协议。它长得像U盘一头是USB-A公头直接插电脑就能供电和通信。板子上有一个RGB LED、一个用户按钮、一个复位按钮还有可编程的GPIO排针。关键点在于它出厂时预烧的固件并不是抓包固件。你拿到手插上电脑它默认跑的是一个简单的LED闪烁程序或者DFU引导程序。要用来抓BLE空口包必须烧录Nordic专门提供的sniffer固件。注意nRF52840 Dongle和nRF52840 DK是两回事。DK是带调试器的开发板烧录方式跟Dongle完全不同。网上很多教程混着讲照着DK的方法操作Dongle会直接卡住。2.2 软件清单与版本选择需要准备的东西不多但版本有讲究nRF Connect for DesktopNordic官方桌面工具集里面包含Programmer烧录工具和Sniffer抓包工具。建议从Nordic官网下载最新版Windows、macOS、Linux都支持。Wireshark网络协议分析器用来解析和展示抓到的BLE报文。建议用3.6以上的版本对BLE的支持比较完善。安装时注意勾选Npcap驱动Windows上抓USB和网络包都靠它。Sniffer固件Nordic提供的sniffer_nrf52840dongle_*.hex文件在nRF Connect的Sniffer应用里可以直接下载也可以从Nordic的GitHub仓库获取。Python环境可选如果你要用命令行方式烧录需要安装nrfutil工具。但用nRF Connect的Programmer图形界面可以跳过这一步。我实测下来Windows 10/11上最省事的组合是nRF Connect for Desktop最新版 Wireshark 4.x 官方Sniffer固件。Linux下也能跑但USB权限配置会多一步后面会讲。2.3 一个容易被忽略的前置检查在开始烧录之前先把Dongle插上电脑打开设备管理器Windows或lsusbLinux确认系统能识别到设备。正常情况下你会看到一个Nordic Semiconductor的USB设备。如果什么都没看到换一个USB口试试最好直插主板后面的USB口不要用前面板或者USB Hub。实操心得有些USB Hub供电不足会导致Dongle工作不稳定抓包时丢包严重。我一开始用了一个便宜的Hub抓出来的包断断续续换了直插主板就正常了。这个坑花了我两个小时才定位到。3. 固件烧录最容易翻车的一步3.1 为什么Dongle烧录方式这么特殊nRF52840 Dongle板子上没有板载调试器Debugger。像nRF52840 DK那种板子你通过USB连上就能用J-Link协议直接烧录。但Dongle没有这个硬件它出厂时预烧了一个DFUDevice Firmware Update引导程序只能通过USB DFU协议来更新固件。这意味着两件事第一你不能用普通的J-Link/ST-Link烧录器直接连SWD引脚烧录虽然板子上有SWD焊盘但需要额外接线第二你必须让Dongle进入DFU模式然后用支持DFU的工具把固件推进去。3.2 进入DFU模式的正确姿势Dongle上有一个很小的复位按钮旁边有一个用户按钮。进入DFU模式的步骤是把Dongle插上电脑USB口。用笔尖或镊子按住复位按钮不放。保持按住复位按钮的同时按下用户按钮。先松开复位按钮再松开用户按钮。这时候Dongle上的RGB LED会开始呼吸闪烁通常是红色或绿色呼吸说明已经进入DFU模式。电脑上会识别到一个新的USB设备名称类似“Nordic Semiconductor DFU”或者“nRF52 DFU”。注意顺序不能错。如果先松用户按钮再松复位按钮Dongle会正常启动而不是进入DFU。我前三次都搞反了顺序一直以为Dongle坏了。3.3 用nRF Connect Programmer烧录固件打开nRF Connect for Desktop找到Programmer应用点击打开。界面里会列出当前连接的设备。如果Dongle在DFU模式下你应该能看到它。操作步骤在Programmer界面中点击“Add file”选择下载好的Sniffer固件hex文件。确认设备列表中选中的是DFU模式下的Dongle。点击“Write”按钮开始烧录。等待进度条走完通常几秒钟到十几秒。烧录完成后Dongle会自动重启LED变成常亮或慢闪表示Sniffer固件已经运行。如果Programmer里看不到设备检查一下Dongle是否真的在DFU模式。可以拔下来重新按步骤进入一次。3.4 命令行烧录方案备选如果你习惯用命令行或者图形界面出了问题可以用nrfutil来烧录# 安装nrfutil pip install nrfutil # 生成DFU包如果手里是hex文件 nrfutil pkg generate --hw-version 52 --sd-req 0x00 --application sniffer_nrf52840dongle.hex sniffer_package.zip # 烧录 nrfutil dfu usb-serial -pkg sniffer_package.zip -p COM_PORTWindows下COM端口号在设备管理器里看Linux下通常是/dev/ttyACM0。Linux还需要把当前用户加到dialout组否则没有权限访问串口sudo usermod -aG dialout $USER改完要重新登录才生效。3.5 烧录避坑清单问题现象可能原因解决方法Programmer里看不到设备Dongle没进DFU模式重新按复位用户按钮的顺序操作烧录进度卡住不动USB口供电不足或驱动异常换直插主板USB口重装nRF Connect烧录报错“Invalid file”固件文件不对或损坏重新从官方渠道下载hex文件烧录完成后LED不亮固件没跑起来拔插一次Dongle检查是否烧到了正确设备Linux下提示权限拒绝用户不在dialout组执行usermod命令并重新登录实操心得烧录Sniffer固件后Dongle的USB设备名称会变成“Nordic Sniffer”之类的标识。如果你在Wireshark里找不到抓包接口先确认设备名称对不对。另外烧录一次就够了以后抓包不需要重复烧录除非你要换回其他固件。4. Wireshark配置与抓包实操4.1 Wireshark安装时的关键选项Wireshark安装本身没什么难度但Windows上有一个地方必须注意安装过程中会提示安装Npcap驱动。这个驱动是Wireshark抓包的基础必须装。如果你之前装过WinPcap建议先卸载因为两者可能冲突。安装完成后打开Wireshark在接口列表里应该能看到多个接口。除了你电脑的网卡之外还会出现一个跟Nordic Sniffer相关的接口名称通常是“nRF Sniffer for Bluetooth LE”或者类似的描述。如果看不到这个接口说明Sniffer固件没跑起来或者Wireshark版本太旧不支持。可以尝试重启Wireshark或者拔插Dongle。4.2 选择正确的抓包接口在Wireshark主界面双击那个Nordic Sniffer接口就会开始抓包。但这时候你看到的可能是一片空白因为默认情况下Sniffer只监听特定的广播通道而且需要你告诉它抓哪个设备。这里有一个关键概念BLE空口抓包跟WiFi抓包不一样。WiFi抓包是网卡进入混杂模式把所有经过的包都抓下来。BLE Sniffer固件的工作方式是它会在37、38、39三个广播通道上轮流监听抓到广播包后上报给Wireshark。但对于已经建立的连接它需要跟随跳频序列才能抓到后续的数据包。4.3 抓包前的参数配置在Wireshark里找到“Adapter”或者“Capture”相关的设置选项不同版本位置略有差异。你需要配置几个关键参数Target Device如果你知道目标设备的蓝牙MAC地址直接填进去。这样Sniffer会只抓这个设备的包减少干扰。Scanning Channels默认是37/38/39三个广播通道。如果你要抓连接后的数据需要让Sniffer跟随连接。RSSI Filter可以设置信号强度阈值过滤掉太弱的信号减少丢包和干扰。我一般会先把目标设备的MAC地址填上这样抓出来的包干净很多。如果不知道MAC地址可以先空着抓一轮在Wireshark里看到目标设备的广播包后从包详情里找到MAC地址再填进去重新抓。4.4 开始抓包与实时观察配置好之后点击Wireshark的“Start”按钮开始抓包。这时候你应该能看到BLE广播包不断出现。每个广播包在Wireshark里会显示为一行包含时间戳、源MAC地址、信号强度RSSI、广播类型等信息。展开一个广播包你能看到完整的协议栈解析物理层信息、链路层头部、广播PDU、AD结构Advertising Data。Wireshark会自动解析常见的AD类型比如设备名称、UUID、厂商自定义数据等。注意BLE广播包和连接后的数据包在Wireshark里的显示方式不同。广播包用的是广播通道连接后的包用的是数据通道Sniffer需要先抓到连接请求CONNECT_IND然后跟随跳频才能抓到后续数据。如果只抓广播包不需要关心跳频如果要抓连接后的交互必须确保Sniffer在连接建立的那一刻就抓到了连接请求。4.5 抓包时的常见现象与应对刚开始抓包时你可能会遇到几种情况情况一包太多刷屏太快。周围BLE设备多的时候广播包会非常多。这时候用Target Device过滤或者RSSI过滤只关注你的目标设备。情况二抓不到连接后的数据。最常见的原因是Sniffer没有抓到连接请求。解决办法是先让Sniffer开始抓包然后再触发设备发起连接。顺序反了就可能漏掉连接请求。情况三抓到的包不完整。可能是信号太弱或者干扰太大。把Dongle靠近目标设备或者换个USB口减少干扰。情况四Wireshark显示“Malformed Packet”。通常是固件版本和Wireshark版本不匹配或者抓包过程中出现了丢包。升级到最新版通常能解决。5. BLE协议栈在Wireshark里的解读方法5.1 广播包的结构拆解一个典型的BLE广播包在Wireshark里展开后你会看到这样的层级Frame物理层信息包括时间戳、帧长度、RSSI。Bluetooth Low Energy Link Layer链路层头部包含PDU类型ADV_IND、ADV_SCAN_IND等、源地址、目标地址。Bluetooth Low Energy Advertising Data广播数据由多个AD Structure组成。每个AD Structure包含长度、类型和值。常见的类型有0x01Flags表示设备能力。0x09Complete Local Name设备完整名称。0x03Complete List of 16-bit Service UUIDs。0xFFManufacturer Specific Data厂商自定义数据。看懂这些结构你就能从广播包里提取出设备名称、支持的服务、厂商信息等。5.2 连接建立时序的抓包分析BLE连接建立的过程在空口上是一系列特定报文的交互。用Sniffer抓下来你能清晰看到设备A发送ADV_IND广播包表示自己可连接。设备B发送CONNECT_IND连接请求包含接入地址、CRC初始值、跳频参数等。连接建立后双方在数据通道上交互。第一个包通常是LL_FEATURE_REQ/RSP交换双方支持的功能。然后是LL_VERSION_IND交换协议栈版本信息。接着是加密过程如果启用了加密包括LL_ENC_REQ、LL_ENC_RSP、LL_START_ENC_REQ等。加密完成后开始ATT/GATT层的数据交互比如服务发现、特征读写。在Wireshark里这些报文会按时间顺序排列你可以清楚地看到每一步的请求和响应。如果连接过程中某一步失败了比如加密失败或者服务发现超时抓包记录会直接告诉你卡在哪里。5.3 用过滤器精准定位问题Wireshark的显示过滤器在BLE抓包分析中非常有用。几个常用的过滤表达式btle.advertising_address xx:xx:xx:xx:xx:xx只看某个设备的广播包。btle.access_address 0xXXXXXXXX只看某个连接的包。btle.control_opcode 0x05只看LL_FEATURE_REQ。btatt只看ATT层的数据交互。btl2cap只看L2CAP层的数据。把这些过滤器和逻辑运算符组合起来可以快速定位到你关心的问题。比如你想看某个设备连接后的所有ATT读写操作可以用btle.access_address 0xXXXXXXXX btatt。实操心得抓包文件建议保存为pcapng格式方便后续用Wireshark重新打开分析。如果抓包时间较长文件会比较大可以边抓边用过滤器缩小范围或者设置抓包缓冲区大小限制。6. 常见问题排查与实战经验6.1 抓包接口消失或无法启动这是最常见的问题之一。Wireshark里看不到Nordic Sniffer接口或者点击启动时报错。排查思路确认Dongle是否插好设备管理器里是否识别到。确认Sniffer固件是否在运行LED状态。重启Wireshark或者拔插Dongle后重新打开Wireshark。检查Wireshark版本是否过旧升级到最新版。Windows下检查Npcap驱动是否正常安装可以尝试重装Npcap。6.2 抓到的包全是广播没有连接数据前面提到过Sniffer需要抓到CONNECT_IND才能跟随连接。如果你只看到广播包说明连接请求没有被捕获到。解决办法先启动抓包再触发设备连接。确保目标设备在Sniffer的接收范围内。检查Target Device过滤是否设置正确有时候MAC地址填错了会导致Sniffer忽略目标设备。6.3 数据包解析异常或显示不全Wireshark对BLE协议的解析依赖固件上报的数据格式。如果固件版本和Wireshark版本不匹配可能出现解析错误。建议使用Nordic官方推荐的固件和Wireshark版本组合。如果看到“Malformed Packet”尝试在Wireshark里更新协议解析器或者换一个版本的Sniffer固件。抓包时尽量避免同时进行大量USB传输减少丢包。6.4 抓包时电脑蓝屏或USB异常这个问题比较少见但确实有人遇到过。热词里提到了Npcap驱动在特定网络环境下可能触发蓝屏。如果你遇到类似情况尝试更新Npcap到最新版。如果问题持续可以换一台电脑抓包或者用Linux系统Linux下用libpcap不依赖Npcap。抓包时关闭其他占用USB带宽的设备。6.5 常见问题速查表问题排查方向解决动作Wireshark看不到Sniffer接口固件/驱动/版本重烧固件、重装Npcap、升级Wireshark只能抓广播抓不到连接连接请求漏抓先开抓包再触发连接包解析显示Malformed版本不匹配统一固件和Wireshark版本抓包丢包严重信号弱或USB干扰靠近设备、换USB口、加RSSI过滤烧录后设备无响应固件不对或烧录失败重新进DFU模式烧录Linux下无权限用户组配置加入dialout组并重新登录7. 进阶技巧让抓包效率翻倍7.1 多Dongle并行抓包如果你需要同时抓多个设备的交互或者想从不同位置抓包对比信号质量可以插多个nRF52840 Dongle。每个Dongle烧录Sniffer固件后在Wireshark里会显示为独立的接口。你可以同时启动多个抓包会话分别保存文件。但要注意多个Dongle同时工作时USB带宽和电脑处理能力会成为瓶颈。建议根据实际需要选择数量一般两个就够了。7.2 配合nRF Connect Sniffer应用使用Nordic的nRF Connect for Desktop里有一个Sniffer应用它提供了比Wireshark更简洁的抓包界面适合快速查看广播包和设备列表。你可以先用它扫描周围设备找到目标MAC地址然后再到Wireshark里做详细分析。这个应用的好处是上手快不需要配置Wireshark接口。但它的分析能力有限复杂的协议解析还是得靠Wireshark。7.3 抓包文件的后续分析抓到的pcapng文件可以保存下来后续用Wireshark重新打开分析。如果你要做自动化分析可以用tshark命令行工具提取特定字段# 提取所有广播包的源MAC和RSSI tshark -r capture.pcapng -Y btle.advertising_header.pdu_type 0x00 -T fields -e btle.advertising_address -e btle.rssi这样可以批量导出数据用脚本做进一步统计和可视化。7.4 抓包时的功耗与干扰权衡Sniffer固件本身功耗不高Dongle插在电脑上由USB供电不用担心电池问题。但抓包时如果周围BLE设备太多Sniffer会频繁上报数据可能导致USB传输拥塞。这时候可以用Target Device过滤只抓目标设备。设置RSSI阈值过滤远端设备。缩短抓包时间分段抓取。实操心得我一般在抓包前会先用nRF Connect的手机App扫描一下周围看看目标设备的广播频率和信号强度。如果信号很强RSSI大于-60dBm抓包会很稳定如果信号很弱RSSI小于-80dBm就需要把Dongle尽量靠近设备或者考虑用外接天线部分Dongle型号支持。8. 一些真实踩坑记录第一次用nRF52840 Dongle抓包的时候我卡在固件烧录上整整一个下午。问题出在我按照nRF52840 DK的教程去操作试图用J-Link直接烧录结果Dongle根本不响应。后来才搞明白Dongle只有DFU模式必须用nRF Connect Programmer或者nrfutil来烧。第二次踩坑是在Wireshark里找不到Sniffer接口。我以为是固件没烧好反复烧了三遍最后发现是Wireshark版本太旧不支持Nordic的Sniffer接口格式。升级到最新版后立刻就能用了。第三次是抓连接数据失败。我按照教程先触发了设备连接再打开Wireshark抓包结果只看到广播包。后来把顺序反过来——先开抓包再触发连接——立刻就抓到了完整的连接建立过程。这些坑看起来都是小问题但每一个都能让你卡住半天。希望看到这里的你能直接跳过这些弯路。还有一个细节Dongle的USB接口用久了可能会松动导致抓包过程中断。如果发现抓包突然停止先检查Dongle是不是松了。我后来换了一个带延长线的USB口把Dongle固定住就再也没出现过这个问题。最后说一个关于Wireshark过滤器的技巧。如果你不确定目标设备的MAC地址可以先不加过滤抓一小段然后在Wireshark的“Bluetooth Low Energy”协议树里找到“Advertising Address”字段右键选择“Apply as Filter”-“Selected”Wireshark会自动生成过滤表达式。这比手动输入MAC地址快得多也不容易出错。
网站建设高端定制企业官网
RELATED

相关资讯

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

较早相关资讯

最新相关资讯

S7-200 SMART双PLC以太网TCP通信实战:从配置到避坑全记录 2026/9/28 7:19:32

S7-200 SMART双PLC以太网TCP通信实战:从配置到避坑全记录

前阵子做一个产线改造,现场分成两个控制柜,各装了一台S7-200 SMART。甲方要求两台柜子必须联动:A柜的出料完成信号要送到B柜,B柜的故障和急停状态要实时回传到A柜,产量数据两边还要互相抄读。第一反应是拉硬线&#xf…

阅读更多 →
STM32 SAI TDM模式实现16通道音频混音:从I2S到TDM的实战指南 2026/9/28 7:19:32

STM32 SAI TDM模式实现16通道音频混音:从I2S到TDM的实战指南

最近在做一个多通道音频处理项目,需要接收十六路PCM音频流并实时混音。板子用的是STM32,最初方案拿I2S搭,规划的时候就已经头疼了——I2S一帧固定只有左右两个声道,十六路输入意味着至少要接八个I2S外设,数据同步、引脚…

阅读更多 →
Vue3组合式API核心与实战:从响应式到组件通信 2026/9/28 7:19:32

Vue3组合式API核心与实战:从响应式到组件通信

很多人在学vue3的时候,都会陷入一种“看视频全会,一写就废”的状态。尤其是到了某个阶段的章节,比如“章节4”这种承上启下的时候,前面学的ref、reactive还没彻底消化,后面又要接组件通信、生命周期、自定义指令&#…

阅读更多 →
校园AI助手中的Agent+RAG+MCP协同架构实战 2026/9/28 7:19:32

校园AI助手中的Agent+RAG+MCP协同架构实战

1. 这不是又一个“AI玩具”:为什么校园课程助手必须是AgentRAGMCP三位一体你肯定见过这类项目:“用LangChain搭个问答机器人”“基于Llama3的课程咨询小助手”。它们上线三天,学生问一句“上学期《数据结构》实验课第3次作业提交截止时间是什…

阅读更多 →
STM32 SAI接口实现16通道TDM音频混音的完整方案 2026/9/28 7:19:32

STM32 SAI接口实现16通道TDM音频混音的完整方案

做一个多路音频聚合的项目,我一开始天真地以为I2S就够了,直到面对16通道混音需求时,才发现单根I2S数据线只能承载两路音频,想继续拓展就得往TDM方向走。最终我用STM32的SAI接口,把多路I2S数据按时隙拆开、再打包成一根…

阅读更多 →
Jev 模型接入 Codex 与本地部署全攻略:低成本的代码 Agent 新选择 2026/9/28 7:19:25

Jev 模型接入 Codex 与本地部署全攻略:低成本的代码 Agent 新选择

1. 刷屏只说明有人用起来了,不代表你已经会用了最近 Jev 这个词在网上刷得有多凶,不用我说你也肯定刷到了:公众号连夜写测评,技术群里天天有人问官网地址,甚至还有人把 Jev 的密钥当“内部福利”在二手交易平台叫卖。作…

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

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

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