一、前言
本篇将结合蓝牙协议文件和抓包数据分析链路层LL_START_ENC_REQ以及LL_START_ENC_RSP指令。
二、阅读说明
1、泰凌微芯片学习者,前期使用过该芯片。
2、能够知道怎么进行创建工程,下载代码。
3、有一块开发板,板上的芯片可以是8251,8253或者8258。
三、正文
1、使用的SDK使用的sdk和demo为该篇文章描述的“手把手教你:BLE设备如何和手机进行加密配对绑定”;
2、配对第二阶段所处的位置
如上图红色框出来的,这个是配对第二阶段,在第二阶段的时候我们使用的是Just Works方式,见上图红色圈出来的。
3、链接层时序所处的位置
如上图所示,链接层的时序位置处于配对第二阶段的最后面,在主从机计算完了STK的后面。
4、LL_START_ENC_REQ和LL_START_ENC_RSP描述
4.1、LL_START_ENC_REQ和LL_START_ENC_RSP在链接层时序中所处的位置
该流程解释如下:
- 从机发送LL_START_ENC_REQ指令给到主机主机回复LL_START_ENC_RSP指令给到从机从机回复LL_START_ENC_RSP指令给到主机
4.2、LL_START_ENC_REQ和LL_START_ENC_RSP
从描述中可以看到,除了从机发送的LL_START_ENC_REQ指令没有加密,其他的指令都加密了,换句话说,从此时开始,所有链路层都开始了加密。
5、LL_START_ENC_REQ和LL_START_ENC_RSP数据结构分析
5.1、LL Control PDU数据结构
由上图所示,Payload由两个字段组成,第一个是Opcode操作码,第二个是CtrData。
5.2、LL_START_ENC_REQ数据结构
由上图可以,LL_START_ENC_REQ数据结构为Opcode为0x05,没有CtrData。
5.3、LL_START_ENC_RSP数据结构
由上图可以,LL_START_ENC_RSP数据结构为Opcode为0x06,没有CtrData。
6、抓包数据展示
6.1、LL_START_ENC_REQ和LL_START_ENC_RSP指令抓包展示
6.2、LL_START_ENC_REQ指令展开
- 操作码(Opcode):0x05
备注:由上图可以看出抓包的数据和第5.2小节中内容一样。
6.2、LL_START_ENC_RSP指令展开
- 操作码(Opcode):0x06
备注:由上图可以看出抓包的数据和第5.3小节中内容一样。
五、结尾
本篇结合蓝牙协议文件和抓包数据分析链路层LL_START_ENC_REQ以及LL_START_ENC_RSP指令,接下来开始进入配对第三阶段。
我写了一个合集,不依赖 Nordic、泰凌、瑞萨等厂商商用 BLE 协议栈,从无线底层链路层入手,从零手写 BLE 广播扫描逻辑,拆解蓝牙广播包、信道切换、射频调度、广播数据解析完整流程,适合想吃透 BLE 底层、自主开发蓝牙工具、规避商用协议栈授权限制的嵌入式开发者。
185