Advertisement

ble l2cap 工作过程_BLE协议 01

阅读量:

简介

本文将按照如下层次分析

PHY(物理层)

LL(链路控制层)

HCI(主机和控制接口)

L2CAP层(逻辑链路控制和适配层)

GATT(通用属性规范)

ATT(属性传输协议)

SMP(安全管理)

协议的组成图:
c2b52a6be6ed

PHY(物理层)

频段

BLE使用2.4GHz工业、科学及医疗(ISM)频段。

这个频段有两个特别之处:

它是一个无需授权的频段

它是唯一一个在任何国家都通用的频段,即对于2.4GHz的频段,从2400MHz~2483.5MHz约83.5MHz的频谱资源在任何地方都可以使用。

调制

BLE采用的GFSK调制方式(髙斯频移键控),物理层的比特率为1Mbit/s(1Mbps)。

射频信道
c2b52a6be6ed

LL(链路控制层)

描述

链路层定义了两个设备如何利用无线电传输信息,包含了报文、广播、数据通道的详细定义,也规定了发现其他设备的流程、广播的数据、连接建立、连接管理以及连接中的数据传输。

链路层状态机

就绪态(Standby)

广播态(Advertising)

扫描态(Scanning)

发起态(Initiating)

连接态(Connection)
c2b52a6be6ed

空中数据包结构

前导码:1字节

访问地址:4字节

数据包单元:29字节

CRC校验:3字节
c2b52a6be6ed

基本概念

Bit流

在4.0协议中规定数据都是以小端模式存放

在内存中,并且发送到空中的数据都是以低字节的最低bit位进行发送。当然也有例外,CRC是先发送的高字节的最低bit位。例

数据白化

数据白化的目的是避免长0长1。
c2b52a6be6ed

三种“地址”区分

前导码Preamble:1字节

前导码的作用是:频率同步和增益控制。只有两个值: 0xAA和0x55

接入地址Access Address:4字节

广播包固定---- 0x8e89bed6

数据包变化----每一次连接都不同

芯片物理地址:6字节

它分为:公共地址和随机地址。随机地址分为:静态地址和私有地址。私有地址分为:不可解析和可解析地址。
c2b52a6be6ed
c2b52a6be6ed

报文结构详细组成
c2b52a6be6ed
c2b52a6be6ed

广播通道PDU结构
c2b52a6be6ed
c2b52a6be6ed
c2b52a6be6ed
c2b52a6be6ed

同一广播事件中3个信道之间的时间间隔----以ADV-IND为例
c2b52a6be6ed
c2b52a6be6ed
c2b52a6be6ed
c2b52a6be6ed

连接请求CONNECT_REQ包
c2b52a6be6ed
c2b52a6be6ed
c2b52a6be6ed
c2b52a6be6ed
c2b52a6be6ed
c2b52a6be6ed
c2b52a6be6ed

Sniffer采集到的连接请求包
c2b52a6be6ed

image

数据通道PDU结构
c2b52a6be6ed

image
c2b52a6be6ed

image

连接事件

和广播事件一样,每隔一定的时间连接事件由主机从数据信道发送一个数据包,从机接到数据如果有数据发送需要在150±2 µs做成应答。也就是说每一个连接事件中至少包含主机发送的一个包,从机可以不发送包。

连接事件的时间由两个参数决定:connection event interval (connInterval), and slave latency (connSlaveLatency).即连接间隔和从机潜伏期。

lanchor point

连接事件开始的点叫做锚点(The start of aconnection event is called an anchor point)。主机在锚点开始连接事件,从机需要在锚点前进入侦听状态。

connEventCounter

主机和从机都有一个16位的连接事件计数器,这个值是为了这两个设备之间的同步。这个值只要是连接事件参数就会加1,当然第一个连接事件时这个值为0而不是1。无论从机潜伏期的值是多少,只有从机接收到主机的连接事件这个值在从机里面就要加1。当这个值到了0xFFFF时,会翻转到0x0000,重新开始计算。

连接事件传输窗口

在上面讲到了CONNECT_REQ包,这个包中包含了传输窗口,并且窗口偏移(WinOffset)只有是从广播态进入连接态时使用,或者在参数更新时使用,而WinSize时间是每个连接事件都必须使用的。
c2b52a6be6ed
c2b52a6be6ed

Ø连接间隔时间的起点有两个位置:•当从机接收报文成功,连接间隔时间起点,就是接收到报文的那个时刻,当然对于nrf51822来说,就是Radio的END事件产生的时候了。

当从机接收报文失败,连接间隔时间起点,就是扫描窗口的开始时刻。
c2b52a6be6ed

从机在传输窗口中没有接收到第一个连接事件

这种情况,从机不得不等待连接间隔时间后再次进入传输窗口,等待接收下一个报文。虽然接收失败,但是还是有几点要注意的:

连接事件计数值connEventCount这个值还是得加1的。

数据通道的频率还得接着跳到下一个频率。

HCI(主机和控制接口)

HCI Commands and Events
c2b52a6be6ed

L2CAP层(逻辑链路控制和适配层)

L2CAP逻辑链路控制和适配层

这个层的目的是将上层的数据进行简单包装,使得对于LL层来说,非常方便地进行再次包装后进行发送。
c2b52a6be6ed

L2CAP包结构以及信道标识
c2b52a6be6ed
c2b52a6be6ed

属性
c2b52a6be6ed

什么是属性

属性是一条公开的带有标签的,可以被寻址的数据。属性构成就是规定数据怎么组成。在L2CAP中可以知道,HOST通往下层的数据只有3条路,并且如果是应用的话,只有一条CID=0x0004的通道,看来对于BLE所有应用数据都是通过ATT进行传输的。那么到沙子里面淘金子,为什么可以认出沙子里面的金子呢?因为金子发光,黄色的,这两个就是金子的基本属性。对于ATT跑到GATT哪里去找数据,肯定得规定数据怎么放,也就是人为规定数据属性,这样才好找吧!在4.0协议规范中规定的这个格式就是属性,也就是数据按照一定规则存放的规定,这个存放的规定就是组成服务的最小单元。

属性组成最小单元
c2b52a6be6ed

属性句柄(Attribute Handle)

两个作用

为了方便寻找属性的一种方式

通过属性句柄操作多个同样属性类型

属性类型(Attribute Type)

属性类型其实就是对某个东西取一个别名,让机器可以理解,对于机器理解东西就是数字了,所以属性类型采用了2bytes或者是16bytes的长度的数字表示某个东西。例如心率计,我们人听到心率计都知道是什么,但是机器并不知道,同样对于一个不懂中文的人对他说“心率计”,他也不知道是什么。所以为了全球统一,心率计有一个数字代号:0x180D,这是唯一的识别码叫做通用唯一识别码(Universally Unique IDentifier (UUID))。在服务器的数据库中只要找到服务是 0x180D的值,所有设备都知道这是一个含有心率计服务的蓝牙设备。

书名号

对于机器读到0x180D就知道是心率计服务,但是对于人来说还是喜欢形象的东西,所以又有一种方法,对于2bytes的UUID,通常不直接用它的值,而是用一个名称并加上书名号,例如心率计通常用«Heart Rate service »表示数值为0x180D的UUID

属性值(Attribute Value)

属性值是一个0~512字节的数据,对于属性本身来说,属性值是没有用的,属性值是给应用用的。那么值可以有哪些呢?

服务通用唯一识别码(UUID)

单位

属性类型

特性描述符

特性类型

属性许可(Attribute Permissions)

可读

可写

可读且可写

需要认证

不需要认证

无授权

授权

GATT 服务组成

服务是指一系列由数据和相关行为组成的集合,为了去完成某个特定的功能或者特性。而一个服务可以包含引用服务即《Include》、强制性和可选的特征即 《Characteristic》。
c2b52a6be6ed

心率计服务
c2b52a6be6ed
c2b52a6be6ed

服务声明

服务声明是干什么用的?简单地讲,就是告诉其他蓝牙设备,我可以为你提供什么服务,对于心率计,就是告诉对方我可以提供心率的服务。
c2b52a6be6ed
c2b52a6be6ed

特性«Characteristic»声明
c2b52a6be6ed

属性值—特性性质(CharacteristicProperties)

属性值—特性的属性句柄(Characteristic ValueAttribute Handle)

属性值—特性的属性类型(Characteristic UUID)

属性值—特性性质(CharacteristicProperties)
c2b52a6be6ed

属性许可(Attribute Permissions)和特性性质(Characteristic Properties)区别

Permissions:对设备本身的权限,相当于家里卧室中也需要门锁,防止爸妈偷看日记

Properties:对于对方设备而言的权限,相当于大门的门锁是防止外人非法进入的。

特性值声明

特性值的声明是在特性声明后的第一个属性,所有的特性定义中一定包含有一个特性值声明。
c2b52a6be6ed

特性描述符声明

特性描述是用来包含一些关于特性值的关联信息,特性描述有多种类型,一个特性的定义可以有任意多个的描述符,而所有描述符都是用来为特性值服务的

特性扩展性质 «Characteristic Extended Properties»:0x2900

特性用户描述 «Characteristic User Description» :0x2901

客户端特性配置«Client Characteristic Configuration» :0x2902

服务器特性配置«Server Characteristic Configuration»:0x2903

特性表示格式 «Characteristic Presentation Format»:0x2904

特性聚合格式 «Characteristic Aggregate Format» :0x2905

心率计的特性
c2b52a6be6ed

GATT(通用属性规范)

ATT(属性传输协议)

ATT干啥用的?

ATT协议存在的目的是规定用什么样的方法去访问GATT服务,并将访问的到的数据传输给L2CAP;或者是规定L2CAP的数据怎么样传到GATT服务的一种规定的传输协议。

通信方法
c2b52a6be6ed

属性协议PDU
c2b52a6be6ed

GATT映射到 ATT
c2b52a6be6ed

ATTPDU 映射到 GATT规程
c2b52a6be6ed

SMP(安全管理)
c2b52a6be6ed

安全管理难点

安全管理难点在于:怎么将公共密钥进行安全共享

加密标准

AES-CCM 是计数器密码块链消息认证码模式,融合有3 种技术: AES 加密引擎、计数模式和消息认证

AES(Advanced Encyption Standard)即先进加密标准

安全管理配对绑定数据包交互全过程
c2b52a6be6ed

参考

全部评论 (0)

还没有任何评论哟~