在使用EN-Dongle 捕获和解析广播包之前,我们先了解一下BLE 报文的结构,之后,再对捕获的广播包进行分析。在学习 BLE 的时候,下面两个文档是极其重要的,这是 SIG 发布的蓝牙的核心协议和核心协议增补。 • 核心协议 Core_v4.2。 • 核心协议增补 CSS v6。 虽然这两个文档是蓝牙技术的根本,但是遗憾的是:通过这两个文档学习蓝牙并不是那么容易的,阅读和理解起来很费力。尤其是初学者在阅读这两个文档的时候,感觉无从下口。所以,本文在分析报文的过程中,会明确指出协议文档在什么地方定义了他们,让我们有目的的去查阅协议文档,做到知其然也知其所以然,这样,学习起来就会轻松很多。 1. BLE 报文结构 BLE 报文结构如下,他由下图所示的各个域组成。因为有的域的长度超过了一个字节,所以在传输的过程中就涉及到多字节域中哪个字节先传输的问题,BLE 报文传输时的字节序和比特序如下: • 字节序:大多数多字节域是从低字节开始传输的。注意,并不是所有的多字节域都是从低字节开始传输的。 • 比特序:各个字节传输时,每个字节都是从低位开始。 图1:BLE 报文结构 1.1 前导 前导是一个8 比特的交替序列。他不是01010101 就是10101010,取决于接入地址的第一个比特。 • 若接入地址的第一个比特为0:01010101 • 若接入地址的第一个比特为1:10101010 接收机可以根据前导的无线信号强度来配置自动增益控制。 1.2 接入地址 接入地址有两种类型:广播接入地址和数据接入地址。 • 广播接入地址:固定为0x8E89BED6,在广播、扫描、发起连接时使用。 • 数据接入地址:随机值,不同的连接有不同的值。在连接建立之后的两个设备间使用。 对于数据信道,数据接入地址是一个随机值,但需要满足下面几点要求: 1) 数据接入地址不能超过 6 个连续的“0”或“1”。 2) 数据接入地址的值不能与广播接入地址相同。 3) 数据接入地址的4 个字节的值必须互补相同。 4) 数据接入地址不能有超 24 次的比特翻转(比特0 到 1 或 1 到 0,称为1 次比特翻转)。 5) 数据接入地址的最后 6 个比特需要至少两次的比特翻转。 6) 符合上面条件的有效随机数据接入地址大概有231 个。 1.3 报头 1.3.1 广播报文报头 报头的内容取决于该报文是广播报文还是数据报文。广播报文的报头如下图所示: 图2:广播报文报头 广播报文的报头包含4bit 广播报文类型、2bit 保留位、1bit 发送地址类...