2. 抓包环境搭建:硬件选型与软件工具
做蓝牙Mesh开发,抓包工具就是你的「眼睛」。没有它,你根本看不到空口在发生什么。我记得刚入行那会儿,全靠猜和打日志,一个配网问题折腾了三天。后来老老实实上了抓包环境,半小时定位——原来是设备端没回Segmented ACK。嗯,从那以后,我每做一个Mesh项目,第一件事就是先把抓包环境搭好。
这一章,咱们就把这套「眼睛」装起来。说白了就两样东西:硬件(抓包器)和软件(解析工具)。
2.1 硬件选型:nRF52840 DK vs TI CC2540
市面上能抓蓝牙Mesh的硬件不少,但我个人最常用的就两款:nRF52840 DK 和 TI CC2540 USB Dongle。它们各有各的脾气,我分别说说。
2.1.1 nRF52840 DK
这是Nordic官方的开发板,也是我目前的主力抓包工具。为什么选它?
- 原生支持BLE 5.x:Mesh基于BLE 4.x/5.x,nRF52840能抓到所有广播包和数据包,包括扩展广播(Extended Advertising)。
- 双角色同时工作:可以一边抓包,一边跑一个简单的Mesh节点做调试。我在项目里经常这么干,省掉一台设备。
- nRF Sniffer集成度高:配合Wireshark,开箱即用,几乎不用配置。
- USB + 串口双输出:抓包数据走USB,日志走串口,互不干扰。
我的建议:如果你是做Mesh产品开发,直接上nRF52840 DK。虽然比USB Dongle贵一点(大概300-400元),但稳定性和功能都值这个价。我在一个量产项目中,用DK连续抓了72小时,没丢一个包。
2.1.2 TI CC2540 USB Dongle
这是一款老将了。CC2540是TI在BLE 4.0时代的经典芯片,现在二手市场上几十块钱就能买到。
- 价格便宜:淘宝上30-50元一个,适合预算有限的初学者。
- 只支持BLE 4.0/4.2:抓不了扩展广播,但Mesh的PB-ADV和PB-GATT配网流程完全够用。
- 需要刷固件:买回来默认是HostTestRelease固件,得自己刷成Packet Sniffer固件。我第一次刷的时候,忘了装驱动,折腾了一下午。
- 稳定性一般:长时间抓包偶尔会掉线,我建议抓关键流程时用,别拿来跑通宵。
避坑指南:我曾经用CC2540抓一个Mesh重传场景,抓了半小时发现丢包率异常。排查了半天,结果是Dongle的USB接口接触不良。后来换了个带屏蔽的USB延长线,问题解决。所以,用CC2540时,USB线质量很重要。
2.1.3 硬件对比一览
| 特性 | nRF52840 DK | TI CC2540 USB Dongle |
|---|---|---|
| 支持BLE版本 | 5.x(含扩展广播) | 4.0/4.2 |
| Mesh抓包能力 | 完整(含Proxy、Relay) | 基础(PB-ADV/PB-GATT) |
| 价格 | 约300-400元 | 约30-50元 |
| 配置难度 | 低(开箱即用) | 中(需刷固件) |
| 长时间稳定性 | 优秀 | 一般 |
| 推荐场景 | 产品开发、性能调优 | 学习、快速验证 |
2.2 软件工具:三剑客
硬件选好了,接下来就是软件。我习惯把抓包工具链称为「三剑客」:Wireshark 负责解析和展示,nRF Sniffer 和 TI Packet Sniffer 负责把空口数据喂给Wireshark。
2.2.1 Wireshark
Wireshark是网络抓包的瑞士军刀。对于蓝牙Mesh,它有两个核心能力:
- BLE协议解析:从HCI层到L2CAP、ATT、GATT,再到Mesh的Network、Transport、Access层,Wireshark都能拆开给你看。
- 过滤语法:你可以用
btmesh前缀过滤所有Mesh包,比如btmesh.ctl == 1只看控制包,btmesh.opcode == 0x8201只看Config AppKey Add。
小技巧:Wireshark默认不开启Mesh解析。你需要在「编辑 → 首选项 → Protocols → BT Mesh」里,把TTL、IV Index等参数填对。否则解析出来的数据全是乱码。我刚开始就踩过这个坑,抓了一堆包,Wireshark显示的全是「Unknown」。
2.2.2 nRF Sniffer
这是Nordic提供的抓包固件+软件包。配合nRF52840 DK使用,流程很简单:
- 下载nRF Sniffer for BLE(在Nordic官网或GitHub上)。
- 把Sniffer固件烧录到DK上(用nRF Connect Programmer,拖拽就行)。
- 打开Wireshark,选择nRF Sniffer接口,开始抓包。
我个人最喜欢nRF Sniffer的一点是:它支持多通道跳频。BLE有37个数据通道,普通抓包器只能固定在一个通道上。nRF Sniffer能跟着设备跳,一个包都不漏。
关键配置:抓Mesh包时,记得在Wireshark的「nRF Sniffer」接口设置里,把「Advertising Channel」改成「37, 38, 39 all」。Mesh的PB-ADV配网和Friend Heartbeat都在广播通道上,漏掉一个你就看不到完整流程。
2.2.3 TI Packet Sniffer
TI的工具链稍微老一点,但依然能用。步骤:
- 下载TI Packet Sniffer(需要注册TI账号,免费)。
- 把CC2540刷成Sniffer固件(用TI的SmartRF Flash Programmer)。
- 打开Packet Sniffer软件,选择「Bluetooth Low Energy」模式。
- 它会把数据转成pcap格式,然后导入Wireshark分析。
注意:TI Packet Sniffer不支持多通道跳频。你只能手动选择一个通道(比如37、38或39)。抓Mesh广播包时,我建议选通道38,因为大多数Mesh设备默认在38上发PB-ADV。但如果你要抓Relay转发,就得三个通道轮流试——这也是我后来换nRF52840的主要原因。
2.3 抓包环境拓扑图
下面这张图,是我在实际项目中常用的抓包环境拓扑。你一看就明白:
2.4 环境搭建快速检查清单
每次搭建新环境,我都会过一遍这个清单。省得漏掉什么,回头抓不到包干着急。
- 硬件连接:抓包器通过USB连到PC,驱动安装成功(设备管理器里能看到对应COM口或USB设备)。
- 固件烧录:nRF52840 DK烧录了Sniffer固件;CC2540烧录了Packet Sniffer固件。
- Wireshark版本:建议用3.4以上版本,对Mesh协议支持更完整。
- Mesh解析插件:Wireshark的BT Mesh协议解析已开启,IV Index和TLL参数已配置。
- 通道设置:nRF Sniffer设为全通道跳频;TI Packet Sniffer手动选通道38。
- 抓包验证:让一个Mesh设备发送配网广播(比如按一下重置键),看Wireshark里能否抓到
btmesh.pb_adv包。
我的习惯:每次搭好环境,我都会先抓一个「Hello World」——让设备发一个简单的Config Beacon。如果Wireshark里能看到完整的Network PDU和Transport PDU,说明环境OK。如果只看到一堆乱码,嗯,八成是IV Index没配对。