蓝牙GATT层

蓝牙理论篇
1.什么是蓝牙4.0BLE协议栈
协议定义的是一系列的通信标准 ​ 协议栈则是协议的具体实现形式,也即协议栈是用代码实现的函数库

2.如何使用蓝牙4.0BLE协议栈
协议栈已经实现了蓝牙4.0BLE协议,在开发过程中不必过多地关注协议的实现细节。但要关注最核心的一个问题:应用程序数据从哪来?到哪去?

协议栈很多版本,不同厂商不尽相同。要知道数据从哪里到哪去,需要对协议栈的基本构成与内部工作原理有个认识,熟悉专业术语名词,才能应对不同SDK。

3.理解蓝牙4.0BLE协议栈构成
以TICC2541为例,包含两部分:主机与控制器。 ​ 协议栈实现采用分层的思想,上层可以调用下层提供的函数来实现需要实现的功能
协议栈结构基础剖析
在这里插入图片描述

物理层

负责提供数据传输的物理通道(通常称为信道),也即频段。

链路层

在物理层的基础上,提供两个或多个设备之间,和物理无关的逻辑传输通道(逻辑链路)

物理层定义比喻为路,此时路是没有逻辑的,没有直行道,快速道,左右转车道,而链路层的功能就是定义逻辑链路,按照传输类型划分。

链路层用于控制设备的射频状态,设备将会处于等待、广播、扫描、初始化、连接五种状态之一,发起连接的设备的称为主机,接收连接请求的设备称为从机

主机控制接口

为主机与控制器提供标准通讯接口,这一层可以是软件API或硬件外设UART SPI USB

逻辑链路控制及自适应协议

为上层提供数据封装服务,允许逻辑上的点对点数据通信。 ​ 提供的功能主要包括:通道的多路复用,对上层应用数据的分割和重组,生成协议数据单元(PDUs),以满足用户数据传输对延时的要求,并便于后续的重传、流控等机制的实现。 ​ 也即控制逻辑链路,提供逻辑链路,像提供TCP\IP中的port类似。同时为上层提供数据封装

安全管理层

定义配对与密钥分配方式,并为协议栈其他层与另一个设备之间的安全连接和数据交换提供服务

属性协议层

设备向另一个设备展示一块特定的数据,这块数据称之为“属性”,展示属性的设备称之为服务器,与之连接配对的叫客户端。

配置文件层

配置文件层:GAP与GATT。

GAP层

负责处理设备访问模式和程序,包括设备发现、建立连接、终止连接、初始化安全特色和设备配置。

GATT层

最重要最贴近开发的层,因为设备数据的通信是通过GATT层实现。从GATT的角度,两个设备建立连接后,一个为GATT服务器,一个为GATT客户端。

一个GATT服务器中可包含一个或多个GATT服务,从而引出”服务“这个概念。 ​ 假设一个设备是温度采集器,明显温度采集器的相关参数跟设备参数不属于同一类,因此该层应同时支持多个服务。多个服务如何区分?这即对应蓝牙联盟规范的UUID,有自定义UUID以及蓝牙联盟定义的UUID。

而一个服务具体可以表现为多个特性去实现,特性也用不同的UUID区分。 ​ 特性可以理解为程序里面的变量,变量必须有变量类型与变量的值。对应特性,特性在蓝牙联盟里包括三个要素:声明、数值和描述。前两者是必须的。

综上,GATT层有着多个“服务”,一个“服务”包括多个“特性”,而特性怎么存储,怎么被实实在在的获取?在协议栈中,特性和服务作为属性存在属性表(某个多维数组)中,所以无论是服务还是特性,均是一条条属性!所以GATT层是属性协议。而属性表是怎么样的呢?

属性:指一条带有标签的可以被寻址的数据,有句柄、属性类型、属性值组成。 ​ 被寻址也即被找到,通过句柄找到,句柄就是该属性在属性表的位置,也即程序里数组的下标。属性类型是真实存在的,蓝牙联盟规定128位的UUID来表征一个具体的属性。由于BLE的GATT可以认为是蓝牙标准规范的精简版,所以BLE被允许只传输前面2字节(16位)的UUID,所有的BLE的UUID的基数都是一样的,如下,只有前面两字节不同。属性值的长度可以最长到512字节,但对于某些属性,其长度是固定的。对于蓝牙标准里面规定的UUID所对应的属性(包括服务、特性定义、特性值、特性描述等等),服务、特性定义的长度是确定的,而特性值则是不固定长度的。

原文:https://blog.csdn.net/weixin_40451398/article/details/83659619

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值