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使用,流程很简单:

  1. 下载nRF Sniffer for BLE(在Nordic官网或GitHub上)。
  2. 把Sniffer固件烧录到DK上(用nRF Connect Programmer,拖拽就行)。
  3. 打开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的工具链稍微老一点,但依然能用。步骤:

  1. 下载TI Packet Sniffer(需要注册TI账号,免费)。
  2. 把CC2540刷成Sniffer固件(用TI的SmartRF Flash Programmer)。
  3. 打开Packet Sniffer软件,选择「Bluetooth Low Energy」模式。
  4. 它会把数据转成pcap格式,然后导入Wireshark分析。

注意:TI Packet Sniffer不支持多通道跳频。你只能手动选择一个通道(比如37、38或39)。抓Mesh广播包时,我建议选通道38,因为大多数Mesh设备默认在38上发PB-ADV。但如果你要抓Relay转发,就得三个通道轮流试——这也是我后来换nRF52840的主要原因。

2.3 抓包环境拓扑图

下面这张图,是我在实际项目中常用的抓包环境拓扑。你一看就明白:

蓝牙Mesh抓包环境拓扑图 Mesh设备 (灯/传感器/开关) 抓包硬件 nRF52840 DK / CC2540 PC / 笔记本 Wireshark + Sniffer BLE广播/数据包 USB / 串口 抓包范围说明 抓包硬件监听所有BLE广播通道(37/38/39),捕获Mesh设备发出的所有包 包括:PB-ADV配网包、Network PDU、Relay转发包、Friend Heartbeat 数据流方向 ① 空口捕获 ② 硬件转发 ③ Wireshark解析 ④ 分析调优

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没配对。