Bluetooth Low Energy协议介绍(下)

前言

在上篇文章中,对BLE协议做了基本的介绍,分为三层,这一篇,咱们就对每一层的协议做个详细的分析,从而对整个ble协议有个把握。

Controller

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。

linker layer

经过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需要解决的.

那么问题来了,怎么解决呢?

BLE将40个通道分为两类,广播通道和连接通道。ble广播通道(advertising channel)有三个,任何参与者,爱发就发,爱收就收,随便,所有参与者,共享同一个逻辑传输通道(广播通道),应用于数据量比较少、发送不频繁、对时延不是很敏感的场景。

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

第二 数据的可靠性问题
Physical Channel是不可靠的,任何数据传输都可能由于干扰等问题损毁、丢失,这对有些应用来说,是接受不了的。因此Link Layer需要提供校验、重传等机制,确保数据传输的可靠性。

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

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

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

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

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

5.Connection状态是和某个实体建立了单独通道的状态,在通道建立之后,由Initiating或者Advertising自动切换而来。通道断开后,会重新回到Standby状态。通道建立后(通常说“已连接”),处于Connection状态的双方,分别有两种角色Master和Slave:Initiater方称作Mater;
Advertiser方称作Slave。

HCI

定义Host和Controller(通常是两颗IC)之间的通信协议,可基于Uart、USB等物理介质,对理解蓝牙协议来说,是无关紧要的,这里暂不介绍。

Host

l2cap

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

1.Protocol/channel multiplexing,协议/通道的多路复用;
2.Segmentation and reassembly,上层应用数据(L2CAP Service Data Units,SDUs)的分割(和重组),生成协议数据单元(L2CAP Packet Data Units,PDUs),以满足用户数据传输对延时的要求,并便于后续的重传、流控等机制的实现;
3.Flow control per L2CAP channel,基于L2CAP Channel的流控机制;
4.Error control and retransmissions,错误控制和重传机制;
5.Support for Streaming,支持流式传输(如音频、视频等,不需要重传或者只需要有限重传);
6.Fragmentation and Recombination,协议数据单元(PDUs)的分片(和重组),生成符合Link Layer传输要求的数据片(长度不超过251)
7.Quality of Service,QoS的支持。

Attribute Protocol

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

ATT:定义了clientserver的角色,数据以attribute形式存放在server端,且定义了一系列读或写的操作,client(访问信息的一方)通过这些操作和server(一般是传感器节点)中的attribute进行通信,server进行相应的响应。实际应用中一个设备作为client和server很少见,但是不冲突。

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

Attribute Type:用于标示Attribute的类型,类似于我们常说的“温度”、“湿度”等人类可识别的术语,不过与人类术语不同的是,Attribute Type使用UUID(Universally Unique IDentifier,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的值,可以是任何固定长度或者可变长度的octet array(理解为字节类型的数组即可)。

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(protocal data unit)的不同,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等

Generic Attribute Profile

ATT之所以称作“protocol”,是因为它还比较抽象,仅仅定义了一套机制,允许client和server通过Attribute的形式共享信息。而具体共享哪些信息,ATT并不关心,这是GATT(Generic Attribute Profile)的主场。GATT将server中的attribute进行细化,成为service和characteristic暴露给client, 将attribute根据不同的服务进行归类,组合,对读写操作进行整合,形成读写的一系列数据操作流程,提供给上层的profile去用。
从名字知道GATT是一个profile,而profile的层次结构是:

一个profile至少有一个service组成,
一个service至少有一个characteristic组成
characteristic(作为profile的基本单位)包括properties,数值,descriptor


Characteristic Properties定义了characteristic的Value如何被使用,以及characteristic的Descriptor如何被访问。
Characteristic Value是特征的实际值,例如一个温度特征,其Characteristic Value就是温度值就。
Characteristic Descriptor则保存了一些和Characteristic Value相关的信息(比较抽象,后续文章会根据实例做进一步的理解)。

Security Manager

本协议负责BLE通信中有关安全的内容,包括配对(pairing,)、认证(authentication)和加密(encryption)等过程。

Generic Access Profile

GAP主要实现以下功能:
1)定义GAP层的蓝牙设备角色(role)
GAP定义了四个角色(和client,server是独立的概念)

peripheral和central是一对,是两个设备建立连接后进行通讯的角色,
(在连接的另一端的设备称为对等设备)

peripheral   是连接里面的从设备         比如心率计,
central        是连接里面主动发起连接的设备     比如手机

broadcaster和observer是一对,是两个设备不建立连接的时候进行通信的角色

broadcaster   通过广播的方式把数据发送出去,只广播不接收消息
observer       监听空中事件,接收相应的广播包数据

在一些应用里面,GAP里的peripherial通常作为server;central通常作为client

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,和发射功率有关);
。。。。。。

补充:PDU (packet data unit)

根据应用场景的不同,处于不同状态的BLE设备,可以发送不同类型的PDU(Packet Data Unit),具体如下:

PDU格式
在这里插入图片描述
PDU类型
在这里插入图片描述

总结

相信经过这两篇文章的介绍,大家对ble能有一个概括性认识,后续我会更新蓝牙相关的其余内容。

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

foreverwlh

你的鼓励将是我创作的巨大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值