BLE协议栈的学习笔记

时间:2024-05-31 09:04:34

BLE的协议可分为Bluetooth Application 和Bluetooth Core两大部分,而Bluetooth Core又包含BLE Controller和BLE Host两部分。

BLE协议栈的学习笔记

Physical Layer:任何一个通信系统,首先要确定的就是通信介质(物理通道,Physical Channel),BLE也不例外.在BLE协议中,"通信介质"的定义是由Physical Layer(其它通信协议也类似)负责.

Physical Layer是这样描述BLE的通信介质的:

由于BLE属于无线通信,则其通信介质是一定频率范围下的频带资源(Frequency Band);

BLE的市场定位是个体和民用,因此使用免费的ISM频段(频率范围是2.400-2.4835 GHz);

为了同时支持多个设备,将整个频带分为40份,每份的带宽为2MHz,称作RF Channel。

经过上面的定义之后,BLE的物理信道已经出来了,即"频点分别是'f=2402+k*2 MHz ,k=0,...,39'",带宽为2MHz的40个RF Channel。


Link Layer:

Link Layer主要的功能就是在这些Physical Channel上收发数据,与此同时,不可避免的需要控制RF收发相关的参数。Link Layer需要解决

Physical Channel的共享问题;实体之间的独享的传输通道;校验,重传,数据传输的可靠性等问题。


1.怎么解决Physical Channel的共享问题?

BLE系统只有有限的40个Physical Channel,怎么容纳多个通信实体呢?

Link Layer将BLE的通信场景分为两类:

(1)数据量比较少,发送不频繁,对时延不是很敏感的场景

这种数据场景,BLE的Link Layer采取了一种比较懒的处理方式——广播通信:从40个Physical Channel中选取3个,作为广播通道,在广播通道上,任何参与者,爱发就发,爱收就收,随便;所有参与者,共享同一个逻辑传输通道(广播通道)

(2)数据量较大,发送频率较高,对时延较敏感的场景

BLE的Link Layer会从剩余的37个Physical Channel中,选取一个,为这种场景里面的通信双方建立单独的通道(data channel)。这就是连接(connection)的过程。同时,为了增加容量,增大抗干扰能力,连接不会长期使用一个固定的Physical Channel,而是在多个(如37个)之间

随机但有规律的切换,这就是BLE的跳频(Hopping)技术。


状态(state)和角色(role)的定义:

BLE协议在Link Layer抽象出5种状态:

Standby State

Advertising State

Scanning State

Initiating State

Connection State

其状态转换如下图所示:

BLE协议栈的学习笔记

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。


Air Interface Protocol



L2CAP(Logical Link Control and Adaptation Protocol)

经过Linke Layer的抽象之后,两个BLE设备之间可存在两条逻辑上的数据通道:一条是无连接的广播通道,天高任鸟飞;另一条是基于连接的数据通道,是一个点对点(Master对Slave)的逻辑通道。

L2CAP是一个介于应用程序(Profile、Application等)和Link Layer之间的协议,它提供的功能主要包括:

Protocol/channel mutiplexing,协议/通道的多路复用(分为基于通道的多路复用和基于协议的多路复用,基于通道的多路复用采用CID的方式,基于协议的多路复用采用PSM的方式,基于协议的多路复用只允许在BR/EDR controller中使用);

Segmentation and reassembly,上层应用数据(L2CAP Service Data Units,SDUs)的分割(和重组),生成协议数据单元(L2CAP Packet Data Units,PDUs),以满足用户数据传输对延时的要求,并便于后续的重传、流控等机制的实现;

Flow control per L2CAP channel,基于L2CAP Channel的流控机制

Error control and retransmissions,错误控制和重传机制;

Support for Streaming ,支持流式传输(如音频、视频等,不需要重传或者只需要有限重传);

Fragmentation and Recombination ,协议数据单元(PDUs)的分片(和重组),生成符合Link Layer传输要求的数据片(长度不超过251)

Quality of Service ,QoS的支持。



ATT(Attribute Protocol)

到目前为止,我们可以知道的是,在BLE协议栈中:Physical Layer负责提供一系列的Physical Channel;基于这些Physical Channel,Link Layer可在两个设备之间建立用于点对点通信的Logical Channel;而L2CAP则将这个Logical Channel划分为一个个的L2CAP Channel,以便提供应用程序级别的通道复用。到此之后,基本协议栈已经构建完毕,应用程序已经可以基于L2CAP运行起来了。

ATT将信息以Attribute(属性)的形式抽象出来,并提供一些方法,供远端设备(remote device)读取,修改这些属性的值(Attribute value)。

Attribute Protocol的主要思路包括:

(1)基于L2CAP,使用固定的Channel ID(0x004)

(2)采用client-server的形式.提供信息(以后都称作Attribute)的一方称作ATT server(一般是那些传感器节点),访问信息的一方称作ATT client。

(3)一个Attribute由Attribute Type、Attribute Handle和Attribute Value组成:

Attribute Type 用于标识Attribute的类型,类似于我们常说的"温度","湿度"等人类可识别的术语,不过与人类术语不同的是,Attribute Type使用UUID(Universally Unique IDenifier,16-bit,32-bit或者128-bit的数值)区分.

Attribute Handle是一个16-bit的数值,用作唯一识别Attribute server上的所有Attribute。Attribute handle的存在有如下意义:

a.一个server上可能存在多个相同type的Attribute,显然,client有区分这些Attribute的需要。

b.同一类型的多个Attribute,可以组成一个Group,client可以通过这个Group中的起始handle访问所有的Attributes

Attribute Value代表Attribute的值,可以是任何固定长度或者可变长度的字节数组

Attribute可以定义一些权限(Permissions),以便server控制client的访问行为,包括:
访问有关的权限(access permissions):Readable,Writeable以及Readable and writable。

加密有关的权限(encryption permissions):Encryption required和 No encryption required

认证有关的权限(authentication permissions):Authentication Required和No Authentication Required

授权有关的权限(authorization permissions):Authorization Required和No Authorization Required

根据所定义的Attribute PDU的不同,client可以对server有多种访问方式,包括:

Find Information,获取Attribute type和Attribute Handle的对应关系

Reading Attributes,有Read by type,Read by handle,Read by blob(只读取部分信息),Read Multiple(读取多个handle的value)等方式

Writing Attributes:包括需要应答的writing,不需要应答的writing等


GATT(Generic Attribute Profile)

ATT之所以称作"protocol",是因为它还比较抽象,仅仅定义了一套机制,允许client和server通过Attribute的形式共享信息.而具体共享哪些信息,ATT并不关心,这是GATT的主场。

GATT相对ATT只多了一个'G',但含义却大不同,因为GATT是一个profile

在蓝牙协议中,profile一直是一个比较抽象的概念,我们可以将其理解为"应用场景、功能、使用方式"都被规定好的Application。传统的BR/EDR如此,BLE更甚。BLE很大一部分的应用场景是信息的共享,因此,BLE协议栈基于Attribute Protocol,定义了一个称作GATT的profile framework,用于提供通用的、信息的存储和共享等功能。

BLE协议栈的学习笔记


GATT profile的层次结构依次是:profile->service->characteristic。

“Profile”是基于GATT所派生的真正的Profile,位于GATT Profile hierarchy的最顶层,由一个或者多个和某一应用场景有关的Service组成。

一个Service 包含一个或多个Characteristic(特征),也可以通过include的方式,包含其它Service。

Characteristic则是GATT profile中最基本的数据单位,由一个Properties,一个Value,一个或者多个Descriptor组成。

Characteristic Properties定义了charactertistic的value如何被使用,以及characteristic的Descriptor如何被访问。

Characteristic Value是特征的实际值。

Characteristic Descriptor则保存了一些和Characteristic Value相关的信息.

以上除"Profile"外的每一个定义,Service,Characteristic,Characteristic Properties,Characteristic Value、Characteristic Descriptor等等,都是作为一个Attribute存在的,都具有Attribute的所有特征:Attribute Handle、Attribute Types、Attribute Value 和Attribute Permissions。


SM(Security Manager)

Security Manager负责BLE通信中有关安全的内容,包括配对、认证、加密等过程。

GAP(Generic Access Profile)

BLE协议栈定义了一个称作Generic Access(通用访问)的profile,以实现如下功能:

1)定义GAP层的蓝牙设备角色(role)

和5.3中的Link Layer的role类似,只不过GAP层的role更接近用户(可以等同于从用户的角度看到的蓝牙设备的role),包括:

Broadcaster Role,设备正在发送advertising events;

Observer Role,设备正在接收advertising events;

Peripheral Role,设备接受Link Layer连接(对应Link Layer的slave角色);

Central Role,设备发起Link Layer连接(对应Link Layer的master角色)。

2)定义GAP层的、用于实现各种通信的操作模式(Operational Mode)和过程(Procedures),包括:

Broadcast mode and observation procedure,实现单向的、无连接的通信方式;

Discovery modes and procedures,实现蓝牙设备的发现操作;

Connection modes and procedures,实现蓝牙设备的连接操作;

Bonding modes and procedures,实现蓝牙设备的配对操作。

3)定义User Interface有关的蓝牙参数,包括:

蓝牙地址(Bluetooth Device Address);

蓝牙名称(Bluetooth Device Name);

蓝牙的pincode(Bluetooth Passkey);

蓝牙的class(Class of Device,和发射功率有关);

等等。


该篇文章只是对于另一篇文章的摘录没有加入自己的理解,故定义为转载,原文地址为:http://www.wowotech.net/bluetooth/ble_stack_overview.html