3.2. USB串口(CDC)协议破解-蓝牙PTS Dongle接口破解
最近在用蓝牙Sig的PTS Dongle进行PTS测试,另外有一个项目是HCI测试Dongle的,之前主要的接口是USB的,BLE这个版本接口是UART的,有时候可以做对比测试用用,所以需要研究下其接口行为。既然PTS上位机能使用这个dongle,走的肯定是HCI协议,看PTS的日志交互也是HCI协议,所以应该直接获取到其USB接口中UART的配置是什么就行。
官网链接在这:Bluetooth SIG
这个设备的datasheet:CS-PB-BL654-USB_NORDIC_ZEPHYR_v1_0.pdf (connectivity-staging.s3.us-east-2.amazonaws.com)
准备工作
PTS Dongle
从淘宝搜索451-00004
,就可以买到。默认情况下,PTS软件默认没有预烧录特殊固件(默认的固件应该也能用,但没研究)。按照PTS软件的手册说明,下载firmware就行。
wireshark+USBPcap
要抓USB的交互,当然要借助工具了,手头暂时没有USB抓包设备,不过wireshark+USBPcap来抓USB的数据包。这个自行安装,可以参考:使用wireshark抓取USB包_xqhrs232的博客-CSDN博客_wireshark抓usb包
SSCOM
串口调试助手,不用多说了,直接用就行,或者其他支持HEX交互的串口工具即可。
USB串口(CDC)协议破解
既然是串口,只需要知道其串口配置就行,查了下CDC协议Class definitions for Communication Devices 1.2 | USB-IF,主要就是通过SET_LINE_CODING(0x20)
和SET_CONTROL_LINE_STATE(0x22)
来设置串口的参数。
SET_LINE_CODING(0x20)
这个命令用于设置串口波特率,停止位,奇偶位以及数据位等参数信息。
通过抓取日志可以看到Data Fragment: 40420f00000008
,解析如下:
dwDTERate
-波特率:0x000f4240 = 1Mbit/sbCharFormat
-停止位:0x00, 0-1 Stop bitbParityType
-奇偶位:0x00, NonebDataBits
-数据位:0x08, 8
SET_CONTROL_LINE_STATE(0x22)
这个主要设置流控这些参数的。也就是RTS
和DTR
功能开关。
抓包后可以看到Value=1,也就是D0=1,开启了DTR
,没开RTS
。
SSCOM测试
串口参数知道了,直接进行测试,拿熟悉的SSCOM测试即可,按照HCI的H4协议,发送01 03 0c 00(HCI Reset Command)
,可以看到收到了04 0e 04 01 03 0c 00(HCI Command Complete Event - Reset)
。
测试通过,之后直接使用即可。