写在前面:写在前面:本文参考了 BLE4.0 低功耗蓝牙 协议 总结 ,对其进行了缩减,整理出了个人能理解的感觉比较基本的内容,有问题请随时跟我沟通 个人QQ:993650814.

BLE 4.0 协议知识点总结(一) 请参考如下链接 BLE 4.0 协议知识点总结(一)

1、连接事件(CONNECT REQ)报文的组成:

    CONNECT REQ的payload部分如下:

android使用BLE协议 ble4.0协议_android使用BLE协议

    InitA是发起者的设备地址,AdvA为广播者的设备地址。

    LLData部分报文组成:

android使用BLE协议 ble4.0协议_android使用BLE协议_02

    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:主机时钟精度:

android使用BLE协议 ble4.0协议_android使用BLE协议_03

2、广播和扫描回应数据的结构  

android使用BLE协议 ble4.0协议_android使用BLE协议_04

    广播数据和扫描回应数据都是31Bytes,包括有意义的部分和没意义的部分,有意义的部分有很多AD Structure组成,AD Structure的第一个字节为Length,数据Data部分包括 AD Type和AD Data部分。

   2.1  AD Type共11种:

android使用BLE协议 ble4.0协议_Data_05

    2.2    AD Data

    2.2.1 Flags:

android使用BLE协议 ble4.0协议_链路层_06

    2.2.2   SERVICE

android使用BLE协议 ble4.0协议_数据_07

    2.2.3  LOCAL NAME

android使用BLE协议 ble4.0协议_android使用BLE协议_08

    2.2.4  TXPOWER  LEVEL

android使用BLE协议 ble4.0协议_android使用BLE协议_09

    2.2.5 Slave Connection Interval Range

    这个参数作用是当主机连接时,可以参考从机所期望的连接参数。

    2.2.6 Service Solicitation

    这个参数是从机希望连接他的主机具备哪些服务

    

android使用BLE协议 ble4.0协议_Data_10

    2.2.7 Manufacture Specific Data

    厂商数据,可以存放生产商的名字或者蓝牙地址等信息。

android使用BLE协议 ble4.0协议_android使用BLE协议_11

3.    广播PDU   

     3.1    ADV_IND(通用广播)、ADV_NOCONNECT_IND(不可连接广播)、ADV_SCAN_IND(可扫描广播) PDU

        这三种广播PDU的Payload是一样的

android使用BLE协议 ble4.0协议_android使用BLE协议_12

    3.2    ADV_DIRECT_IND(定向广播)

        这种广播的报文只有两个地址,一个是广播者自己的地址,一个是希望连接的对方设备的地址。

android使用BLE协议 ble4.0协议_Data_13

4、扫描 PDU

    4.1 扫描请求PDU(SCAN_REQ)

    SCAN_REQ的PDU的Payload和ADV_DIRECT_IND(定向广播的)Payload格式一致。

android使用BLE协议 ble4.0协议_android使用BLE协议_14

4.2 扫描回应PDU(SCAN_RSP)

    扫描回应的PDU和ADV_IND(通用广播)的PDU格式一致。

android使用BLE协议 ble4.0协议_链路层_15

5. 数据通道PDU

    数据通道的报文分为两大类:链路层数据报文(LL Data PDU)和链路层控制报文(LL Control PDU)。

    再次说明下数据通道下的PDU格式(BLE 4.0 协议知识点总结(一)已经讲过):

android使用BLE协议 ble4.0协议_链路层_16

    其中 LLID用来指示是链路层数据报文(LL Data PDU)还是链路层控制报文(LL Control PDU)。

android使用BLE协议 ble4.0协议_Data_17

 

5.1 LL Data PDU

    当LLID为01b或者10b时,表示为链路层数据报文。

    LLID = 01b:要么将L2CAP层的数据分解成多包发送,要么L2CAP层的数据包是一个空包,如果是一个空包,则PDU的净荷长度(Length)的5bits为00000b。

    LLID = 10b:要么表示L2CAP层的一个起始包,要么表示L2CAP的包可以一次性发完,这种情况下,DU的净荷长度(Length)的5bits是不可以为00000b的。