美文网首页
BLE协议 01

BLE协议 01

作者: 张志中 | 来源:发表于2019-04-03 11:34 被阅读0次

简介

本文将按照如下层次分析

  • PHY(物理层)
  • LL(链路控制层)
  • HCI(主机和控制接口)
  • L2CAP层(逻辑链路控制和适配层)
  • GATT(通用属性规范)
  • ATT(属性传输协议)
  • SMP(安全管理)
协议的组成图:

PHY(物理层)

频段

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

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

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

调制

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

射频信道

LL(链路控制层)

描述

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

链路层状态机

  • 就绪态(Standby)
  • 广播态(Advertising)
  • 扫描态(Scanning)
  • 发起态(Initiating)
  • 连接态(Connection)

空中数据包结构

  • 前导码:1字节
  • 访问地址:4字节
  • 数据包单元:29字节
  • CRC校验:3字节


基本概念

  • Bit流

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

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

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

三种“地址”区分

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

  • 接入地址Access Address:4字节
    广播包固定---- 0x8e89bed6
    数据包变化----每一次连接都不同

  • 芯片物理地址:6字节
    它分为:公共地址和随机地址。随机地址分为:静态地址和私有地址。私有地址分为:不可解析和可解析地址。


报文结构详细组成

广播通道PDU结构

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

连接请求CONNECT_REQ包

Sniffer采集到的连接请求包

image

数据通道PDU结构

image 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时间是每个连接事件都必须使用的。

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

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

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

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

  • 连接事件计数值connEventCount这个值还是得加1的。
  • 数据通道的频率还得接着跳到下一个频率。

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字节的数据,对于属性本身来说,属性值是没有用的,属性值是给应用用的。那么值可以有哪些呢?

  • 服务通用唯一识别码(UUID)
  • 单位
  • 属性类型
  • 特性描述符
  • 特性类型
属性许可(Attribute Permissions)
  • 可读
  • 可写
  • 可读且可写
  • 需要认证
  • 不需要认证
  • 无授权
  • 授权
GATT 服务组成

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

心率计服务

服务声明

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

特性«Characteristic»声明

  • 属性值—特性性质(CharacteristicProperties)
  • 属性值—特性的属性句柄(Characteristic ValueAttribute Handle)
  • 属性值—特性的属性类型(Characteristic UUID)
  • 属性值—特性性质(CharacteristicProperties)
属性许可(Attribute Permissions)和特性性质(Characteristic Properties)区别
  • Permissions:对设备本身的权限,相当于家里卧室中也需要门锁,防止爸妈偷看日记
  • Properties:对于对方设备而言的权限,相当于大门的门锁是防止外人非法进入的。
特性值声明

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

特性描述符声明

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

  • 特性扩展性质 «Characteristic Extended Properties»:0x2900
  • 特性用户描述 «Characteristic User Description» :0x2901
  • 客户端特性配置«Client Characteristic Configuration» :0x2902
  • 服务器特性配置«Server Characteristic Configuration»:0x2903
  • 特性表示格式 «Characteristic Presentation Format»:0x2904
  • 特性聚合格式 «Characteristic Aggregate Format» :0x2905
心率计的特性

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

相关文章

网友评论

      本文标题:BLE协议 01

      本文链接:https://www.haomeiwen.com/subject/oluwbqtx.html