凡亿专栏 | 从零开始的nrf52832蓝牙开发--蓝牙协议基础
从零开始的nrf52832蓝牙开发--蓝牙协议基础

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

概略图:

cbe3547f9821ba0ade77d5edb3fbdd.png

物理层(PHY):

调制、解调方式,工作频段(2402-2480MHZ),通信速率等控制。

链路层(LL):

负责广播、扫描、建立连接、维护连接等,展开来讲比如广播间隔、数据重传、接收发送等待超时等设置最后都在这一层中被实际应用。

链路层的五种状态:
就绪态、广播态、扫描态、发起态、连接态。状态机如下:

7dd47addb22194e86d20333512b3b6.png

蓝牙每个信道为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):

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

485dbd51bb0059e3cecdcb35f04b80.png

属性协议(ATT):

协议两个字画重点,什么是协议?就是一种约定,两个设备要交互数据,数据按照什么顺序发,每个字节代表什么意思,这就是协议。所以ATT就是规定了两个蓝牙设备之间通信的一个协议。属性协议肯定是关于属性的协议,属性其实就是一种数据格式:

ab8bdb5715593b6376b3bfbf73591e.png

上图就是一条属性,它由以下几个部分组成:

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的数据空间,操作特征值里的用户数据,就是对那块内存空间进行读写。

Attribute Permissions:
属性权限,主要有一下四类:
访问权限(Access Permission)- 只读、只写、读写
加密权限(Encryption Permission) – 加密、不加密
认证权限(Authentication Permission) – 需要认证、无需认证
授权权限(Authorization Permission) – 需要授权、无需授权

操作属性的指令:

2c64200864edcce781ab6123af221f.png5c1ee0d984e476679c5416e5f95e23.png


通用属性配置文件(GATT):

它规定了属性的组织方式,一个profile由若干个service组成,而一个service又由若干characteristic组成,characteristic又是由声明、数值和描述符组成。整体结构:


58745c9838b92d9164c9d87ae77f9e.png15e0d7c4a7faf9e0c4a6f48d5db495.png

通用访问配置文件(GAP):

1.定义了GAP层角色:
蓝牙协议不同层中对角色的定义互不干扰。
比如链路层里面定义了主机(Master)、从机(Slave)角色。
GAP层定义了广播者(Broadcaster Role)、观察者(Observer Role)、外围设备(Peripheral Role)、中心设备(Central Role)。
ATT层定义了服务端(Server)、客户端(Client)。


2.定义GAP层的、用于实现各种通信的操作模式(Operational Mode)和过程(Procedures):
Broadcast mode and observation procedure,实现单向的、无连接的通信方式;
Discovery modes and procedures,实现蓝牙设备的发现操作;
Connection modes and procedures,实现蓝牙设备的连接操作;
Bonding modes and procedures,实现蓝牙设备的配对操作。


3.定义User Interface有关的蓝牙参数:
1.蓝牙地址
2.蓝牙名称
3.蓝牙的pincode
4.蓝牙的class

最后在应用程序中我们可以自定义或者使用SIG官方定义的配置,去实现自己的蓝牙功能,也就是各种各样的service和characteristic。


声明本文转载自网络,如涉及作品内容、版权和其它问题,请于联系工作人员,我们将在第一时间和您对接删除处理!

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表凡亿课堂立场。文章及其配图仅供工程师学习之用,如有内容图片侵权或者其他问题,请联系本站作侵删。
相关阅读
进入分区查看更多精彩内容>
精彩评论

暂无评论