本帖只求记录,不求回复,记录咱学习的一点一滴。
链路层PARTB-2 空中接口数据包
2.1数据包格式
链路层只有一种数据包格式,可用于广播信道及数据信道
最短包长为10个字节,最长为47个字节。 2.1.1引导码 引导码长8位,在接收中用于频率同步,数据速率同步和AGC调整。 在广播通道,引导码为10101010 在数据通道,如果访问地址(AccessAddress)最低位为1,引导码为01010101,否则为10101010 2.1.2访问地址 访问地址长32位 所有的广播信道包访问地址为10001110100010011011111011010110b(0x8E89BED6) 数据信道访问地址必须与其它任何已连接信道访问地址不一样,初始化者在初始化状态产生数据信道访问地址,并保证满足以下要求: 1、 不能有连续超过6个以上的连接0或1 2、 不能与广播信道访问地址相同 3、 不能与广播信道访问地址只有1位之差 4、 数据信道访问地址不能四个字节都相同 5、 不能有24位以上的变化 6、 高6位必须有超过2位以上的变化 2.1.3 PDU 在广播与数据信道上有其对应的数据格式 2.1.4 CRC 仅包括PDU的CRC 2.2预留以备用 2.3 广播信道PDU 广播信道PDU包括一个16位的数据头及可变长度的负载。
数据头定义如下:
PDU Type 决定了PDU的类型
TxAdd:0,表示发送方地址为公共地址;1,表示发送方地址为随机地址 RxAdd:0,表示接收方地址为公共地址;1,表示接收方为随机地址 Length:负载数据的字节长度,6-37. 2.3.1广播PDU类型 ADV_IND 可连接非定向广播事件 ADV_DIRECT_IND 可连接定向广播事件 ADV_NONCONN_INDI不可连接非定向广播事件 ADV_SCAN_IND可扫描非定向广播事件 2.3.1.1 ADV_IND(无目的地广播) ADV_IND用于可连接非定向广播事件中,具有以下格式,
数据头中的TxAdd决定了在AdvA中的地址是公共地址(TxAdd = 0)还是随机地址(TxAdd= 1),AdvData中可包含广播者的数据。 2.3.1.2 ADV_DIREC_IND(指定地址广播) ADV_DIREC_IND用于可连接定向广播事件中,具有以下格式:
数据头中的TxAdd决定了在AdvA中的地址是公共地址(TxAdd= 0)还是随机地址(TxAdd = 1),RxAdd决定了在InitA中的地址是公共地址(RxAdd = 0)还是随机地址(RxAdd = 1)。 2.3.1.3ADV_NONCONN_IND ADV_NONCONN_IND用于不可连接非定向广播事件,具有以下格式:
数据头中的TxAdd决定了在AdvA中的地址是公共地址(TxAdd= 0)还是随机地址(TxAdd = 1),AdvData中可包含广播者的数据。 2.3.1.4 ADV_SCAN_IND= ADV_DISCOVER_IND ADV_SCAN_INDE用于可扫描非定向广播事件,具有以下格式:
数据头中的TxAdd决定了在AdvA中的地址是公共地址(TxAdd= 0)还是随机地址(TxAdd = 1),AdvData中可包含广播者的数据。 2.3.2扫描 PDUs 下面的广播信道PDU类型称为扫描PDUs,它们用于以下两种状态 1、 SCAN_REQ:扫描请求,由扫描状态的设备发出,被广播状态的设备接收 2、 SCAN_RSP:扫描应答,由广播状态设备发出,被扫描状态设备接收 2.3.2.1 SCAN_REQ SCAN_REQ具有以下格式
数据头中的TxAdd指示了扫描者的地址域ScanA是公共地址(TxAdd =0)还是随机地址(TxAdd = 1);RxAdd指示了广播者的地址域AdvA是公共地址(RxAdd = 0)还是随机地址(RxAdd = 1)。 2.3.2.2 SCAN_RSP SCAN_RSP具有以下格式:
数据头中的TxAdd指示了广播者的地址域AdvA是公共地址(TxAdd =0)还是随机地址(TxAdd = 1)。 2.3.3 初始化 PDUs 以下的广播信道PDU类型称为初始华PDUs CONNECT_REQ 连接请求 连接请求PDU由初始化状态的设备发出,被广播状态的设备接收。 2.3.3.1 CONNECT_REQ CONNECT_REQ具有以下格式:
数据头中的TxAdd指示了初始化者的地址域InitA是公共地址(TxAdd = 0)还是随机地址(TxAdd = 1)。
RxAdd指示了广播者的地址域AdvA是公共地址(RxAdd =0)还是随机地址(RxAdd = 1),以上LLData域有如下格式:
LLData由10 个域组成: AA:包括了连接者访问地址(Access Address) CRCInit:连接者使用的CRC运算初始值,是一个随机值 WinSize:决定传输窗口大小(transmitWindowSize),transmitWindowSize = WinSize * 1.25 ms. WinOffset:决定传输窗口偏置值(transmitWindowOffsetvalue),transmitWindowOffset= WinOffset* 1.25 ms. Interval:决定连接间隔(connInterval),connInterval = Interval* 1.25 ms. Latency:决定连接从机等待时间(connSlaveLatencyvalue), connSlaveLatency = Latency. Timeout:决定连接从机超时值(connSupervisionTimeoutvalue),connSupervisionTimeout= Timeout * 10 ms. ChM:ChM描述了使用和没有使用的数据信道(Usedand Unused data channels),每一个数据信道由一个位表示,数据信道0由bit0表示,对应位为0表示信道没有被使用,如果为1表示信道已经被占用,位37,38,39预留使用,由该域查找数据信道索引时,应该注意排除广播信道。 Hop:决定了下一跳增加的数据信道(hopIncrement),该值为一个随机值,范围为5-16。 SCA:决定了主机睡眠系统时钟最大误差(masterSCA)
2.4数据信道 PDU 数据信道的PDU包括了一个16位的数据头,一个可变长度的负载,还可能包括一个消息完整性校验域。
数据头格式如下:
其中有效域定义如下:
非加密连接及数据信道PDU中0字节负载长度的加密连接中不包括MIC,数据信道PDU负载不为0的加密连接必须使用MIC. 负载格式由LLID决定,如果LLID = 01b或10b,数据信道PDU负载域是一个LL DATA PDU,如果LLID = 11b,数据信道PDU负载域是一个LL CONTROL PDU,LLID = 00b预留。 数据头的长度字节决定了负载和MIC长度,范围为0-31,如果存在MIC,负载长度最大为27. 2.4.1 LL DATA PDU LL DATA PDU是数据信道PDU中用于发送L2CAP数据,此时LLID需要被设置为01b或10b。 如果 LLID = 01b,并且数据头的负载长度域为0,则这是一个空PDU。主机的连接可能发送一个空PDU给从机,以允许从机回复任意一个数据信道PDU,包括空PDU. 如果 LLID = 10b,则数据头的负载长度域不能设置为0 2.4.2 LL CONTROL PDU LL CONTROL PDU在数据信道PDU中用于控制链路层的连接。 LL CONTROL PDU具有以下数据格式:
所有LL CONTROL PDU的数据头中的长度域不能为0,所有LL CONTROL PDU都是固定长度,长度由Opcode决定。Opcode决定了不同类型的的LL CONTROL PDU.
CtrData由LL CONTROL PDU的类型决定。 如果接收到的LL CONTROL PDU是不被使用或不支持的,设备将返回LL_UNKNOW_RST PDU。如果接收到的LL CONTROL PDU的Opcode是无效的,如设置为预留值,或者CtrData域是无效值,设备将返回LL_UNKNOW_RST PDU。 2.4.2.1 LL_CONNECTION_UPDATE_REQ 该PDU具有以下格式:
WinSize:决定了传输时间窗口时间(transmitWindowSize),transmitWindowSize= WinSize * 1.25 ms. WinOffset:决定了传输时间窗口偏置值(transmitWindowOffsetvalue),transmitWindowOffset = WinOffset * 1.25 ms. Latency:决定连接从机等待时间(connSlaveLatencyvalue),connSlaveLatency = Latency. Timeout:决定连接从机超时值(connSupervisionTimeoutvalue),connSupervisionTimeout= Timeout * 10 ms. Instant:决定连接时间(connInstant),1-32767 2.4.2.2LL_CHANNEL_MAP_REQ 该PDU具有以下数据格式:
ChM:ChM描述了使用和没有使用的数据信道(Usedand Unused data channels),每一个数据信道由一个位表示,数据信道0由bit0表示,对应位为0表示信道没有被使用,如果为1表示信道已经被占用,位37,38,39预留使用,由该域查找数据信道索引时,应该注意排除广播信道。 Instant:决定连接时间(connInstant),1-32767 2.4.2.3LL_TERMINATE_IND 该PDU具有以下数据格式:
错误代码参考第二卷第四部分 2.4.2.4LL_ENC_REQ 该PDU具有以下数据格式:
Rand:由主机提供的随机数,并使用EDIV(see [Vol. 3] Part H, Section 2.4.4). EDIV:加密域 SKDm:包括了主机会议密钥认证。 IVm:包括了主机初始化向量 2.4.2.5 LL_ENC_RSP 该PDU具有以下数据格式:
SKDs:从机会话密钥认证 IVs:从机初始化向量 2.4.2.6LL_START_ENC_REQ 无数据域 2.4.2.7LL_START_ENC_RSP 无数据域 2.4.2.8LL_UNKNOW_RSP 该PDU具有以下数据格式:
UnknownType:其值为接收到的LL_CONTROL_PDU的Opcode值 2.4.2.9LL_FEATRUE_REQ 该PDU具有以下数据格式:
FeatureSet:描述了主机所支持的特性集合。 2.4.2.10LL_FEATURE_RSP 该PDU具有以下数据格式:
FeatureSet:描述了从机所支持的特性设置 2.4.2.11 LL_PAUSE_ENC_REQ 该PDU无数据域 2.4.2.12 LL_PAUSE_ENC_RSP 该PDU无数据域 2.4.2.13 LL_VERSION_IND 该PDU具有以下数据格式:
VersNr:描述了蓝牙控制器标准的版本 CompId:描述了蓝牙控制器制造厂商认证 SubVersNr:描述了蓝牙控制器的唯一序列号或蓝牙控制器版本号 2.4.2.14 LL_REJECT_IND 该PDU具有以下数据格式:
Error Code:错误代码,参考[Vol 2] Part D
终于帖完了!以上仅是个人对标准的理解,看文档同时请配合标准一起看,免得被我误导了。
最后,带上个人整理的数据格式定义。
|