BLE学习笔记:之前的文章中简要的说明了一些BLE的基本知识,还不够全面。这次给大家来介绍一下BLE协议栈相关的知识,在我学习BLE的过程中,最开始就拿着BLE低功耗蓝牙的书来啃,但是还是不能够掌握多少,笔记做了一大堆,依然不能让我有个比较清晰的认识。其实最开始学习的时候,不能盲目的去学习,需要从基础的开始学起,了解最开始的且最基础的知识,才能够走得更远。
1、BLE协议栈的四种低功耗模式:
a、激活 b、睡眠 c、深度睡眠(EOF关闭) d、冬眠
2、BLE子系统的三种子模式:
a、IDLE b、传输模式 c、接受模式
3、BLE协议栈的主要工作有:
a、初始化蓝牙协议栈的事件处理;
b、绑定BLE事件调度函数;
c、绑定SYS事件调度函数。
备注:蓝牙系统主要靠事件驱动进行调度。
4、上面说的都是一些很基础的概念,相信很多人也看过下面这张关于BLE协议栈的框架图
这张图在很多的博客中也有,我在这里就直接引用了。在BLE协议栈中,BLE分为应用(Application)和内核(Core),而在Core中又有Host和Controller。基于自底向上的实现路线,我来简单介绍一下每个模块的相应作用。
(1)物理层(Physical Layer):学习过计算机网络的朋友,都应该知道在每一个通信系统中,最底层的就是通信介质,通信介质的选用会影响信号或数据的传输速度、效率和质量。由于BLE属于无线通信,它的的通信介质是一定频率范围内的频带资源;而大多数的BLE采用的都是免费的ISM频段(频率范围:2.4GHz--2.4835GHz)。在BLE指南中介绍了,BLE为了同时支持多个设备,就对频带进行了划分,一共划分了40份,每份的带宽是2MHz,称作RF Channel。
(2)链路层(Link Layer):链路层是基于物理层上实现的,它的主要功能是选择物理层上的某个或某些通道进行收发数据。在实际的收发数据的过程中又会做很多的事情,包含选择通道、识别数据包、校验数据包、错误重传和管理控制链路层的其他一些信息。收到数据或者发送数据后,对相应的数据进行解析就需要上层协议来做了。
(3)逻辑链路控制和适配协议(Logic Link Control And Adaptation Protocol):L2CAP跟LL有很大的区别,它会基于LL层上传的数据进行封装,并且还要判断通道的属性(加密或者不加密),同时对BLE连接间隔也需要进行管理和控制。
(4)属性协议(Attribute Protocol):ATT协议是GATT的基础,它需要定义一些用户命令和命令操作的数据信息。BLE中ATT是用来描述数据的,同时定义该数据可以使用的ATT命令。
(5)安全管理协议(Secure Manager Protocol):SMP层主要用于管理BLE连接过程中的加密和安全性的,在保证连接的可靠和安全性之下,也需要不影响其它的事件的处理。
(6)通用属性协议(Generic Attribute Profile):GATT是基于ATT协议的,它规范了ATT的数据内容,并对数据进行管理。一个profile下有很多的服务,服务中又会有很多的数据信息,所以这一层对BLE来说对数据管理非常重要。
(7)通用访问协议(Generic Access Profile):GAP常用作BLE连接的设置,GAP可以对LL层中的有效数据包(Payload)进行解析,同时GAP也对其进行相应的定义和规范。它主要的功能是用来进行广播、扫描和发起连接等。
(8)应用层(Application):应用层里主要输包含很多的应用服务,比如心率信息、电池信息等。
’ 对于如何使用BLE协议栈来进行数据的广播、发送和接收等,在NORDIC芯片中可以使用SDK来加深印象,里面给了丰富的案例进行讲解,同时对底层函数进行了很好地封装,当然流程也很清楚。这里我只是大概介绍一下关于BLE协议栈的大体框架内容,不对其内部做过多的介绍,需要了解的朋友可以去查看BLE《低功耗蓝牙开发权威指南》,我给出一个下载链接
链接:https://pan.baidu.com/s/1t62nJopPGBBSWS1r2yd8SA
提取码:7bcu
每天进步一点点。