BLE Stack中GATT与ATT的区别及BLE栈分层相关问题咨询
问题解答
一、GATT与ATT差异确认
你的两个理解均准确,补充细节如下:
- ATT(属性协议)是底层传输协议,核心作用是定义属性的统一数据结构(句柄、UUID、权限、值),以及属性的读、写、通知、指示等基础交互规则,属于传输层的规则定义,不关心属性本身的业务含义。
- GATT(通用属性配置文件)是ATT的上层封装,完全基于ATT的属性传输能力实现,核心是把ATT的属性做逻辑分组,定义了服务、特征、描述符等业务语义单元,同时规范了服务发现、特征读写、通知订阅等标准化交互流程,开发者仅需基于GATT的服务/特征模型开发即可,不需要直接操作原始ATT属性。
二、BLE Stack核心概念
BLE栈(蓝牙低功耗协议栈)既是官方定义的理论分层规范,也是厂商基于规范实现的可直接调用的软件组件:蓝牙技术联盟(SIG)先定义了每一层的功能、交互规则、报文格式的统一标准,各芯片厂商(比如Nordic、TI、乐鑫)再基于这个标准开发对应的软件实现,打包成库提供给开发者调用,不需要开发者从零实现蓝牙协议逻辑。
三、BLE栈分层及各层输入输出
BLE栈整体分为控制器(底层,通常在芯片硬件/固件中实现)、主机(上层,可在固件或操作系统中实现)两大块,中间通过HCI层交互,从下到上各层功能、输入输出如下:
- 物理层(PHY)
- 功能:负责无线信号的调制解调,2.4GHz频段的射频收发
- 输入:来自上层链路层的数字二进制报文
- 输出:调制后的无线射频信号(发送时)/ 解调后的数字二进制报文(接收时)
- 链路层(LL)
- 功能:负责广播、扫描、连接建立、链路维护、加密、报文重传、流量控制
- 输入:上层HCI的控制指令、待发送的上层数据包;底层PHY解调后的原始报文
- 输出:给PHY的待发送二进制报文;给上层的解析后的链路层事件、有效数据包
- 主机控制接口层(HCI)
- 功能:控制器和主机之间的标准化通信接口,统一指令和事件格式
- 输入:主机下发的HCI指令、待发送数据;控制器上报的HCI事件、接收数据
- 输出:给控制器的格式化HCI指令/数据;给主机的格式化HCI事件/数据
- 逻辑链路控制与适配协议层(L2CAP)
- 功能:报文的分片重组、复用逻辑通道、QoS管理
- 输入:上层协议(ATT/SMP等)的数据包;下层HCI上报的数据包
- 输出:给下层的分片后的小包;给上层的重组后的完整协议数据包
- 安全管理层(SMP)
- 功能:负责配对、密钥生成、加密认证、权限管理
- 输入:配对请求、加密请求指令;对等设备的安全相关报文
- 输出:安全参数、加密后的数据包;配对结果、加密状态事件
- 属性协议层(ATT)
- 功能:属性定义、基础属性交互规则实现
- 输入:上层GATT的服务/特征操作请求;对等设备的ATT属性报文
- 输出:给下层L2CAP的ATT格式报文;给上层GATT的属性操作结果、属性数据
- 通用属性配置文件层(GATT)
- 功能:服务/特征模型、标准化交互流程实现
- 输入:上层应用的服务注册、特征读写/订阅请求;下层ATT上报的属性操作结果
- 输出:给下层ATT的属性操作指令;给上层应用的特征数据、操作结果事件
- 通用访问配置文件层(GAP)
- 功能:统一设备的访问行为规范,包括设备角色(广播者/观察者/外设/中心)、广播参数、连接参数、配对流程的上层逻辑
- 输入:上层应用的广播、扫描、连接、配对指令;下层协议栈的事件
- 输出:给下层协议栈的对应控制指令;给上层应用的广播数据、连接状态、配对结果等事件
最上层为用户应用层,直接调用GAP、GATT的接口即可实现业务逻辑。
内容的提问来源于stack exchange,提问作者Bratw
相关产品推荐
相关产品推荐

