4. 互操作测试环境搭建
互操作测试的核心不是“把设备连上”,而是让被测链路、对端设备和观测工具三者同时处于可控、可复现的状态。Nordic 生态里可选硬件很多,选型时先问三个问题:被测角色是 Central 还是 Peripheral?需要观察的是空口、HCI 还是应用层?测试用例是否需要长时间稳定运行?这三个答案基本决定了开发板、Dongle、抓包工具和组网拓扑的组合方式。
一、硬件选型:按角色和观测点分工
nRF52 DK(如 PCA10040)和 nRF52840 DK(PCA10056)是最常用的主控板。DK 自带 J-Link OB 调试器,可直接烧写、RTT 打印和供电,适合做被测端或对端。nRF52840 支持蓝牙 5 的 2M PHY、Coded PHY 和广播扩展,做长距离或高速率互操作用例时应优先选它;nRF52 DK 只支持 1M PHY,适合基础 GATT 和连接参数测试。
nRF52840 Dongle(PCA10059)体积小、成本低,插在 PC 上可作为 Central 或 Peripheral,配合 nRF Connect for Desktop 使用。它的价值在于“PC 侧对端”:当手机做 Central 时,Dongle 可做 Peripheral 提供固定服务;当需要批量扫描或压力测试时,多个 Dongle 可并行运行。注意 Dongle 没有板载调试器,烧写需通过 USB 进入 DFU 模式,或用 nRF52840 DK 的 Debug Out 引脚外接 SWD。
手机和平板是互操作测试中不可替代的真实对端。Android 侧建议覆盖至少一个高通平台和一个联发科平台,iOS/iPadOS 侧覆盖一台 iPhone 和一台 iPad,因为不同协议栈在连接参数更新、MTU 协商、配对流程上的行为差异往往就是互操作问题的来源。PC 适配器方面,若 PC 自带蓝牙,可直接用系统协议栈做对端;若需要更可控的 HCI,可选用 CSR8510 类 USB 蓝牙适配器配合 Wireshark 抓 HCI,或直接用 nRF52840 Dongle 作为 PC 侧控制器。
抓包工具决定“能不能看见问题”。nRF Sniffer 基于 nRF52840 Dongle,配合 Wireshark 可抓取空口广播包和数据包,支持跟随连接、解密和显示 RSSI,是 Nordic 生态里最顺手的空口观测手段。若需要同时看 HCI 和空口,可让 PC 适配器走 HCI 抓包、Dongle 走空口抓包,两边时间戳对齐后交叉比对。Ellisys、Frontline 等专业分析仪功能更强,但成本高,适合定位疑难时序问题。
二、组网方式:三种典型拓扑
第一种是“DK 对手机”的最小闭环:DK 烧写 Peripheral 例程,手机用 nRF Connect 或自研 App 做 Central,Dongle 插在 PC 上跑 nRF Sniffer 抓空口。这种拓扑适合验证连接建立、服务发现、读写特征值和通知订阅。第二种是“Dongle 对手机”:Dongle 做 Peripheral,手机做 Central,DK 作为调试器给 Dongle 供电和烧写。这种拓扑适合把对端固定在 PC 侧,便于脚本化重复执行。第三种是“DK 对 DK + 手机旁路”:两块 DK 分别做 Central 和 Peripheral,手机只作为干扰源或第三方观测者,适合验证连接参数更新、PHY 切换和信道地图等链路层行为。
组网时要注意三点。第一,供电和地线要干净,USB Hub 供电不足会导致 Dongle 掉线,建议用带外部供电的 Hub。第二,天线方向要固定,测试时不要用手握住板载天线区域,否则 RSSI 波动会掩盖真实问题。第三,抓包 Dongle 应尽量靠近被测链路,但不要贴在同一块板上,避免近场耦合导致抓包失真。
三、环境搭建的实际操作要点
以“DK 对手机”拓扑为例,搭建顺序如下。先用 nRF Connect Programmer 或 nrfjprog 给 DK 烧写 Peripheral 例程,确认 RTT 日志能打印广播启动信息。然后把 nRF52840 Dongle 插到 PC,用 nRF Connect for Desktop 的 Programmer 烧写 Sniffer 固件,再在 Wireshark 里选择 nRF Sniffer 接口并设置目标地址过滤。手机打开 nRF Connect,扫描到 DK 的广播名后发起连接,此时 Wireshark 应能看到 CONNECT_IND 和后续的数据包交互。
# 用 nrfjprog 烧写 DK 上的 Peripheral 例程
nrfjprog --program ble_app_uart_pca10056_s140.hex --chiperase --reset
# 用 nrfutil 给 Dongle 烧写 Sniffer 固件(DFU 模式)
nrfutil dfu usb-serial -pkg sniffer_pca10059.zip -p COM7
判断环境是否可用,看三个信号:Wireshark 能持续抓到广播包且 RSSI 在 -40 到 -70 dBm 之间;手机能完成服务发现并读到特征值;DK 的 RTT 日志中连接事件计数稳定增长。若抓不到包,先检查 Sniffer 的目标地址是否填错、信道是否跟随连接跳频;若连接频繁断开,优先怀疑供电和连接参数,而不是协议栈 bug。
btle 或 btatt,并打开“Decode As”中的 nRF Sniffer 解析,这样能直接看到 ATT 操作码和句柄,减少手工解析字节的时间。四、常见选型误区
第一个误区是“一块 DK 打天下”。DK 做 Central 时若同时跑 RTT 日志和抓包,USB 带宽和中断负载会互相干扰,建议抓包用独立 Dongle。第二个误区是“手机型号随便选”。同一品牌不同基带版本的互操作表现可能完全不同,测试矩阵里应记录手机型号、系统版本和蓝牙芯片平台。第三个误区是“只看应用层日志”。很多互操作问题发生在连接参数更新或 PHY 切换阶段,应用层日志看不到,必须靠空口抓包定位。第四个误区是“忽略 Dongle 的 DFU 模式”。Dongle 烧写失败后可能停留在 bootloader,此时 PC 识别到的 VID/PID 与正常模式不同,需要重新进入 DFU 再烧。