BLE协议 01

2019-04-03  本文已影响0人  张志中

简介

本文将按照如下层次分析

协议的组成图:

PHY(物理层)

频段

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

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

调制

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

射频信道

LL(链路控制层)

描述

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

链路层状态机

空中数据包结构

基本概念

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

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

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

三种“地址”区分

报文结构详细组成

广播通道PDU结构

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

连接请求CONNECT_REQ包

Sniffer采集到的连接请求包

image

数据通道PDU结构

image image

连接事件

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

连接事件传输窗口

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

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

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

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

HCI(主机和控制接口)

HCI Commands and Events

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

L2CAP逻辑链路控制和适配层

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

L2CAP包结构以及信道标识


属性

什么是属性

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

属性组成最小单元
属性句柄(Attribute Handle)

两个作用

属性类型(Attribute Type)

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

书名号

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

属性值(Attribute Value)

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

属性许可(Attribute Permissions)
GATT 服务组成

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

心率计服务

服务声明

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

特性«Characteristic»声明

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

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

特性描述符声明

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

心率计的特性

GATT(通用属性规范)

ATT(属性传输协议)

ATT干啥用的?

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

通信方法
属性协议PDU
GATT映射到 ATT
ATTPDU 映射到 GATT规程

SMP(安全管理)

安全管理难点

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

加密标准

AES-CCM 是计数器密码块链消息认证码模式,融合有3 种技术: AES 加密引擎、计数模式和消息认证
AES(Advanced Encyption Standard)即先进加密标准

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

参考

https://mp.weixin.qq.com/s/_YvRgwGyVwomDCuMIEkzJQ

上一篇 下一篇

猜你喜欢

热点阅读