打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
蓝牙协议系列之(三) Link Layer

3  Link Layer

3.1 功能介绍
经过Physical Layer的定义,通信所需的物理通道已经okay了,即40个RF Channel(后面统一使用Physical Channel指代)。此时Link Layer可以粉墨登场了,它主要的功能,就是在这些Physical Channel上收发数据,与此同时,不可避免的需要控制RF收发相关的参数。但仅做这些,还远远不够:
    首先,Physical Layer仅仅提供了有限的40个Physical Channel,而BLE中参与通信的实体的数量,肯定不是这个数量级。Link Layer需要解决Physical Channel的共享问题;
    其次,通信是两个实体之间的事情,对这两个实体来说,它们希望看到一条为自己独享的传输通道(就是我们所熟悉的逻辑链路,Logical Link)。这也是Link Layer需要解决的;
    再则,Physical Channel是不可靠的,任何数据传输都可能由于干扰等问题二损毁、丢失,这对有些应用来说,是接受不了的。因此Link Layer需要提供校验、重传等机制,确保数据传输的可靠性;


3.2 Physical Channel的共享问题
1) 数据量比较少、发送不频繁、对时延不是很敏感的场景
例如一个传感器节点(如温度传感器),需要定时(如1s)向处理中心发送传感器数据(如温度)。
针对这种场景,BLE的Link Layer采取了一种比较懒的处理方式----广播通信:
从40个Physical Channel中选取3个,作为广播通道(advertising channel);
在广播通道上,任何参与者,爱发就发,爱收就收,随便;
所有参与者,共享同一个逻辑传输通道(广播通道)
2)数据量较大、发送频率较高、对时延较敏感的场景
BLE的Link Layer会从剩余的37个Physical Channel中,选取一个,为这种场景里面的通信双方建立单独的通道(data channel)。这就是连接(connection)的过程。

同时,为了增加容量,增大抗干扰能力,连接不会长期使用一个固定的Physical Channel,而是在多个Channel(如37个)之间随机但有规律的切换,这就是BLE的跳频(Hopping)技术。

3.3 状态(state)和角色(role)的定义
BLE协议在Link Layer抽象出5种状态:

· Standby State 
· Advertising State 
· Scanning State 
· Initiating State 
· Connection State
并以如下的状态机进行切换(设备在同一时刻只能处于这些状态的一种):



Standby状态是初始状态,即不发送数据,也不接收数据。根据上层实体的命令(如位于host软件中GAP),可由其它任何一种状态进入,也可以切换到除Connection状态外的任意一种状态。

Advertising状态是可以通过广播通道发送数据的状态,由Standby状态进入。它广播的数据可以由处于Scanning或者Initiating状态的实体接收。上层实体可通过命令将Advertising状态切换回Standby状态。另外,连接成功后,也可切换为Connection状态。

Scanning状态是可以通过广播通道接收数据的状态,由Standby状态进入。根据Advertiser所广播的数据的类型,有些Scanner还可以主动向Advertiser请求一些额外数据。上层实体可通过命令将Scanning状态切换回Standby状态。

Initiating状态和Scanning状态类似,不过是一种特殊的接收状态,由Standby状态进入,只能接收Advertiser广播的connectable的数据,并在接收到数据后,发送连接请求,以便和Advertiser建立连接。当连接成功后,Initiater和对应的Advertiser都会切换到Connection状态。

Connection状态是和某个实体建立了单独通道的状态,在通道建立之后,由Initiating或者Advertising自动切换而来。通道断开后,会重新回到Standby状态。

通道建立后(通常说“已连接”),处于Connection状态的双方,分别有两种角色Master和Slave:
Initiater方称作Mater;
Advertiser方称作Slave。

注1:从横向看,协议的每个层次(如这里的
Link Layer)都可以当做可相互通信的实体。
这里的状态,就是指这每一层实体的状态。
因此,在协议的多个层次上,都可能有状态定义,
甚至名字也一样,我们阅读协议栈的时候,

一定要留意,不要被绕晕了。

3.4 Air Interface Protocol
状态和角色定义完成后,剩下的事情就简单了,主要包括两类:
提供某一状态下,和其它实体对应状态之间的数据交换机制;
根据上层实体的指令,以及当前的实际情况,负责状态之间的切换。BLE协议中,这些事情是由一个叫做空中接口协议(Air Interface Protocol)的家伙负责,主要思路如下:
1)定义在Physical Channel上收发的数据包的格式(packet format)
在BLE中,两种类型的Physical Channel(advertising channel和data channel)统一使用一种packet format,如下:

Preamble(1 octet)    Access Address(4 octets)    PDU(2 to 257 octets)    CRC(3 octets)


关于packet format,我们可以关注如下内容:
      1.1)Access Address,用于识别是数据包还是广播包。
      1.2)PDU,BLE在Link Layer的PDU长度最大为257 octets(octets当做bytes就行了)。这决定了上层实体,如L2CAP、Application等,需要拆分、重组才能支持更大数据量的传输。
      1.3)Link Layer总packet长度是9~264bytes。

2)定义不同类型的PDU及其格式

由3.3节所述Link Layer有5种状态,每种状态下所传输数据的功能不尽相同,基于此,Air Interface Protocol定义出多种的PDU类型,后面章节会详述

3)以白名单(White List)的形式定义Link Layer的数据过滤机制
主要针对广播通道,因为随着通信设备的增多,空中的广播数据将会呈几何级的增长,为了避免资源的浪费(特别是BLE Host),有必要在Link Layer过滤掉一些数据包,例如根据蓝牙地址,过滤掉不是给自己的packet。

4) Link Layer Control
经过Air Interface Protocol的抽象,BLE实体已经具备广播通信、点对点连接的建立和释放、点对点通信等基本的能力。除此之外,Link Layer又抽象出来一个链路控制协议(Link Layer Control),用于管理、控制两个Link Layer实体之间所建立的这个Connection,主要功能包括:
更新Connection相关的参数,如transmitWindowSize、transmitWindowOffset、connInterval等等;
更新该连接所使用的跳频图谱(使用哪些Physical Channels);
执行链路加密(Encryption)有关的过程。

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
Scalable OFDMA Physical Layer in IEEE 802.16 WirelessMAN ---1
蓝牙协议分析(3)_蓝牙低功耗(BLE)协议栈介绍
iOS17横屏待机模式怎么设置?
RAC, data guard, physical stand by and impdp
tensorflow.layers.batch
DataGuard physical standby创建与维护
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服