蓝牙学习一(简介)

1.简介

        蓝牙分为经典蓝牙BT-Bluetooth)和低功耗蓝牙BLE-Bluetooth Low Energy),本次主要学习BLE。

        BLE分了很多个版本,现在用的比较多的就是4.25.X。那4.2到5.0之间有哪些升级呢?首先,4.2版本传输速度只有1Mbps,广播包最大长度为31字节。而5.0版本开始,传输速度就已经增加到2Mbps了,并且广播包的最大长度也增加为254字节。除此之外,5.X版本还增加了Mesh的功能,且通讯距离也增加至300米以上。

2.架构

        蓝牙里把蓝牙协议的实现代码称为协议栈(protocol stack),BLE协议栈就是实现低功耗蓝牙协议的代码,理解和掌握BLE协议是实现BLE协议栈的前提。        

        每个厂商提供的SDK中包含的BLE协议栈都会有些许不同。这里主要以NordicRTL两个厂商来进行分析。

        先看Nordic的架构

蓝牙学习一(简介)_第1张图片

         再看RTL的架构

蓝牙学习一(简介)_第2张图片

        乍一看两者的区别很大。但是再定睛一看,区别还是很大。开玩笑,其实两者区别不大,只要搞懂底层基础的概念,这些东西就都是纸老虎。

        先看Nordic的架构,从上图可以看到。一个完整的BLE程序被分为了三层,分别是应用层主协议层控制层。这些层中分别还包含了各自的内容。其中的术语,这里大概解释一下。

        PHY层(Physical layer-物理层)。PHY层用来指定BLE所用的无线频段调制解调方式方法等。PHY层做的好不好,直接决定了整了BLE芯片的功耗、灵敏度等射频指标

        LL层(Link Layer-链路层)。LL层是整个协议栈的核心。也是BLE协议栈的难点和重点。像Nordic的BLE协议栈能同时支持20个Link连接,就是LL层的功劳。LL层要做的事情非常多,比如具体选择哪个射频通道进行通信。怎么识别空中数据包。具体在哪个时间点把数据包发送出去。怎么保证数据的完整性。ACK如何接收。如何进行重发。以及如何对链路进行管理和控制等等。LL层只负责把数据发送出去或者接收回来,对数据进行怎样的解析由GAPATT来负责。

        HCI(Host controller interface)。HCI是可选择的。HCI主要用于2颗芯片实现BLE协议栈的场合,用来规范两者之间的通讯协议和通信命令等。

        GAP层(Generic access profile-通用访问配置文件)。GAP是对LL层payload(有效数据包)如何进行解析的两种方式的一种,而且也是最简单的一种。GAP简单的对LL payload进行一些规范和定义,因此GAP能实现的功能极其有限。GAP目前主要用来进行广播扫描发起连接

        L2CAP层(logic link control and adaptation protocol-逻辑链路控制和适配协议).L2CAP对LL进行了一次简单的封装,LL只关心传输的数据本身,L2CAP就要区分是加密通道还是普通通道,同时还要对连接间隔进行管理

        SMP(Secure manager protocol-加密管理协议)。SMP用来管理BLE连接的加密和安全。如何保证连接的安全性,同时不影响用户的体验,这些都是SMP要考虑的工作。

        ATT(Attribute protocol-属性协议)。简单来说,ATT层用来定义用户命令及命令操作的数据。比如读取某个数据或者写某个数据。BLE协议栈中,开发者接触最多的就是ATT。BLE引入了attribute概念,用来描述一条一条的数据。Attrubute除了定义数据,同时定义该数据可以使用的ATT命令,因此这一层被称为ATT层。

        GATT(Generic attribute profile-通用属性配置文件)。GATT用来规范attribute中的数据内容,并运用group(分组)的概念对attribute进行分类管理。没有GATT,BLE协议栈也能跑。但互联互通就会出问题,也正是因为有了GATT和各种各样的应用profile,BLE摆脱了Zigbee等无线协议的兼容性困境,成为了出货量最大的2.4G无线通信产品。

        ATT和GATT的关系就像车辆和交通规则一样。ATT就是车辆,而GATT就是规范车辆该如何行驶的交通规则。只有GATT存在的时候,多个ATT见面才知道该如何形式,到底是拐弯让直行还是坐车道超车。

        从上边的名字可以看到,主要分为protocolprofile。其中L2CAP、SMP、ATT属于protocol,而GAP和GATT属于profile

        profile和protocol有什么区别呢? 在蓝牙核心规范(Bluetooth Core Specification)中,profile的定义不同于protocol的定义Protocol被定义为各层协议。而Profile从使用蓝牙核心规范中各层协议的角度,定义蓝牙应用互操作性的实现Profile定义Protocol中的可用特性和功能,以及蓝牙设备互操作性的实现,使蓝牙协议栈适用于各种场景的应用开发

        在蓝牙核心规范中,Profile和Protocol的关联如下图

        蓝牙学习一(简介)_第3张图片 

        Profile由红色矩形框表示,包括GAP、Profile#1、Profile#2和Profile#3。蓝牙核心规范中的Profile分为两种类型:GAP,途中红色矩形框所示的GAP;基于GATT的Profile,图中红色矩形框所示的Profile#123。

        可能初学者看完上述之后还是云里雾里的。没有关系,我们在后续的文章中,会对这些进行单独讲解,也会再重复提到。只要跟着走,后续这些问题都会弄清楚的。加油!

你可能感兴趣的:(蓝牙,蓝牙,BLE,架构)