控制器|从零开始的nrf52832蓝牙开发--蓝牙协议基础

控制器|从零开始的nrf52832蓝牙开发--蓝牙协议基础

文章图片

控制器|从零开始的nrf52832蓝牙开发--蓝牙协议基础

文章图片

控制器|从零开始的nrf52832蓝牙开发--蓝牙协议基础

文章图片

控制器|从零开始的nrf52832蓝牙开发--蓝牙协议基础

文章图片


想要进行蓝牙开发 , 第一步肯定要对蓝牙协议有所了解 。 除了要对蓝牙的一些专业术语有所熟悉 , 还应该对蓝牙协议每层功能有一定认知 。

概略图:

物理层(PHY):
调制、解调方式 , 工作频段(2402-2480MHZ) , 通信速率等控制 。
【控制器|从零开始的nrf52832蓝牙开发--蓝牙协议基础】链路层(LL):
负责广播、扫描、建立连接、维护连接等 , 展开来讲比如广播间隔、数据重传、接收发送等待超时等设置最后都在这一层中被实际应用 。



链路层的五种状态:就绪态、广播态、扫描态、发起态、连接态 。 状态机如下:蓝牙每个信道为2MHZ , 所以一共40个信道 , 其中2402、2426、2480MHZ为广播信道 , 其余为数据信道 。 广播时在三个广播信道循环跳转 , 连接后在数据信道循环跳转 。
主机与控制器接口(HCI):
此层可选 , 是连接主机(Host)和控制器(Controller)之间的桥梁 。 主机与控制器之间可以使用USB、UART等通信 , HCI规定了一系列的通信标准协议 。 但像52832这种芯片是没有HCI的 , Host和Controller被设计在一个芯片内 , 他们直接通过调用接口API通信 。
逻辑链路控制和协议适配(L2CAP):
1.协议或通道的多路复用
2.上层应用数据(L2CAP Service Data Units , SDUs)的分割(和重组) , 生成协议数据单元(L2CAP Packet Data Units , PDUs) , 以满足用户数据传输对延时的要求 , 并便于后续的重传、流控等机制的实现
3.基于L2CAP Channel的流控机制
4.错误控制和重传机制
5.支持流式传输(如音频、视频等 , 不需要重传或者只需要有限重传)
6.协议数据单元(PDUs)的分片(和重组) , 生成符合Link Layer传输要求的数据片(长度不超过251)
7.Qos服务
安全管理层(SMP):

管理蓝牙连接的安全性 , 主要负责密钥分发与配对 。 支持如下命令:属性协议(ATT):

协议两个字画重点 , 什么是协议?就是一种约定 , 两个设备要交互数据 , 数据按照什么顺序发 , 每个字节代表什么意思 , 这就是协议 。 所以ATT就是规定了两个蓝牙设备之间通信的一个协议 。 属性协议肯定是关于属性的协议 , 属性其实就是一种数据格式:上图就是一条属性 , 它由以下几个部分组成:Attribute Type:
属性类型 , 用UUID表示 , 分为四大类:
1.Primary Service(首要服务项)
2.Secondary Service(次要服务项)
3.Include(包含服务项)
4.Characteristic(特征值)
uuid对应属性类型划分:
0x1800 – 0x26FF :服务项类型
0x2700 – 0x27FF :单位
0x2800 – 0x28FF :属性类型
0x2900 – 0x29FF :描述符类型
0x2A00 – 0x7FFF :特征值类型
实际数据可以参考下一节GATT的图片 。
Attribute Handle:
属性句柄 , 如果设备上有两个类型一样的肯定需要一个标识来区分 , 属性句柄就是每个属性的唯一标识 。 它由系统分配 。
Attribute Value:
属性的值 , 如果该属性是服务项类型或者是特征值声明类型 , 那么它的属性值就是UUID等信息 。 如果是普通的特征值 , 则属性值是用户的数据 。 属性值需要预留空间以保存用户数据 。 为了方便理解 , 我们可以将属性值的空间看做I2C的数据空间 , 操作特征值里的用户数据 , 就是对那块内存空间进行读写 。