写在前面:写在前面:本文参考了 BLE4.0 低功耗蓝牙 协议 总结 ,对其进行了缩减,整理出了个人能理解的感觉比较基本的内容,有问题请随时跟我沟通 个人QQ:993650814.
BLE 4.0 协议知识点总结(一) 请参考如下链接 BLE 4.0 协议知识点总结(一)
1、连接事件(CONNECT REQ)报文的组成:
CONNECT REQ的payload部分如下:
InitA是发起者的设备地址,AdvA为广播者的设备地址。
LLData部分报文组成:
AA: Accress Adress,4Bytes的接入地址。
WinSize:这个值来决定传输窗口的时间,传输窗口时间:transmitWindowSize=WinSize * 1.25ms。
WinOffset:传输窗口偏移时间:transmitWindowOffset = WinOffset * 1.25ms
Interval:连接间隔时间 connInterval = Interval * 1.25ms
Latency:从机潜伏次数,BLE 4.0 协议知识点总结(一) 中有讲到。
Timeout:这个就是BLE 4.0 协议知识点总结(一) 中提到的监管超时,connSupervision = Timeout*10ms。
ChM:信道地图。
Hop:自适应调频中使用的调频增量。
SCA:主机时钟精度:
2、广播和扫描回应数据的结构
广播数据和扫描回应数据都是31Bytes,包括有意义的部分和没意义的部分,有意义的部分有很多AD Structure组成,AD Structure的第一个字节为Length,数据Data部分包括 AD Type和AD Data部分。
2.1 AD Type共11种:
2.2 AD Data
2.2.1 Flags:
2.2.2 SERVICE
2.2.3 LOCAL NAME
2.2.4 TXPOWER LEVEL
2.2.5 Slave Connection Interval Range
这个参数作用是当主机连接时,可以参考从机所期望的连接参数。
2.2.6 Service Solicitation
这个参数是从机希望连接他的主机具备哪些服务
2.2.7 Manufacture Specific Data
厂商数据,可以存放生产商的名字或者蓝牙地址等信息。
3. 广播PDU
3.1 ADV_IND(通用广播)、ADV_NOCONNECT_IND(不可连接广播)、ADV_SCAN_IND(可扫描广播) PDU
这三种广播PDU的Payload是一样的
3.2 ADV_DIRECT_IND(定向广播)
这种广播的报文只有两个地址,一个是广播者自己的地址,一个是希望连接的对方设备的地址。
4、扫描 PDU
4.1 扫描请求PDU(SCAN_REQ)
SCAN_REQ的PDU的Payload和ADV_DIRECT_IND(定向广播的)Payload格式一致。
4.2 扫描回应PDU(SCAN_RSP)
扫描回应的PDU和ADV_IND(通用广播)的PDU格式一致。
5. 数据通道PDU
数据通道的报文分为两大类:链路层数据报文(LL Data PDU)和链路层控制报文(LL Control PDU)。
再次说明下数据通道下的PDU格式(BLE 4.0 协议知识点总结(一)已经讲过):
其中 LLID用来指示是链路层数据报文(LL Data PDU)还是链路层控制报文(LL Control PDU)。
5.1 LL Data PDU
当LLID为01b或者10b时,表示为链路层数据报文。
LLID = 01b:要么将L2CAP层的数据分解成多包发送,要么L2CAP层的数据包是一个空包,如果是一个空包,则PDU的净荷长度(Length)的5bits为00000b。
LLID = 10b:要么表示L2CAP层的一个起始包,要么表示L2CAP的包可以一次性发完,这种情况下,DU的净荷长度(Length)的5bits是不可以为00000b的。