目录
3.1. 广播句柄 (Advertising_Handle)
3.2. 广播事件属性 (Advertising_Event_Properties)
3.3. 广播间隔 (Primary_Advertising_Interval_Min 和 Primary_Advertising_Interval_Max)
3.4. 广播通道映射 (Primary_Advertising_Channel_Map)
3.5. 地址类型 (Own_Address_Type、Peer_Address_Type)
3.5.1. Own_Address_Type(自身地址类型)
3.5.2. Peer_Address_Type(对端地址类型)
3.6.3. Advertising_Filter_Policy参数的忽略
3.7. 广播过滤策略(Advertising_Filter_Policy)
3.8. 广播发射功率 (Advertising_TX_Power)
3.9. 物理层 (Primary_Advertising_PHY、Secondary_Advertising_PHY)
3.9.1. 主要广播物理信道(Primary_Advertising_PHY)
3.9.2. 次要广播物理信道(Secondary_Advertising_PHY)
3.10. 可跳过的最大广播事件数(Secondary_Advertising_Max_Skip)
3.11. 广播集标识符 (Advertising_SID)
3.12. Scan_Request_Notification_Enable
3.13.1. Memory Capacity Exceeded(0x07)
3.13.3. Unsupported Feature or Parameter Value(0x11)
3.13.4. Command Disallowed(0x0C)
4.2. Selected_TxPower (在某些情况下)
HCI_LE_Set_Extended_Advertising_Parameters
命令是蓝牙主机用于设置蓝牙低功耗 (BLE) 广播参数的关键命令。本篇对该命令及其参数的详细解析。
一、命令概述
HCI_LE_Set_Extended_Advertising_Parameters
命令是BLE核心规范中定义的一个主机控制器接口(HCI)命令,用于配置蓝牙设备的扩展广播参数。这些参数决定了设备如何广播其存在性和其他相关信息,从而允许其他设备发现它并与其建立连接。
来源:BLUETOOTH CORE SPECIFICATION Version 5.4 | Vol 4, Part E page 2446
- 功能:设置BLE扩展广播参数。
- 适用场景:BLE设备在进行扩展广播时,需要配置相关参数以确保广播的有效性和可靠性。
- 命令操作码 (OCF):
- 版本1 (Bluetooth Core Specification 5.0 及更早版本): 操作码为
0x0036
。这个版本不支持某些在后续版本中引入的扩展参数,如物理层选项。 - 版本2 (Bluetooth Core Specification 5.1 及更高版本): 操作码为
0x007F
。这个版本增加了对物理层选项(如LE 1M PHY、LE 2M PHY和LE Coded PHY)的支持,以及其他可能的增强功能。
- 版本1 (Bluetooth Core Specification 5.0 及更早版本): 操作码为
- 命令参数: 涵盖了广播集的各种配置参数,如广播句柄、事件属性、广播间隔、通道映射、地址类型等。
- 返回参数: 通常包括状态码和(在某些情况下)选定的发射功率。
二、命令格式
2.1. 一般格式
HCI_LE_Set_Extended_Advertising_Parameters
命令通常包含以下几个关键部分:
- OpCode:操作码,用于标识该命令。该命令的操作码通常由蓝牙核心规范定义。
- 参数长度:表示后续参数的总长度(以字节为单位)。
- 广播句柄:一个唯一的标识符,用于区分设备上的不同广播集。
- 广播参数:包括广播类型、广播事件属性、主广播物理层选项、次广播物理层选项等多个参数。
2.2. 示例参数结构
Opcode: 0x0026 (HCI_LE_Set_Extended_Advertising_Parameters)
Parameter Length: Variable (通常为15字节,但可能因实现而异)
Parameters:
- Advertising_Handle (2 octets): 广播的句柄,用于标识广播集。通常,第一个广播集的句柄为0x0000。
- Advertising_Properties (1 octet): 广播属性,定义广播的类型和行为。
- Bit 0: 0 = Legacy Advertising, 1 = Extended Advertising
- Bit 1: 0 = Connectable Advertising, 1 = Non-Connectable Advertising
- Bit 2: 0 = Scannable Advertising, 1 = Non-Scannable Advertising
- Bit 3: Directed Advertising (if set, bits 4-6 specify type)
- Bits 4-6: Directed Advertising Type (only valid if Bit 3 is set)
- Min_Advertising_Interval (2 octets): 广播间隔的最小值,单位为0.625毫秒。
- Max_Advertising_Interval (2 octets): 广播间隔的最大值,单位为0.625毫秒。
- Advertising_Type (1 octet): 广播类型,决定了广播的发送方式和持续时间。
- Own_Address_Type (1 octet): 设备自己的地址类型。
- Peer_Address_Type (1 octet): 目标设备的地址类型(如果广播类型需要)。
- Peer_Address (6 octets): 目标设备的地址(如果广播类型需要)。
- Advertising_Channel_Map (1 octet): 广播通道映射,指示在哪些通道上发送广播。
- Advertising_Filter_Policy (1 octet): 广播过滤策略,决定哪些扫描请求和连接请求被接受。
三、命令参数详细说明
3.1. 广播句柄 (Advertising_Handle)
广播句柄在BLE技术中是一个非常重要的概念,特别是在管理多个广播集时。BLE设备可以配置不同的广播集,每个广播集包含一组特定的广播参数和数据,用于向周围的设备广播其存在和可用性。广播句柄就是用来唯一标识这些广播集的。
3.1.1. 广播句柄的作用
-
唯一标识:每个广播集都有一个唯一的广播句柄,这使得BLE设备可以同时管理多个广播集而不会发生混淆。
-
参数配置:通过广播句柄,BLE设备可以针对特定的广播集配置其广播参数,如广播间隔、广播类型(可连接、不可连接、扫描响应等)、广播数据的有效载荷等。
-
资源管理:在BLE设备的资源管理中,广播句柄帮助系统有效地分配和管理内存、电源等资源,确保每个广播集都能按照预定的方式运行。
-
应用层交互:在应用层,广播句柄可以用于区分来自不同广播集的事件和数据,从而允许应用程序根据需要进行响应或处理。
3.1.2. 使用场景
-
多角色设备:某些BLE设备可能同时充当多个角色(如心率监测器和温度计),每个角色需要广播不同的数据。通过使用不同的广播集和相应的广播句柄,这些设备可以同时广播多个服务的数据。
-
广播轮播:在某些情况下,BLE设备可能需要在不同的时间段内广播不同的广播信息(如设备状态更新等)。通过配置多个广播集并使用广播句柄进行切换,设备可以灵活地更新其广播内容。
-
兼容性:不同的BLE设备或应用程序可能需要不同的广播参数或数据格式。通过配置多个广播集,BLE设备可以确保与各种设备和应用程序的兼容性。
3.1.3. 注意事项
-
资源限制:BLE设备的资源(如内存和电源)是有限的。因此,在配置多个广播集时,需要仔细考虑资源的使用情况,以避免资源耗尽或性能下降。
-
广播冲突:如果多个广播集同时广播,可能会产生冲突或干扰。因此,需要合理设置广播参数(如广播间隔和频道选择),以减少冲突的可能性。
-
广播策略:在设计广播策略时,需要综合考虑设备的功耗、广播的可靠性和覆盖范围等因素。通过优化广播参数和广播集的配置,可以实现更好的性能和用户体验。
3.2. 广播事件属性 (Advertising_Event_Properties)
广播事件属性用于描述BLE设备正在配置的广播事件的类型及其基本特性。这些属性决定了广播的可见性、连接性以及其他关键参数。
3.2.1. 广播事件类型
BLE广播事件类型通常基于广播PDU(协议数据单元)的类型来定义。PDU类型可以是传统的,也可以是扩展的。传统广播PDU类型在BLE规范中有明确的定义,而扩展广播PDU类型则提供了更多的灵活性和功能。
3.2.2. 传统广播PDU类型与参数值
当使用传统广播PDU类型时,广播事件属性的参数值必须严格遵循BLE规范中表7.2的规定。
来源:BLUETOOTH CORE SPECIFICATION Version 5.4 | Vol 4, Part E page 2447
表7.2详细列出了各种可能的广播事件类型及其对应的参数值。这些参数值通常是一组二进制位,用于表示广播的不同特性,如是否可连接、是否可扫描等。
3.2.3. 扩展广播PDU类型的限制
当使用扩展广播PDU类型时(即PDU的第4位设置为0),提供了更多的广播类型和选项,如定向广播、高占空比广播等。同时广播事件属性受到以下限制:
-
广播不能同时是可连接和可扫描的:这意味着在扩展广播模式下,BLE设备不能同时广播其可连接性和可扫描性。设备必须在这两种特性之间做出选择。
-
不应使用高占空比定向可连接广播(≤3.75ms广播间隔):在扩展广播模式下,如果PDU的第3位设置为0,则设备不能使用高占空比的定向可连接广播。这是因为高占空比的广播可能会增加设备的功耗,并可能干扰其他设备的正常通信。
3.2.4. 广播事件属性
广播事件属性包括广播的可见性、连接性、广播数据的长度和格式等。这些属性决定了BLE设备如何广播其存在和可用性,以及周围设备如何与之交互。
1. 可见性(Scannability):可见性决定了BLE设备是否可以被周围的扫描设备发现。
- 配置:
- 可扫描:设备可以被周围的扫描设备发现,并读取其广播数据。
- 不可扫描:设备不会被扫描设备发现,但可能仍然可以发起连接请求(取决于连接性设置)。
2. 连接性(Connectability):连接性决定了BLE设备是否可以被周围的设备发起连接请求。
- 配置:
- 可连接:设备可以接受来自周围设备的连接请求,并建立BLE连接。
- 不可连接:设备不会响应来自周围设备的连接请求,仅用于广播数据。
需要注意的是,某些广播类型可能同时支持扫描和连接,而某些则可能仅支持其中之一。
3. 广播数据(Advertising Data):广播数据包含了BLE设备希望广播给周围设备的信息,如设备名称、服务UUID等。
- 长度和格式:
- 长度:广播数据的长度受到PDU(协议数据单元)大小的限制。传统广播PDU的数据长度较短,而扩展广播PDU可以支持更长的数据。
- 格式:广播数据的格式由BLE规范定义,包括广播标志、类型长度值(TLV)对等。不同的广播数据类型用于表示不同的信息,如设备名称、制造商特定数据等。
3.2.5. 错误处理
如果广播事件属性的参数值不符合BLE规范的要求,或者控制器不支持指定的广播事件类型,控制器将返回错误代码“Invalid HCI Command Parameters”(0x12)。这表示提供的参数无效或不受支持。
3.2.6. 实际应用中的注意事项
-
兼容性:在配置广播事件属性时,需要确保它们与BLE规范和周围设备的兼容性。不同的BLE设备和应用程序可能需要不同的广播参数和数据格式。
-
资源限制:BLE设备的资源(如内存和电源)是有限的。在配置广播事件属性时,需要仔细考虑资源的使用情况,以避免资源耗尽或性能下降。
-
广播策略:在设计广播策略时,需要综合考虑设备的功耗、广播的可靠性和覆盖范围等因素。通过优化广播事件属性和广播数据的配置,可以实现更好的性能和用户体验。
广播事件属性在BLE通信中至关重要。它们决定了BLE设备的广播行为,并影响着周围设备如何与之交互。因此,在配置广播事件属性时,需要仔细考虑各种因素,以确保广播的可靠性和有效性。
3.3. 广播间隔 (Primary_Advertising_Interval_Min 和 Primary_Advertising_Interval_Max)
广播间隔是BLE设备广播其存在和可用性时的重要参数。这些参数定义了设备广播的频率,即两次连续广播之间的时间间隔。
3.3.1. 广播间隔定义
- Primary_Advertising_Interval_Min:广播间隔的最小值,表示BLE设备广播的最小频率。较小的值意味着设备更频繁地广播,从而增加了被周围设备发现的机会。
- Primary_Advertising_Interval_Max:广播间隔的最大值,表示BLE设备广播的最大频率。较大的值意味着设备广播的频率较低,可能减少了被发现的机会,但有助于节省电源。
3.3.2. 参数要求
- 范围要求:Primary_Advertising_Interval_Min 必须小于或等于 Primary_Advertising_Interval_Max。这是为了确保广播间隔有一个明确的范围,而不是一个固定的值或无效的范围。
- 不等性要求:为了避免控制器在最小和最大间隔之间做出不必要的选择(即总是选择相同的间隔),这两个参数不应相等。通过提供一个范围,控制器可以根据设备的当前活动、电源管理策略或其他因素选择最佳的广播间隔。
3.3.3. 特例处理
- 对于高占空比的可连接定向广播事件类型(ADV_DIRECT_IND),Primary_Advertising_Interval_Min 和 Primary_Advertising_Interval_Max 这两个参数不被使用,应被忽略。这是因为高占空比的可连接定向广播通常用于与特定设备进行快速连接,其广播间隔更加灵活或特定于实现。
3.3.4. 错误处理
- 如果主机提供的广播间隔范围与控制器支持的广播间隔范围不重叠,控制器应返回错误代码“UnsupportedFeatureorParameterValue(不支持的特性或参数值)”(0x11)。这表示主机请求的广播间隔范围超出了控制器的能力或规范定义的限制。
3.3.5. 实际应用中的注意事项
- 兼容性:在配置广播间隔时,需要确保它们与BLE规范和周围设备的兼容性。不同的BLE设备和控制器可能支持不同的广播间隔范围。
- 功耗考虑:较长的广播间隔有助于节省电源,但可能减少了设备被发现的机会。因此,在设计广播策略时,需要权衡功耗和被发现的机会之间的平衡。
- 广播策略:根据设备的应用场景和用户需求,可以设计不同的广播策略。例如,对于需要频繁交互的设备,可以选择较短的广播间隔;而对于只需要偶尔连接的设备,可以选择较长的广播间隔以节省电源。
Primary_Advertising_Interval_Min 和 Primary_Advertising_Interval_Max 是BLE设备广播时的重要参数,它们定义了设备广播的频率和范围。在配置这些参数时,需要仔细考虑各种因素,以确保广播的可靠性和有效性。
3.4. 广播通道映射 (Primary_Advertising_Channel_Map)
3.4.1. 定义与作用
Primary_Advertising_Channel_Map是一个位字段,它指示了在传输广播包时应使用的广播通道索引。BLE广播是在特定的频率通道上进行的,这些通道被称为广播通道。通过设置Primary_Advertising_Channel_Map参数,可以指定设备在哪些通道上广播其信息。
3.4.2. 要求与配置
- 至少设置一个通道位:在Primary_Advertising_Channel_Map参数中,至少应设置一个通道位。这意味着设备至少应在一个广播通道上进行广播。BLE规范通常定义了三个主要的广播通道(37、38、39),但在BLE 5.0及更高版本中,还引入了额外的次要广播通道。因此,在设置Primary_Advertising_Channel_Map时,应确保至少选择了一个有效的广播通道。
- 位字段配置:Primary_Advertising_Channel_Map是一个位字段,每个位代表一个广播通道。如果某个位被设置为1,则表示设备应在该通道上广播。例如,如果位字段为
0011
,则表示设备应在通道37和38上进行广播(假设最低位代表通道37,次低位代表通道38,以此类推)。 <