查看: 982|回复: 0

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

[复制链接]

108

主题

163

帖子

618

积分

利尔达员工

Rank: 9Rank: 9Rank: 9

积分
618
发表于 2020-6-30 19:39:13 | 显示全部楼层 |阅读模式
链路层LL(Link Layer)是协议栈中最重要的一层。
链路层的核心是状态机,包含广播、扫描、发起和连接等几种状态,围绕这几种状态,BLE设备可以执行广播和连接等操作,链路层定义了在各种状态下的数据包格式、时序规范和接口协议。
对于广播行为,链路层根据其可连接性,可扫描性,定向性三个维度定义了多种不同类型广播事件,相应的扫描行为和连接行为根据广播包的类型区分处理。连接过程涉及复杂的时序过程,利用连接参数可以配置连接过程时序。
广播、扫描和连接各自具有白名单过滤机制,可以针对指定地址的设备进行操作。链路层提供了一些列控制规程,比如加密连接和数据长度更新等,上层协议可以利用这些规程控制链路层。
此外,链路层利用私有地址实现了隐私特性。
1. 状态机
链路层设计了五种工作状态,涵盖了链路层的全部操作状态:

状态 描述
Standby 系统不做任何广播和扫描动作,可以维持低功耗。
Advertising 系统对外发出广播数据和扫描响应数据。扫描响应数据也是一种广播数据,由扫描设备发出扫描请求,广播包设备返回扫描响应数据。
Scanning 监听外部的广播数据。扫描状态并不能直接进入连接状态。
Initiating 监听外部的广播数据。它可以发起连接请求,然后进入状态。
Connection 两个设备建立连接,进行通信。

这五种状态共同组成一个状态机,它们相互转换关系如下:


观察上图,扫描态无法直接进入连接态,从待机状态进入连接状态通常发生在连接已经建立的情况。
如果设备从发起态进入连接态称为主角色(Master Role)或主设备,如果从广播态进入连接态称为从角色(Slave Role)或从设备。主设备发起连接请求,并且会设定连接过程的时序参数,从设备接受主设备设定的参数进行通信。
在一个时刻,状态机只能处于一种状态,而链路层可以同时拥有多个状态机。这就意味着BLE设备在一个状态机中保持连接状态的同时,另一个状态机保持广播状态,或者多个链路状态机同时处于连接状态,这是BLE设备实现多个连接的基础。
以下为同时建立多个连接的场景:
  • 如果设备A已经跟设备B保持连接,那么设备A可以执行广播或扫描操作。
  • 如果设备A已经跟设备B保持连接,并且设备A是主设备,那么设备A能够跟其他从设备C再次建立连接。
  • 如果设备A已经跟设备B保持连接,并且设备A是从设备,那么设备A能够跟其他主设备C再次建立连接。
  • 如果设备A已经跟设备B保持连接,那么不能实现设备A扫描,设备B广播并再次建立连接。设备A与B之间只能维持一个连接状态机。
2. 设备地址
设备地址代表了设备的唯一识别码,它是设备间相互识别的依据,不同的设备必须具有不同的设备地址。
设备地址分为多种类型,最简单的是Public Address。这种地址固定不变,可以根据设备地址跟踪到该设备。
Public Address属于一种48-bit的MA-L类型地址,它的结构为:NN:NN:NN:NN:NN:NN。
其中前三个字节使用OUI(Organizationally Unique Identifier),后三字节自由分配。OUI代表了一个指定的组织机构识别码,全球已经有许多科技公司申请了自己的OUI。开发者可以从IEEE网站上下载已被分配的MA-L地址,也可以从第三方网站查询某个公司的OUI或某个OUI对应的公司。
与Public Address不同,Random Address采用一个随机数作为地址,Random Address分为Static Address和Private Address两类,Private Address又分为Resolvable private address和Non-resolvable private address两类。
它们的特点如下表所示:
地址类型 是否可变 更新触发机制 作为识别地址 描述
1. Public Address 固定 Yes 固定不变,需要避免地址冲突。
2. [Random Address]
2.1 Static Address 随机 设备重新上电 Yes 设备上电时产生新的随机地址。
2.2 [Private Address]
2.2.1 Resolvable private address 随机 定时 Yes 过一段时间更新随机地址,链路层推荐更新周期为15分钟。该地址可以通过地址识别密钥解析识别。
2.2.2 Non-resolvable private address 随机 定时 Yes 过一段时间更新随机地址,链路层推荐更新周期为15分钟。该地址可以不可被解析识别。

一个设备可以具有多种类型的地址,但是必须拥有一个识别地址。Public Address和Static Address可作为识别地址。所以如果设备采用Resolvable private address地址类型,必须同时具有一个Public Address或Static Address地址。

3. 物理信道
在物理层的介绍中,提到了BLE将2.4GHz频段分成了40个物理信道,相邻信道频率间隔为2MHz。
这40个物理信道分成以下几类:
信道类型 信道号 描述
Primary Advertising Channel 37、38、39 发送传统广播和扫描请求
Secondary Advertising Channel 0 – 36 发送扩展广播
Periodic Advertising Channel 0 – 36 发送周期广播
Data Channel 0 – 36 发送连接数据

4. 数据包结构4.1 非编码型物理层
非编码型物理层对应的链路层数据包结构包含四个部分:前导码,访问地址,PDU和CRC。如下所示:
字段 Preamble Access Address PDU CRC
长度 1 or 2 octets 4 octets 2 – 257 octets 3 octets
传输时间(1M PHY/2M PHY) 8 us/8 us 32 us/16 us 16 – 2056 us/8 – 1028 us 24 us/12 us

  • 前导码:前导码内容为重复的0/1或1/0序列,用于频率同步、符号时序计算和自动增益控制。对于1M速率的物理层,其长度为1字节;对于2M速率的物理层,其长度为2字节。
  • 访问地址:用于区分不同的数据类型。对于主要广播信道的数据包,其访问地址是一个固定值,对于其他信道的数据包,其访问地址是一个随机值。
  • PDU:包含了有效数据。
  • CRC:针对PDU部分进行校验。假如PDU经过加密,则校验加密后的PDU。
4.2 编码型物理层
编码型物理层对应的链路层数据包做了FEC编码处理,增加了几个字段,其结构如下:
字段 Preamble Access Address CI TERM1 PDU CRC TERM2
长度 10 octets 4 octets 2 bits 3 bits 2 – 257 octets 3 octets 3 bits
传输时间(1M Coded PHY) 80us 256us 16 us 24 us N×8×S us 24×S us 3×S us


其中Access Address、CI和TERM1属于FEC block 1,PDU、CRC和TERM2属于FEC block 2。FEC block 1采用S=8编码算法,FEC block 2根据CI字段值采用S=2或S=8编码算法。
编码型物理层的符号传输速率是1M Sym/s,当采用S=2编码,数据传输速率为500bit/s,当采用S=8编码,数据传输速率为125bit/s。
  • 前导码:前导码内容为重复的00111100序列,它不执行FEC编码。
  • 访问地址:与上相同。
  • CI:编码指示器,如果CI=0,则FE block 2执行S=8编码,如果CI=1,则FEC block 2执行S=2编码。
  • TERM1和TERM2:FEC算法终止符。

本帖子中包含更多资源

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

x
回复

使用道具 举报

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

本版积分规则

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