LE蓝牙协议学习笔记(1)

1.参考文章

蓝牙协议分析(3)_蓝牙低功耗(BLE)协议栈介绍:http://www.wowotech.net/bluetooth/ble_stack_overview.html
nordicN51822 ble_app_hrs 属性服务器 示例 句柄分布:https://blog.csdn.net/caodaxia/article/details/78567996


2.蓝牙协议栈层次结构

------------
    GAP
------------
    GATT
------------
    ATT
------------
    L2CAP
-----HCI-------
    LL
------------
    PHY
------------

GAP(Generic Access Profile, 通用访问规范):
定义了很多种规程(Procedure),即怎么去发现设备、连接设备、怎么去授权、认证、加密。

GATT(Generic Attribute Profile, 通用属性规范):
定义了怎么通过下层ATT提供的能力去发现服务(Service),发现特性(Characteristic),读写特性(特性也就是一种属性)。GATT需要通过ATT
这一层去读写这些属性才能提供对应的服务。GATT严重依赖ATT,它只是在属性的基础上综合提供服务。

ATT(Attribute Protocol, 属性协议):
定义了两种机制(向对方获取属性信息),流程为请求(Request),响应(Response),命令(Command)。

L2CAP(Logical Link Control And Adaptation Protocol):
为了分辨各来源的数据,引入了软件上的channel的概念来标记数据的来源和目的地。为了传输大数据包,引入了分片重组(分段合并也有可
能是在HCI层做的)。为了让传输更加可靠,引入了配置和流控的概念。

HCI(Host Controller Interface, 主机/控制器接口):
定义了Soc如何如蓝牙芯片进行通信,就是数据怎样通过串口/USB口传给蓝牙芯片。

LL(Link Layer, 链路层):
定义了广播包(6种)、数据包(控制包、起始包、连续包)的格式。为解决数据发给谁的问题引入了AA(Access Address)。重新定义了一些
规程(Procedure),比如怎么更新Channel Map(哪些频段可用)、怎么加密等等。


ATT层最重要的概念是属性;GATT层最重要的概念是服务;L2CAP层最重要的概念是channel;LL层最重要的概念是访问地址,表明把数据发给
谁;PHY层最重要的概念是调频,选择最干净的信道传输;GAP层定义了一些流程,必须要根据这些流程来使用设备。

之间还有其它层,比如提供安全服务的SM(Security Manager)层,这里没有列出来。

HCI上面的称为Host,是主机,HCI下面的称为Controller,也就是控制芯片。

 

3.LE蓝牙数据格式

数据分为广播数据和普通面向连接的数据:

(1)广播数据(Advertising channel PDU):广播数据包的地址恒为0x8E89BED6,格式如下:

[0x8E89BED6] [type] [Advertising channel PDU]

[0x8E89BED6]:是广播包地址
[type]:用于区分是哪种广播包
[Advertising channel PDU]:广播的数据

(2)普通数据包(data channel PDU)格式如下:

[Random] [LLID(10b,01b)] [LL DATA PDU for L2CAP]

[Random] [LLID(11b)] [opcode] [LL Control PDU]

[Random]: 是一个随机数,用于表示目的设备的地址。
蓝牙设备A一旦和蓝牙设备B建立连接,就会分配一个随机数,这个随机数称为Access Address. 如果断开,又重新建立连接,又会分配为另一
个随机数,这个随机数各不相同。可以理解为可以使用这个随机数代表一个连接。那么一端就可以使用这个随机数代表已经建立连接的对端的
设备。
[LLID]: 表示数据是来自本层(LL层)还是来自上层的L2CAP层。若是来自本层(LL层),[LLID]就是11b,但是LL层的数据类型有LL_XXX_REQ、LL_XXX_RSP、
LL_XXX_IND,使用[opcode]表示具体是哪种类型。若数据来自L2CAP层,那么LLID就是10b或01b,后面跟的就是来自L2CAP层的数据,此时LL层
不会去解析数据内部的结构,解析任务交由L2CAP层完成。

L2CAP层负责解析[LL DATA PDU for L2CAP],其组成:

[Channel ID] [Data for upper layer(ATT and so on)]                这个是上层委托L2CAP层传输的数据
[Channel ID] [Signaling Packet(Code+Identifier+Length+Data)]    这个是L2CAP层数据

注意[Channel ID]是在L2CAP出来时才加上去的,在L2CAP层是没有的。
L2CAP可能要传输的是本层的数据,也可能是传输上层委托给它的数据,通过[Channel ID]来进行分辨。传输L2CAP层的数据又有多种类型,通
过Code域区分。

ATT层赋负责解析[Data for upper layer(ATT and so on)],其组成:

[att opcode] [att params]  [auth sig]

[att opcode]: 用于区分数据类型。这一层不需要再传输上面的数据了。

(3)空中传输的蓝牙数据格式:

[0x8E89BED6] [type] [Advertising channel PDU]        //空中的广播数据包格式(应该也是到LL层的)

[Random] [LLID(11b)] [opcode] [LL Control PDU]        //空中的来自LL层的数据包格式

[Random] [LLID(10b,01b)] [Channel ID(05/06)] [Signaling Packet(Code+Identifier+Length+Data)]  //空中的来自L2CAP层的数据包格式

[Random] [LLID(10b,01b)] [Channel ID(04)] [att opcode] [att params] [auth sig]    //空中的来自ATT层的数据包格式

 

4.通信信道

LE使用的2.4G ISM频段被划分为40个蓝牙信道,每个信道带宽为2MHz。选择3个信道作为广播信道,广播包在3个不同的信道(测试发现是37/38/39
三个信道)中实现跳频,数据包在其它37个信道上调跳频。


5.数据包大小限制

(1)Link Layer对传输要求的数据片要求有效payload长度不超过251B。


6.属性协议(Attribute protocol)

基于信息采集的需求,BLE抽象出一个协议:Attribute protocol,该协议将这些信息以属性的形式抽象出来,并提供一些供远端设备读取、修改这些属性的值的方法。

(1)Attribute Protocol的主要包括:
a.基于L2CAP,使用固定的Channel ID(0x004)。
b.采用client-server的形式。提供Attribute的一方称作ATT server(一般是那些传感器节点),访问信息的一方称作ATT client。
c.一个Attribute由Attribute Type、Attribute Handle和Attribute Value组成。
Attribute Type: 用于标示Attribute的类型,使用UUID(Universally Unique IDentifier,16-bit、32-bit或者128-bit的数值)区分。
Attribute Handle:是一个16-bit的数值,用作唯一识别Attribute server上的所有Attribute。存在意义如下:
  ①一个server上可能存在多个相同type的Attribute,此时使用handle区分。
  ②同一类型的多个Attribute,可以组成一个Group,client可以通过这个Group中的起、始handle访问所有的Attributes。
Attribute Value:代表Attribute的值,可以是任何固定长度或者可变长度的数组。

d.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。

e.根据所定义的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等。


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

8.L2CAP中的Channel ID也起到多路复用的作用
数据发送时,将用户数据分割为一定长度的数据包(L2CAP Packet Data Units,PDUs),加上一个包含特定“ID”的header后,通过逻辑链路发送出去。
数据接收时,从逻辑链路接收数据,解析其中的“ID”,并以此判断需要将数据转发给哪个应用。

9.Channel ID的分配
在通信之前,先建立一个基于Logical Channel的虚拟通道(称作L2CAP channel,和TCP/IP中的端口类似)。L2CAP会为这个通道分配一个编号,称作channel ID(简称CID)。

10.GATT(Generic Attribute Profile)
ATT之所以称作“protocol”,是因为它还比较抽象,仅仅定义了一套机制,允许client和server通过Attribute的形式共享信息。而具体共享哪
些信息,ATT并不关心,这是GATT的主场。GATT是一个profile(更准确的说是profile framework)。在蓝牙协议中,profile一直是一个比较
抽象的概念,可以将其理解为“应用场景、功能、使用方式”都被规定好的Application。

BLE协议栈基于Attribute Protocol,定义了一个称作GATT(Generic Attribute)的profile framework(它本身也是一个profile),用于提
供通用的、信息的存储和共享等功能。

 

10.安全管理(Security Manager)
Security Manager负责BLE通信中有关安全的内容

11. 通用访问配置文件(Generic Access Profile(GAP))的作用
(1)定义GAP层的蓝牙设备角色(role)
和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,和发射功率有关);
等等。

 

posted on 2019-05-11 16:55  Hello-World3  阅读(1323)  评论(0编辑  收藏  举报

导航