【0x0006】HCI_LE_Set_Advertising_Parameters命令全面解析

​​​​​​​目录

一、命令概述

二、命令格式

三、命令参数详细说明 

3.1. 操作码(Opcode)

3.2. 参数长度(Parameter Length)

3.3. 广播间隔最小值(Advertising Interval Min)

3.4. 广播间隔最大值(Advertising Interval Max)

3.5. 广播类型(Advertising Type)

3.6. 自身地址类型(Own Address Type)

3.7. 广播数据长度(Advertising Data Length,对于某些实现可能不是直接参数)

3.8. 广播数据(Advertising Data,对于某些实现可能不是直接参数)

3.9. 广播通道映射(Primary_Advertising_Channel_Map)

3.10 对端地址(Peer address type)(仅当广播类型为 0x01 时有效)

3.11. 对端地址(Peer_Address)

3.12 广播过滤策略(Advertising Filter Policy)

四、命令的返回参数说明

4.1. 状态码(Status)

4.2. 其他可能的返回参数

4.3. 示例

 五、命令执行流程

5.1. 命令准备

5.2. 发送命令

5.3. 控制器处理

5.4. 监控与调试

5.6. 示例代码

六、使用场景

6.1. 设备发现

6.2. 服务广播

6.3. 设备配对与连接

6.4. 隐私保护

6.5. 性能优化

6.6. 定制化广播

七、注意事项

7.1. 设备状态

7.2. 参数配置

7.3. 广播通道与功耗

7.4. 参数验证与错误处理

7.5. 广播类型与地址

7.6. 设备规范与兼容性

7.7. 执行时机与状态


HCI_LE_Set_Advertising_Parameters 是低功耗蓝牙(Bluetooth Low Energy, BLE)协议中的一个主机控制接口(Host Controller Interface, HCI)命令,用于设置设备的广播参数。通过该命令,主机可以配置蓝牙控制器在广播过程中使用的各种参数,如广播类型、广播和广播时长等。

一、命令概述

HCI_LE_Set_Advertising_Parameters命令允许主机(Host)配置BLE控制器(Controller)在广播过程中使用的参数。

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

HCI_LE_Set_Advertising_Parameters命令的主要参数包括:

  • 广播间隔(Advertising Interval):定义了设备广播的频率。较小的间隔意味着设备更频繁地广播,从而提高了被其他设备发现的几率。
  • 广播类型(Advertising Type):指定了广播的类型,如可连接不可扫描、可扫描不可连接、可连接可扫描等。这些类型决定了其他设备如何与广播设备进行交互。
  • 自身地址类型(Own_Address_Type):指示在广播数据包中使用的地址类型。包括公共设备地址、随机设备地址、解析地址和静态随机地址等。
  • 对端设备地址类型(Peer_Address_Type)和对端设备地址(Peer_Address):在定向广播中有效,用于指定目标设备的地址和地址类型。当自身地址类型为解析地址或静态随机地址时,这些参数还用于在解析列表中查找相应的本地IRK,以生成广播中使用的自身地址。蓝牙MAC地址-CSDN博客
  • 广播频道映射(Advertising_Channel_Map):指示在传输广播数据包时应使用的广播频道索引。至少应设置一个频道位。
  • 广播过滤器策略(Advertising Filter Policy):定义了设备在广播时如何过滤其他设备的扫描和连接请求。例如,可以设置为只允许白名单中的设备扫描或连接。

这些参数决定了设备如何广播其存在以及广播信息的具体内容。通过配置这些参数,BLE设备可以控制其广播的可见性、频率和范围,从而优化设备发现、连接和数据传输的过程。

二、命令格式

HCI_LE_Set_Advertising_Parameters命令的格式通常包括操作码(OpCode)、参数长度以及具体的广播参数。其中,操作码用于标识该命令,参数长度表示后续参数的总长度(以字节为单位),而广播参数则涵盖了广播集的各种配置,如广播句柄、事件属性、广播间隔等。

1 byte: Opcode (0x0006)  
1 byte: Min. advertising interval (N * 0.625 ms)  
1 byte: Max. advertising interval (N * 0.625 ms)  
1 byte: Advertising type  
1 byte: Own address type  
1 byte: Peer address type (for directed advertising)  
6 bytes: Peer address (for directed advertising)  
1 byte: Advertising channel map  
1 byte: Advertising filter policy

三、命令参数详细说明 

3.1. 操作码(Opcode)

  • OGF(操作码组字段):通常为0x08,表示该命令属于LE(低功耗)控制器命令组。
  • OCF(操作码命令字段):对于HCI_LE_Set_Advertising_Parameters命令,OCF为0x0006。完整的操作码是OGF和OCF的组合,但在实际发送时,由于OGF在BLE命令中通常是固定的(0x08),所以有时只明确给出OCF(0x0006)。

3.2. 参数长度(Parameter Length)

  • 表示后续参数的总长度(以字节为单位)。对于HCI_LE_Set_Advertising_Parameters命令,这个长度是固定的,但具体值取决于实现和所需设置的参数数量。

3.3. 广播间隔最小值(Advertising Interval Min)

广播间隔最小值定义了设备在广播其存在信息时,两个连续广播事件之间的最小时间间隔。这个参数对于设备的可发现性和功耗有着直接的影响。

  • 可发现性:较短的广播间隔意味着设备会更频繁地广播其存在信息,从而增加了被其他设备发现的机会。这对于需要快速建立连接的应用场景非常有用。
  • 功耗:然而,较短的广播间隔也会增加设备的功耗。因为设备需要更频繁地唤醒、处理并发送广播数据,这会消耗更多的电池电量。

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

  • 单位:0.625毫秒。
  • 范围:通常为20毫秒(0x0020)到10.24秒(0x4000)。
  • 说明:定义了广播事件之间的最小时间间隔。较小的间隔会增加设备的可发现性,但也会增加功耗。

在实际应用中,广播间隔的设定需要在这个范围内进行。同时在设置广播间隔时,需要根据实际应用场景和设备需求进行权衡。如果设备需要保持较高的可发现性,并且功耗不是问题(例如,设备连接到电源时),可以选择较短的广播间隔。如果设备需要节省功耗并延长电池寿命(例如,便携式设备或传感器),则可能需要选择较长的广播间隔。

3.4. 广播间隔最大值(Advertising Interval Max)

Advertising_Interval_Max定义了广播事件之间的最大时间间隔。如果设置了与最小值相同的值,则广播间隔将是固定的;如果设置了更大的值,则广播间隔将在最小值和最大值之间变化,这有助于减少设备被跟踪的风险。

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

  • 单位:与广播间隔最小值相同。
  • 范围:通常与广播间隔最小值相同或更大。
  • 广播间隔最小值和最大值的关系
    • Advertising_Interval_Min 必须小于或等于 Advertising_Interval_Max
    • 这是为了确保广播事件之间的时间间隔有一个合理的范围,从而既不会过于频繁地消耗资源,也不会过于稀疏地影响设备的可发现性。
  • 避免相同值
    • Advertising_Interval_Min 和 Advertising_Interval_Max 不应设置为相同的值,以便控制器(BLE芯片或模块)能够根据其他活动(如扫描、连接请求等)确定最佳的广播间隔。
    • 如果两者相同,广播间隔将固定不变,这可能会限制芯片在动态环境中的灵活性。
  • 高占空比定向广播的特殊情况
    • 当广播类型(Advertising_Type)为0x01(ADV_DIRECT_IND,高占空比)时,Advertising_Interval_Min 和 Advertising_Interval_Max 参数不被使用,并且应被忽略。
    • 在这种情况下,广播是定向的,意味着它只针对特定的设备或设备列表。由于这种广播类型的高占空比特性,它通常用于快速建立连接或传输大量数据。
    • 因此,对于高占空比定向广播,广播间隔不是由这些参数控制的,而是由其他机制(如连接参数请求)来确定的。

了解并正确设置广播间隔的最小值和最大值对于BLE设备的性能和功耗至关重要。同时,了解不同广播类型下的特殊要求也是确保设备正常工作的重要一环。在实际应用中,应根据具体需求和场景来配置这些参数。

3.5. 广播类型(Advertising Type)

广播类型与广播数据、广播间隔、设备地址等参数密切相关,这些参数共同决定了BLE设备的广播行为和可发现性。在实际应用中,需要根据具体需求和场景来配置这些参数。

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

取值范围:通常为0x00(可连接不可扫描)、0x01(可连接可扫描)、0x02(不可连接可扫描)、0x03(非定向广播,BLE 5.0及以上版本支持)等。

  • 0x00:可连接不可扫描(ADV_IND - Connectable Undirected Advertising)
    • 这种广播类型允许其他BLE设备发现该设备,并且可以与其建立连接。
    • 但是,它不允许其他设备在不解密的情况下扫描到广播数据的内容。
    • 这种类型通常用于需要建立安全连接的场景。
  • 0x01:可连接可扫描(ADV_DIRECT_IND - Connectable Directed Advertising,高占空比)
    • 注意:这里的描述“高占空比”通常与ADV_DIRECT_IND类型相关联,但并非所有实现都严格遵循这一描述。ADV_DIRECT_IND本质上是一种定向广播,意味着它针对特定的设备或设备地址列表。
    • 这种广播类型允许其他BLE设备发现该设备,并且可以与其建立连接。
    • 同时,它也允许其他设备扫描到广播数据的内容(如果数据是未加密的)。
    • 重要的是,ADV_DIRECT_IND通常用于快速建立连接,因为它针对特定的目标设备。
    • 在某些情况下,如BLE 5.0及更高版本,当使用高占空比时,可能会忽略广播间隔的最小值和最大值参数。
  • 0x02:不可连接可扫描(ADV_SCAN_IND - Scannable Undirected Advertising)
    • 这种广播类型允许其他BLE设备扫描到广播数据的内容(如果数据是未加密的)。
    • 但是,它不允许其他设备与该设备建立连接。
    • 这种类型通常用于广播设备信息或广播数据,而不希望建立连接的场景。
  • 0x03:非定向广播(ADV_NONCONN_IND - Non-connectable Undirected Advertising,BLE 5.0及以上版本支持)
    • 这种广播类型既不允许其他BLE设备建立连接,也不允许扫描到广播数据的内容(除非数据是公开或未加密的,并且设备支持相应的扫描响应)。
    • 它主要用于广播设备的存在或状态信息,而不希望被其他设备连接或获取详细数据。
    • 这种类型在BLE 5.0及更高版本中引入,提供了更多的广播灵活性和隐私保护。

广播类型的具体实现和行为可能因BLE芯片或模块的不同而有所差异。因此,在设计和实现BLE应用时,应参考具体设备的规范和文档。

3.6. 自身地址类型(Own Address Type)

自身地址类型是BLE设备广

猜你喜欢

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