接前一篇文章:ESP32-C3模组上实现蓝牙BLE配网功能(2)
本文内容参考:
《ESP32-C3 物联网工程开发实战》 乐鑫科技
特此致谢!
一、蓝牙知识基础
2. 蓝牙核心体系结构
蓝牙的核心系统主要由主机(Host)、控制器(Controller)、主机控制接口(Host Controller Interface,HCI)构成。
- 主机(Host)
Host主要用于实现各种业务场景需求,大部分的开发工作都是在Host上进行的。
- 控制器(Controller)
Controller主要用于蓝牙报文的收发,以及蓝牙物理连接的管理等基本功能,由专门的蓝牙芯片厂商负责实现。
- 主机控制接口(Host Controller Interface,HCI)
Host和Controller最初的设计理念是将这两个模块单独运行在两颗不同的芯片甚至系统上,两者之间通过主机控制接口进行通信,以方便替换和升级。虽然现在有不少芯片把Host和Controller都放在了一颗芯片上,但基本还遵循这样的层次结构,只是将HCI协议从硬件通信端口换成了软件端口。
低功耗蓝牙协议栈包含物理层(Physical Layer,PHY)、链路层(Link Layer,LL)、逻辑链路控制和适配协议(Logical Link Control and Adaptation Protocol,L2CAP)、属性协议(Attribute Protocol,ATT)、安全管理器协议(Security Manager Protocol,SMP)、通用属性配置文件(Generic Attribute Profile,GATT)、通用访问配置文件(Generic Access Profile,GAP)等。低功耗蓝牙的协议栈层次如下图所示:
或
- 物理层(Physical Layer,PHY)
PHY用来指定低功耗蓝牙所用的无线频段、调制解调方式等。PHY做得好不好,将直接决定整个低功耗蓝牙芯片的功耗、灵敏度以及selectivity等射频指标的好坏。
- 链路层(Link Layer,LL)
LL只负责把数据发送出去或者接收回来,对数据进行怎样的解析则交给上面的GAP或者ATT处理。LL要处理的事情(事务)非常多,如选择什么程度的射频进行通信、怎么识别空中数据包、具体在哪个时间点将数据包发送出去、如何保证数据的完整性、如何对链路进行管理和控制、ACK如何接收、重传等,是整个低功耗蓝牙协议栈的核心。
- 主机控制接口(Host Controller Interface,HCI)
HCI是是Host和Controller之间的通信接口。HCI可以是物理形式的,如UART、USB等,常见于双芯片架构;也可以直观通过API实现,常见于单芯片架构。
- 逻辑链路控制和适配协议(Logical Link Control and Adaptation Protocol,L2CAP)
L2CAP向上层协议(协议复用、分段、重组操作)提供连接导向和无连接的数据服务,并按通道进行流量控制和重传。
- 属性协议(Attribute Protocol,ATT)
ATT主要用来定义用户命令以及命令操作的数据,如读取或写入。低功耗蓝牙协议栈引入了Attribute概念,用于描述一条条的数据。ATT除了定义数据,同时也定义该数据可以使用的ATT命令,是读者接触最多的部分。
- 安全管理器协议(Security Manager Protocol,SMP)
SMP负责管理低功耗蓝牙连接的加密和安全,既保证连接的安全性,同时又不影响用户的体验。
- 通用属性配置文件(Generic Attribute Profile,GATT)
GATT用来规范Attribute中的数据内容,并运用分组(Group)的概念对Attribute进行分类管理。当然,没有GATT也能跑低功耗蓝牙协议栈,只是会在互联互通上出问题。正是因为有了GATT和各种各样的应用Profile,Bluetooth LE才摆脱了ZigBee等无线协议的兼容性困境。
- 通用访问配置文件(Generic Access Profile,GAP)
GAP对LL的有效数据包进行了一些规范和定义,是解析LL负载数据最简单的一种方式。因此,GAP能实现的功能极其有限,主要用来进行广播、扫描和发起连接等。
更多内容请看下回。