【0x003E/0x86】HCI_LE_Set_Periodic_Advertising_Parameters 命令全面解析

目录

一、命令概述

二、命令格式

2.1. 一般格式

2.2. 示例格式

 三、命令参数详细说明

3.1. Advertising_Handle

3.2. Periodic_Advertising_Interval_Min和 Periodic_Advertising_Interval_Max

3.3. Periodic_Advertising_Properties

3.4. Num_Subevents

3.5. Subevent_Interval

3.6. Response_Slot_Delay

3.7. Response_Slot_Spacing

3.8. Num_Response_Slots

3.9. 异常情况讨论

四、返回命令参数说明

4.1. Status

4.2. Advertising_Handle

五、命令执行流程

5.1. 命令准备

5.2. 发送命令

5.3. 控制器处理

5.4. 返回响应

5.5. 后续操作

5.6. 示例代码

六、应用场景 

6.1. 周期性广播设置与数据更新

6.2. 优化设备发现与连接建立

6.3. 能源管理与低功耗操作

6.4. 支持特定通信需求

6.5. 适用于BLE 5.1及更高版本

七、注意事项

7.1. 参数验证与设置

7.2. 广播状态与参数更改

7.3. 兼容性与电源效率

7.4. 错误处理与隐私保护

7.5. 事件掩码与周期性广播使用


HCI_LE_Set_Periodic_Advertising_Parameters 命令是蓝牙核心规范(Bluetooth Core Specification)中定义的一个主机控制器接口(HCI)命令,用于设置周期性广播(Periodic Advertising)的参数。周期性广播是低功耗蓝牙(BLE)5.1及更高版本中引入的一种广播模式,它允许设备以固定的间隔重复发送广播数据,适用于需要定期广播信息的场景,如传感器数据广播。

一、命令概述

HCI_LE_Set_Periodic_Advertising_Parameters命令用于设置BLE设备的周期性广播参数。该命令通过HCI发送给BLE控制器,以配置设备在周期性广播模式下的行为。周期性广播是一种节能的广播模式,适用于需要持续广播数据但不需要频繁建立连接的应用场景。

BLUETOOTH CORE SPECIFICATION Version 5.4 | Vol 4, Part E page 2471 

命令操作码 (OCF): 该命令有2个版本,一种是通过操作码组(OGF)和操作码(OCF)的组合来表示,即0x08(OGF,表示LE控制器命令组)和0x003E(OCF,表示设置周期性广播参数命令的指令部分)。另一种表示方式是直接给出完整的命令代码0x86(这是将OGF和OCF组合在一起的结果,但通常只在某些上下文中使用,如HCI命令的二进制表示)。

  • 版本1 (Bluetooth Core Specification 5.0 及更早版本): 操作码为0x003E。主要参数包括Advertising_Handle、Periodic_Advertising_interval_MinPeriodic_Advertising_interval_Max。这些参数足以配置基本的周期性广播行为。
  • 版本2 (Bluetooth Core Specification 5.1 及更高版本): 操作码为 0x86。除了V1版本的参数外,V2版本增加了新的参数和功能。如Num_SubeventsSubevent_IntervalResponse_Slot_DelayResponse_Slot_SpacingNum_Response_Slots等。这些参数提供了对周期性广播行为的更精细控制,例如允许设备在单个广播周期内发送多个子事件,以及控制响应槽的延迟和间隔等。(注意:并非所有这些参数都一定在5.1中引入,但它们是在后续版本中相对于5.0增加的扩展参数的一部分)。

发送方:主机(Host)

接收方:BLE控制器(BLE Controller)

接口:主机控制器接口(HCI)

响应:该命令执行后,BLE控制器通常会返回一个状态码,以指示命令是否成功执行。状态码0x00表示成功,而其他值则表示不同类型的错误。

二、命令格式

2.1. 一般格式

HCI_LE_Set_Periodic_Advertising_Parameters命令通常包含以下几个关键部分:

  • OpCode:操作码,用于标识该命令。该命令的操作码在蓝牙core中定义。
  • Parameter Length:参数长度,表示后续参数的总长度(以字节为单位)。这个长度会根据实际使用的参数数量和大小而变化。
  • Advertising_Handle:广播句柄,一个唯一的标识符,用于区分设备上的不同广播集。在创建广播集时,蓝牙协议栈会分配一个广播句柄。
  • Periodic_Advertising_Interval_Min 和 Periodic_Advertising_Interval_Max:周期性广播间隔的最小值和最大值,以0.625毫秒为单位。这两个参数定义了广播事件之间的时间间隔范围。

对应V2版本的命令,还包含以下参数:

  • Num_Subevents:表示在周期性广播事件中子事件的数量。在PAwR特性中,一个周期性广播事件可以由多个子事件组成,每个子事件都包含AUX_SYNC_SUBEVENT_IND PDU和可能的AUX_SYNC_SUBEVENT_RSP PDU。

  • Subevent_Interval:表示周期性广播子事件的间隔,即两个相邻的AUX_SYNC_SUBEVENT_IND PDUs之间的时间间隔。这个间隔应为1.25ms的整数倍,且有效值范围通常在7.5ms到318.75ms之间。

  • Response_Slot_Delay:表示周期性广播响应时隙的延迟,即从AUX_SYNC_SUBEVENT_IND PDU起始处到第一个响应时隙起始处的时间间隔。这个延迟也应为1.25ms的整数倍,且有效值范围通常在1.25ms到317.5ms之间。

  • Response_Slot_Spacing:描述相邻响应时隙之间的时间间隔。这个时长应为0.625ms的整数倍,且有效值范围通常在0.625ms到158.75ms之间。

  • Num_Response_Slots:表示在每个周期性广播子事件中可用于发送响应的时隙数量。在PAwR特性中,同步于周期性广播队列的接收设备可以在响应时隙中发送响应数据包。

2.2. 示例格式

以下是一个通用的HCI_LE_Set_Periodic_Advertising_Parameters命令的示例格式(请注意,实际使用时需要参考特定蓝牙协议栈的文档):

HCI_LE_Set_Periodic_Advertising_Parameters(  
    OpCode: 0xXXXX,  // 操作码,具体值由蓝牙核心规范定义  
    Parameter_Length: X bytes,  // 参数长度,根据实际参数数量和大小确定  
    Advertising_Handle: 0xYYYY,  // 广播句柄,用于标识特定的广播集  
    Periodic_Advertising_Interval_Min: N,  // 周期性广播间隔最小值  
    Periodic_Advertising_Interval_Max: M  // 周期性广播间隔最大值  
    // 其他可能参数(取决于实现):  
    // Num_Subevents, Subevent_Interval, Response_Slot_Delay, Response_Slot_Spacing, Num_Response_Slots, ...  
);

在此示例中,0xXXXX是操作码的占位符,X bytes是参数长度的占位符,0xYYYY是广播句柄的示例值,NM分别是周期性广播间隔的最小值和最大值的示例值。其他可能参数部分取决于蓝牙协议栈的具体实现和版本。

请注意,由于蓝牙BLE技术的不断发展和更新,新的参数和功能可能会被引入。因此,在实际开发中,建议参考最新的蓝牙核心规范和特定蓝牙协议栈的文档来获取最准确和详细的信息。

 三、命令参数详细说明

HCI_LE_Set_Periodic_Advertising_Parameters命令通常包含以下参数(注意:具体参数可能因蓝牙规范版本或设备实现的不同而有所差异)。

3.1. Advertising_Handle

Advertising_Handle用于标识要配置的周期性广播实例的唯一句柄。这个句柄在蓝牙设备中是唯一的,用于控制器(通常是BLE芯片或模块)用来区分和管理不同广播集。当设备需要配置或管理多个周期性广播时,每个广播都会有一个唯一的Advertising_Handle。

  • Size:1 octet(8位)。
  • Value Range:0x00 to 0xEF(即十进制的0到239),表示句柄值的有效范围。
  • 当对应的广播集不存在时
    • 行为:如果控制器接收到一个配置周期性广播参数的命令,但指定的Advertising_Handle对应的广播集不存在,那么控制器将不会执行该命令的配置操作。
    • 错误代码:在这种情况下,控制器应返回一个错误代码来通知主机(通常是BLE设备的应用程序或固件)发生了错误。根据蓝牙核心规范,当指定的广播集不存在时,控制器应返回的错误代码是Unknown Advertising Identifier(未知广播标识符),其错误代码值为0x42

3.2. Periodic_Advertising_Interval_Min和 Periodic_Advertising_Interval_Max

Periodic_Advertising_Interval_Min 和 Periodic_Advertising_Interval_Max 这两个参数用于定义周期性广播的最小和最大发送间隔。

  • 范围:其取值范围均是从最小值7.5ms(根据spec,当N=0x0006时,最小时间间隔为7.5ms,因为0x0006 * 1.25ms = 7.5ms,)到最大值81

猜你喜欢

转载自blog.csdn.net/weixin_37800531/article/details/143217408