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 阅读(1424) 评论(0) 编辑 收藏 举报