简介
本文将按照如下层次分析
- 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位。例
- 数据白化
三种“地址”区分
-
前导码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)即先进加密标准
网友评论