请选择 进入手机版 | 继续访问电脑版
查看: 908|回复: 0

[技术交流] 认识BLE 5协议栈 —— 链路层(中)

[复制链接]

108

主题

163

帖子

618

积分

利尔达员工

Rank: 9Rank: 9Rank: 9

积分
618
发表于 2020-6-30 20:27:59 | 显示全部楼层 |阅读模式
5 广播信道PDU
广播信道包括主要广播信道和次要广播信道,在这些信道中可以传输广播数据、扫描数据、发起连接数据和扩展广播数据。
广播信道中的传输的数据PDU结构如下:
字段 Header Payload
长度 2 octets 1 - 255 octets

其中Header字段的结构如下:

字段 PDU Type RFU ChSelTxAdd RxAdd Length
长度 4 bits 1 bit 1 bit 1 bit 1 bit8 bits

  • PDU Type:PDU数据的类型,具体而言就是不同的广播数据。
  • RFU:For Future Use,即暂时不用。
  • ChSel:信道选择。
  • TxAdd:发送数据的设备地址类型,如果该位是0表示public address,1表示random address。
  • RxAdd:接收数据的设备地址类型,如果该位是0表示public address,1表示random address。
  • Length:Payload的长度。有效范围为1 – 255字节。

      
5.1 广播PDU
        

其中,AUX缩写表示辅助(Auxiliary),EXT缩写表示扩展(Extend)。
5.2 扫描PDU
PDU类型 Payload内容
SCAN_REQ 扫描设备地址,广播设备地址
SCAN_RSP 广播设备地址,扫描响应数据
AUX_SCAN_REQ 扫描设备地址,广播设备地址
AUX_SCAN_RSP 广播设备地址,Aux指针,发送功率等级,ACAD,广播数据
5.3 连接PDU
PDU类型 Payload内容
CONNECT_IND 发起设备地址,广播设备地址,LLData
AUX_CONNECT_REQ 发起设备地址,广播设备地址,LLData
AUX_CONNECT_RSP 广播设备地址,目标设备地址


其中LLData包含了建立连接需要用到的参数信息,如下:
字段 AA CRCInit WinSize WinOffset Interval LatencyTimeoutChM HopSCA
长度4 octets 3 octets 1 octet 2 octets 2 octets 2 octets 2 octets 5 octets 5bits 3bits
  • AA:链路层的访问地址。
  • CRCInit:校验运算的初值,由链路层随机生成。
  • WinSize:建立连接时的连接窗口。
  • WinOffset:建立连接时的连接窗口偏移量。
  • Interval:连接间隔。
  • Latency:从设备的握手潜伏期。
  • Timeout:从设备断开的超时时间。
  • ChM:信道占用图。该参数共40bit,第1位表示信道0,第2位表示信道1,以此类推。前37个比特位代表37个数据信道,如果对应的信道曾经被使用过,则设置1,否则设置0。
  • Hop:跳频算法的增量,它的范围是5-16。
  • SCA:睡眠时钟精度(Sleep Clock Accuracy)。SCA的取值与睡眠时钟精度的关系如下表:
SCA 睡眠时钟精度
0 250ppm – 500ppm
1 150ppm – 250ppm
2 100ppm – 150ppm
3 75ppm – 100ppm
4 50ppm – 75ppm
5 30ppm – 50ppm
6 20ppm – 30ppm
7 0 – 20ppm



5.4 扩展广播PDU
扩展广播是BLE 5新增的广播类型,这里将他们单独提取出来如下:
  • ADV_EXT_IND
  • AUX_ADV_IND
  • AUX_SCAN_RSP
  • AUX_SYNC_IND
  • AUX_CHAIN_IND
  • AUX_CONNECT_RSP
这些PDU具有相同的数据结构:
字段 Extended Header Length AdvMode Extended Header AdvData
长度 6 bits 2 bits 0 – 63 octets 0 – 254 octets


  • Extended Header Length:Extended Header字段的长度,它的有效范围是0到63。
  • AdvMode:广播事件发生时该设备所处的模式,它与各种模式的对应关系如下:
AdvMode 模式
00b Non-connectable + non-scannable
01b Connectable + non-scannable
10b Non-connectable + scannable
Extended Header:扩展协议头,其结构如下:

字段 Extended Header Flags AdvA TargetA RFU AdvData Info(ADI) AuxPtr SyncInfoTxPower ACAD
长度 1 octet 6 octet 6 octets 1 octet 2 octets 3 octets 18 octet2 1 octet varies

  • 各字段含义:
    • Extended Header Flags:扩展协议头各个字段的开关标志位。该字段有8个比特位,前7位分别对应AdvA、TargetA、RFU、ADI、AuxPtr、SyncInfo、TxPower,如果置1表示包含该字段,如果置0表示不包含。第8个比特位不与ACAD字段关联,暂不使用。
    • AdvA:广播设备地址。
    • TargetA:扫描设备或发起设备地址。
    • ADI:广播数据信息。该字段分两部分:DID(Advertising Data ID)和SID(Advertising Set ID),如果一个广播包由多个子包组成,那么这些子包的SID相同,DID不同,如果DID也相同,则说明该包内容与前包内容一样。
    • AuxPtr:辅助广播包的指针(Auxiliary Pointer)。它告诉链路层下一个辅助广播包的信道号和时间偏移。
    • SyncInfo:周期广播包信息。‘
    • TxPower:设备输出功率。
    • ACAD:额外的广播数据(Additional Controller Advertising Data)。它能包含少量的广播数据,可以配合普通广播包使用。
  • AdvData:扩展广播数据,单个PDU可达255字节。

6. 数据信道PDU
数据信道PDU结构如下:
字段 Header Payload MIC(Optional)
长度 2 octets 0 – 251 octets 4 octets


Header:协议头。其结构如下:
字段 LLID NESN SN MD RFU Length
长度 2 bits 1 bit 1 bit 1 bit 3 bits 8 bits


  • 其字段含义如下:
    • LLID:链路ID(Link Layer ID),用以区分该PDU是一个数据还是控制命令。当LLID=11b,表示该PDU是一个控制命令。
    • NESN:下一个期望的PDU序号(Next Expected Sequence Number)。
    • SN:当前PDU序号(Sequence Number)。SN与NESN合作,可以推测出该PDU是一个新数据,还是对上一个老数据的重传,从而实现流程控制。
    • MD:数据未完(More Data),表示后续还有数据片段。
    • Length:Payload+MIC的总长度,有效范围为0-255字节。
  • Payload:装载L2CAP层数据包或链路层控制命令。对于数据包,最大Payload长度为251字节。L2CAP数据可能被分段,如果当前Payload是L2CAP数据包的开头或结尾片段,则LLID=10b,否则LLID=01b。
  • MIC:完整性检测(Message Integrity Check)。用于确认加密的Payload是否完整有效。当Payload不加密或者Payload长度为0时,MIC字段不存在。
如果传输链路层可控制命令,则将控制命令装载在Payload字段中。
控制命令的结构如下:
Opcode CtrData
长度 1 octet 0 – 26 octets


  • Opcode:操作码,代表不同的控制命令。
  • CtrData:控制参数。
链路层的所有控制命令如下:

上述26个控制命令,可以分为以下几类:
  • 加密:包括加密开始、暂停。
  • 连接控制:包括连接参数更新,连接终止,PING。
  • 信息交换:包括链路层功能交换,物理层信息交换,版本信息,信道图信息。
  • 扩展功能:物理层更新,包长度更新。
  • 杂项:错误响应、命令拒绝。







本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表