文章目录
1 概述
1.1 链路层状态
链路层的操作可以用含有以下状态的状态机来描述:
- 待机状态
- 广播状态
- 扫描状态
- 发起状态
- 连接状态
- 同步状态
- 同步广播状态
链路层状态机在同一时间只允许有一个状态,链路层需要有一个至少支持广播状态和扫描状态的状态机,链路层可以有多个链路层状态机的实例。
链路层在待机状态不进行任何数据包的收发,可以从任意状态进入待机状态。
链路层在广播态可以在广播信道上发送数据包并且可以监听和应答由广播数据包触发的应答。处于广播态的设备被认为是一个广播者,广播态可以从待机状态进入。
在扫描状态,链路层会在广播信道上去监听处于广播态的设备发送的广播包,处于扫描态的设备被认为是扫描者,扫描态可以从待机状态进入。
处于发起状态时,链路层会监听来自特定射逼得广播包,并且给出相应的应答以便与另一个设备建立连接,处于发起状态的设备被认为是发起者,发起状态可以可以通过待机状态进入。
连接态的可以从发起状态或广播状态进入,处于连接态的设备被认为处于连接当中。
连接状态下,一共有2个角色:
- 主设备
- 从设备
当从发起状态进入连接态,则连接是作为主设备角色,当从广播态进入连接态,则连接是作为从设备角色。
主设备的链路层和从设备进行通讯并定义传输时序。
从设备端链路层和单个的主设备进行通讯。
同步态链路层会周期性的监听来自一个周期性广播的设备的周期性广播队列。同步状态可以通过待机状态进入,这种情况下,主机可以指定链路层去监听来自一个广播BIG信息的特定设备的同步数据包,处于同步状态下的设备作为同步接收机来接收同步数据包。
在同步广播状态下的链路层会在同步物理通道上发送同步数据包,同步广播状态可以从待机状态下进入,处于同步广播状态下的设备被称为同步广播者。
###
1.1.1 允许的状态和角色组合
链路层可以可选择的支持多个状态机,如果支持多个状态机,那么任意的状态和角色的组合都可能会被支持,特别的,链路层允许使用主机角色和从机角色同时处于连接状态中,然而,任意的两个设备间不应该有超过1个的连接。
注意:支持扫描周期性广播(见章节4.4.3.4)的设备必须支持2个状态机
链路层的实现不需要强制性的去支持所有协议规范所允许的状态组合。但是,如果它支持表1.1中“组合A”列中给出的状态或状态组合,那么它也要支持在"组合B"列中的状态或状态组合。
每一种情况下,其他状态 C的组合可以是空的,在最后2行,其他状态包括其他可连接的广播状态。
1.1.2 只支持部分状态的设备
只支持部分链路层状态或者连接状态中的一个角色的设备,不会被要求支持设备不支持的状态或者模式的特性(包括支持特定PDUs,规程,数据长度或HCI指令或者HCI指令的一个特定特性)。
1.2 比特序列
在包或协议数据单元(PDU)内定义字段时的比特序列在链路层规范中遵循小端格式,使用如下规则:
- 最低有效位(LSB)对应于b0
- LSB是发送到空中的第一位数据
- 在插图中,LSB展示在左边
此外,在链路层中定义的数据字段,如PDU header字段,发送的时候需要LSB先被发送,示例如下:一个3位的数据X=3为 b0b1b2 = 110
在空中的时候,首先发送1,然后发送1,最后发送0,在规范中,就是110.
规范中定义的二进制值遵循 0b10101010 这样的格式(如章节2.1.2 中描述的广播物理通道的接入地址)在写的时候MSB在最左边。
多字节的字段,除了循环冗余校验(CRC)以及消息完整性校验(MIC),发送的时候都是最后一个字节先发送。每一个多字节的字段除了CRC,都应该遵循LSB发送的方式,如PDUs中48位的地址应该先发送最后一个字节,然后是剩下的按序排列的5个字节。
多字节的字段,CRC初始值,MSB在最左边,如0x112233445566种,0x11是MSB字节。
1.3 设备地址
设备通过设备地址和地址类型进行标识,地址类型指示设备是一个公共地址还是随机地址,公共地址和随机地址长度都是48位。
设备最少需要使用一种设备地址类型,也可以使用多个地址类型。
设备的身份地址是他在发送的包里面用到的公共地址或者静态私有地址,如果设备使用私有可解析地址,那么他也应该有一个身份地址。
当两个设备地址对比的时候,对比应该包括地址类型,如两个设备地址类型不同,那么即使其他48bit都是相同的,他们两个也不是不同的地址。
1.3.1 公共地址
公共地址需要按照 章节2 Part B 第1.2节来创建,除非公共设备地址也将被用作BR/EDR控制器的的BD_ADDR,否则对LAP值的限制不适用。
1.3.2 随机地址
随即地址可以是以下选项之一:
- 静态地址
- 私有地址
子类型通过随即地址的前2位来进行表示,如表1.2所示:
| Address[47:46] | Sub-Type |
|---|---|
| 0b00 | 私有不可解析地址 |
| 0b01 | 私有可解析地址 |
| 0b10 | 预留 |
| 0b11 | 静态地址 |
术语随即地址涉及到静态地址和私有地址类型
随机设备地址的传输是可选的,设备应该接受从远端设备传来的随机设备地址。
1.3.2.1 静态设备地址
静态设备地址随机是一个48位的随机地址并且需要遵循以下要求:
- 至少有1位随机部分需要是0
- 至少有1位随机部分需要是1
静态地址的格式如图1.2所示:
设备可以在每次重新上电以后初始化它的静态地址位一个新的值,在未重新上电的时候,一旦静态地址初始化完成,不应该再进行修改。
注意:一旦设备的静态地址改变,那么存储在对端的设备地址将会失效并且使用旧地址进行重连的功能也会丢失。
1.3.2.2 设备私有地址产生
私有地址可以有以下两种子类型之一:
- 不可解析的私有地址
- 可解析的私有地址
为了创建不可解析的地址,设备需要按照下面要求生成4一个8位的地址:
- 地址随机部分至少有1位是1
- 地址随机部分至少有1位是0
- 地址不能和公共地址相同
不可解析的私有地址格式如图1.3所示:
为了创建可解析的私有地址,设备必须有本地的IRK或者对端设备的IRK,可解析的私有地址需要通过IRK和一个24位的随机数进行创建,随机数作为装饰,并且需要遵循以下要求:
- prand的随机部分至少有1位的0
- prand的随机部分至少有1位的1
私有可解析地址的格式如图1.4所示:
哈希值通过章节3 Part H 第2.2.2部分锁定义的随即地址函数 ah使用设备的IRK作为输入参数K,prand作为参数r来产生。
prand和哈希值按下列方式连接起来生成随机地址(随机地址):
哈希值的最低有效字节为随机地址的最低有效字节,prand的最高有效字节为随机地址的最高有效字节。
1.3.2.3 私有地址解析
如果对应设备的IRK是可用的,那么私有可解析地址是可以被解析的,如果私有可解析地址被解析成功,那么设备可以把该地址和对端设备关联起来。
私有可解析地址被划分为一个24位的随机部分(prand)和24位的哈希部分,私有可解析地址的最低有效字节为哈希部分的最低有效字节,最高有效字节为prand的最高有效字节,本地哈希值可以通过定义在 章节3 Part H 第2.2.2章节部分的随即地址哈希函数使用IRK作为参数K和prand作为参数r来生成:
本地哈希值用来和从私有可解析地址中提取的哈希值进行对比,如果相匹配,则对端设备的地址被解析成功。
如果设备有不止一个的IRK,则设备重复上面的过程去查看是否有一个IRK是可以匹配的,直到设备地址被解析成功或者所有的IRKs都被尝试一遍。
注意:不能在 T_IFS解析私有地址的设备,可能会在下一个事件中进行响应。
不可解析的私有地址不能够被解析。
1.4 物理通道
如Vol 6 Part A Section 2所描述的,在2.4GHz ISM频段定义了40个RF通道,这些无线通道划分了3被称为首要广播通道的信道,用来初始化广播和所有的广播活动,另外的37个通道被称为通用通道,主要用于通讯,每一个无线通道都申请一个独一无二的通道编号,见章节1.4.1
上面2组无线通道用在4中LE物理信道上:广播,周期,同步和数据,广播物理通道使用2组信道来发现设备,建立连接和广播数据,
其中首要广播通道组成首要广播物理通道,通用通道组成次要广播物理通道,其余的物理通道使用通用通道。
两个准备通讯的设备使用同样的物理通道,因此在同一时刻,射频收发机需要被调整到同样的无线通道上来。
考虑到射频信道的数量有限,而且许多蓝牙设备可能在同一区域内独立运行,因此很有可能两个独立蓝牙设备的收发器被调到同一射频信道,从而导致物理信道碰撞。为了减轻这种冲突的不良影响,物理通道上的每个传输都从一个被设备调整到物理通道的关联码的访问地址开始进行,访问地址是物理通道的一个属性,在每次数据包传输的开始处提供。
链路层在一个时刻使用一个物理通道。
每当链路层与时间片、频率和物理通道的访问物理同步时,它被称为在数据物理通道上“连接”或“同步”到周期性物理通道或同步物理通道(无论它是否参与通道的通信)
1.4.1 物理通道索引
表1.3展示了PHY通道到物理通道的映射以及无线通道分组。‘●’在表1.3中表示PHY通道和索引是该组别的一部分。
2 空中接口数据包
LE设备需要用下面章节定义的数据包,这里有2种基础格式:一种是LE Uncoded PHYs,如章节2.1所描述的,另一种是LE Coded PHY,如章节2.2所描述的。