目录
3.3. 广播间隔最小值(Advertising Interval Min)
3.4. 广播间隔最大值(Advertising Interval Max)
3.7. 广播数据长度(Advertising Data Length,对于某些实现可能不是直接参数)
3.8. 广播数据(Advertising Data,对于某些实现可能不是直接参数)
3.9. 广播通道映射(Primary_Advertising_Channel_Map)
3.10 对端地址(Peer address type)(仅当广播类型为 0x01 时有效)
3.12 广播过滤策略(Advertising Filter Policy)
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设备广