"FAQ关于如何准确计算和配置GATT属性表大小"
在蓝牙低功耗(BLE)通信中,GATT (Generic Attribute Profile) 属性表是设备间数据交互的核心。它定义了一种结构,使得主设备和服务设备可以通过特定的服务和特征进行数据交换。正确配置GATT属性表对于BLE应用的稳定性和效率至关重要。
1. **GATT数据库大小**
GATT数据库大小是指在BLE设备中分配用于存储服务和特征的内存空间。它直接影响到设备能支持多少服务和特征,以及这些服务和特征的数据容量。计算GATT属性表大小时,需要考虑每个服务、特征、值以及相关配置的大小。
2. **Handle句柄**
句柄是GATT属性的唯一标识,相当于每个属性在属性表中的地址。每个属性都有一个唯一的句柄,它们按顺序排列,占用2个字节。
3. **Characteristic - 特征**
特征是BLE通信的基本单元,通过访问特征,主从设备可以读取或写入数据。特征由UUID标识,可以包含附加信息如访问权限。
4. **UUID - 统一标识符**
UUID是一个全局唯一的标识符,用于区分不同的服务和特征。UUID分为16位和128位两种,其中16位UUID属于SIG预定义,128位UUID可以自定义。
5. **Permission - 访问权限**
权限定义了谁可以读取或写入特征。在STBlueNRG协议栈中,权限设置相对简单,但实际应用中可能会更复杂。
6. **服务声明和服务结构**
每个服务由一个服务声明开始,包含服务的UUID。服务内部包含一个或多个特征,每个特征有自己的句柄和值。服务声明在STBlueNRG协议栈中不占用属性表大小。
7. **特征声明和特征值**
特征声明包含特征的UUID、句柄和访问权限,占用2+2+1或16+2+2字节(取决于UUID的长度)。特征值的大小取决于特征的实际长度,例如在ChatDemo示例中,收发特征各占20个字节。
8. **CCC (Client Characteristic Configuration)**
CCC是客户端特征配置,用于启用或禁用特征的通知和指示功能。如果特征支持Notify或Indicate,就会有一个额外的CCC值,占2个字节,其值可以是0、1或2,分别表示无配置、只通知、通知加指示。
9. **配置GATT属性表**
使用ST提供的工具BLUENRG1_Wizard.exe,可以帮助用户基本配置GATT属性表。通过理解和分析设备的需求,可以确定所需服务和特征,从而计算出正确的属性表大小。
在配置GATT属性表时,需要综合考虑设备的内存限制、服务数量、特征复杂性以及数据传输需求。确保配置的正确性对于BLE设备的正常工作和高效通信至关重要。在开发过程中,应根据实际应用不断调整和优化属性表配置,以达到最佳性能和资源利用。