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)的支持,以及其他可能的增强功能。命令参数 : 涵盖了广播集的各种配置参数,如广播句柄、事件属性、广播间隔、通道映射、地址类型等。返回参数 : 通常包括状态码和(在某些情况下)选定的发射功率。二、命令格式 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,以此类推)。兼容性 :在配置Primary_Advertising_Channel_Map时,需要确保它与BLE规范和周围设备的兼容性。不同的BLE设备和控制器可能支持不同的广播通道。广播策略 :根据设备的应用场景和用户需求,可以设计不同的广播策略。例如,如果设备需要在多个通道上广播以增加被发现的机会,可以设置多个通道位。然而,这也可能增加设备的功耗和干扰其他设备的可能性。因此,在设计广播策略时,需要权衡这些因素之间的平衡。更新与维护 :随着BLE技术的不断发展和新版本的推出,Primary_Advertising_Channel_Map的配置和要求可能会发生变化。因此,在开发和维护BLE设备时,需要关注BLE规范的更新和变化,以确保设备的兼容性和性能。3.4.3. 实际应用中的注意事项 兼容性 :在配置Primary_Advertising_Channel_Map时,需要确保它与BLE规范和周围设备的兼容性。不同的BLE设备和控制器可能支持不同的广播通道。广播策略 :根据设备的应用场景和用户需求,可以设计不同的广播策略。例如,如果设备需要在多个通道上广播以增加被发现的机会,可以设置多个通道位。然而,这也可能增加设备的功耗和干扰其他设备的可能性。因此,在设计广播策略时,需要权衡这些因素之间的平衡。更新与维护 :随着BLE技术的不断发展和新版本的推出,Primary_Advertising_Channel_Map的配置和要求可能会发生变化。因此,在开发和维护BLE设备时,需要关注BLE规范的更新和变化,以确保设备的兼容性和性能。 Primary_Advertising_Channel_Map是BLE设备广播时的重要参数之一。通过正确配置该参数,可以指定设备在哪些通道上广播其信息,从而优化设备的广播策略和性能。
3.5. 地址类型 (Own_Address_Type、Peer_Address_Type) 在BLE通信中,地址类型(Own_Address_Type、Peer_Address_Type)是广播包中的关键参数,它们指定了在广播和连接过程中使用的设备地址类型。
3.5.1. Own_Address_Type(自身地址类型) Own_Address_Type指定了BLE设备在广播或连接过程中使用的自身地址类型。BLE设备可以使用以下类型的地址:
1. 公共地址(Public Device Address) :
这是一个全球唯一的地址,由IEEE分配,通常与设备的硬件相关联。 公共地址在BLE设备的整个生命周期内保持不变。 2. 随机静态地址(Static Device Address) :
这是一个在设备启动时随机生成的地址,但在同一个上电周期内保持不变。 随机静态地址可以在不同的上电周期中改变,但这不是强制的。 它提供了一种在不需要全球唯一性认证的情况下,实现地址唯一性的方法。 3. 随机私有地址(Random Private Address) :
随机私有地址进一步分为不可解析私有地址(Non-resolvable Private Address)和可解析私有地址(Resolvable Private Address)。 不可解析私有地址不能被其他设备解析或跟踪,适用于需要保护隐私的广播场景。 可解析私有地址可以通过特定的密钥(IRK)进行解析,允许受信任的设备识别广播设备,同时防止恶意设备跟踪。 3.5.2. Peer_Address_Type(对端地址类型) Peer_Address_Type指定了BLE设备在连接过程中使用的对端设备地址类型。对于定向广播(ADV_DIRECT_IND),对等方地址类型和对等方地址必须有效。定向广播是一种针对特定设备的广播类型,它使用对端设备的地址来指定接收者。
3.5.3. 地址类型的使用场景 1. 公共地址 :
适用于需要全球唯一性认证的场景,如设备注册、认证等。 在BLE设备的初始配置阶段,可能会使用公共地址来确保设备可以被正确识别和配置。 2. 随机静态地址 :
适用于不需要全球唯一性认证,但需要在一定范围内保持地址唯一性的场景。 在设备数量众多且不需要全球唯一性认证的BLE网络中,随机静态地址可以提供一种有效的地址分配方案。 3. 随机私有地址 :
不可解析私有地址适用于需要保护隐私的广播场景,如Beacon应用。 可解析私有地址适用于需要保护隐私的同时,仍允许受信任设备识别广播设备的场景,如智能家居网络中的设备连接。 3.5.4. 注意事项 在配置地址类型时,需要确保它们与BLE规范和周围设备的兼容性。 对于定向广播,必须正确设置对方地址类型和对等方地址,以确保广播能够正确发送到目标设备。 在使用随机私有地址时,需要定期更新地址以防止被恶意设备跟踪。同时,需要确保受信任设备能够正确解析和识别可解析私有地址。 地址类型在BLE通信中起着至关重要的作用。正确配置和使用地址类型可以确保BLE设备的广播和连接过程的安全性、可靠性和隐私性。
蓝牙MAC地址-CSDN博客
3.6. 对端地址(Peer_Address) 如果选择了定向广播,Peer_Address_Type和Peer_Address这些参数应有效,并且应忽略Advertising_Filter_Policy参数。
3.6.1. 定义与功能 Peer_Address指定了BLE设备在进行定向广播时,希望与之通信的目标设备的地址。这个地址用于确保广播能够准确地发送到目标设备,而不是广播给所有附近的BLE设备。
3.6.2. 定向广播与Peer_Address 在进行定向广播时,Peer_Address参数必须有效。意味着广播设备必须知道目标设备的地址,并将其设置为Peer_Address。定向广播是一种高效的通信方式,因为它可以减少不必要的广播开销,并确保广播内容只被目标设备接收。
3.6.3. Advertising_Filter_Policy参数的忽略 当选择了定向广播时,Advertising_Filter_Policy参数将被忽略。这是因为定向广播已经通过Peer_Address明确指定了目标设备,因此不再需要额外的过滤策略来确定哪些设备可以接收广播。
3.6.4. 地址类型的选择 Peer_Address可以是公共地址、随机静态地址或随机私有地址中的任何一种。选择哪种地址类型取决于目标设备的配置和通信需求。例如,如果目标设备需要全球唯一性认证,则可能需要使用公共地址;如果目标设备需要保护隐私,则可能会使用随机私有地址。
3.6.5. 注意事项 在进行定向广播之前,广播设备必须确保Peer_Address是有效的,并且目标设备处于可接收广播的状态。 如果目标设备的地址发生变化(例如,由于隐私保护而更改了随机私有地址),广播设备需要相应地更新Peer_Address,以确保定向广播的准确性。 定向广播可能受到设备间时钟漂移的影响,因此在实际应用中,可能需要采取额外的措施来确保广播的可靠性和准确性。 Peer_Address在BLE定向广播中起着至关重要的作用。正确配置和使用Peer_Address可以确保广播内容准确地发送到目标设备,从而实现高效的BLE通信。
3.7. 广播过滤策略(Advertising_Filter_Policy) 广播过滤策略定义了设备如何根据地址类型来过滤接收到的扫描和连接请求。
3.7.1. 定义与功能 广播过滤策略允许BLE设备根据发送扫描或连接请求的设备地址类型来决定是否接受这些请求。通过配置广播过滤策略,BLE设备可以控制哪些设备能够与其进行通信,从而提高通信的安全性和效率。
3.7.2. 过滤策略的类型 广播过滤策略通常包括以下几种类型:
允许所有请求 :这种策略不根据地址类型进行过滤,允许所有设备发送扫描和连接请求。基于地址类型的过滤 :这种策略根据发送请求的设备地址类型(如公共地址、随机静态地址、随机私有地址)来决定是否接受请求。例如,设备可以配置为仅接受来自具有公共地址或特定随机静态地址的设备的请求。白名单过滤 :这种策略使用白名单来指定允许与其通信的设备地址。只有白名单中的设备才能发送扫描和连接请求。3.7.3. 地址类型的考虑 在设置广播过滤策略时,需要考虑设备地址类型的选择。不同的地址类型具有不同的隐私和安全特性。例如,公共地址是全球唯一的,但可能暴露设备的身份;随机静态地址和随机私有地址则提供了更高的隐私保护,但可能需要在设备间建立信任关系。
3.7.4. 配置与应用 BLE设备的广播过滤策略通常可以在设备的配置文件中进行设置。在配置时,需要根据设备的应用场景和安全需求来选择合适的过滤策略。例如,在需要保护隐私的场景中,可能会选择使用随机私有地址和相应的过滤策略来防止未经授权的扫描和连接请求。
3.7.5. 注意事项 在配置广播过滤策略时,需要确保策略与设备的硬件和软件版本兼容。 广播过滤策略可能会影响设备的通信范围和连接速度。因此,在设置时需要权衡这些因素之间的平衡。 对于需要高安全性和隐私保护的场景,可能需要结合使用多种过滤策略和技术来确保通信的安全性和可靠性。 广播过滤策略是BLE设备中一个重要的安全特性。通过合理配置广播过滤策略,可以确保设备只与授权的设备进行通信,从而提高通信的安全性和效率。
3.8. 广播发射功率 (Advertising_TX_Power) 广播发射功率指示了在广播物理通道上传输广播包时的最大功率电平。这个参数对于BLE设备的通信范围、功耗以及与其他设备的互操作性都有着重要的影响。
3.8.1. 定义与功能 广播发射功率是指BLE设备在发送广播包时所使用的功率电平。它决定了广播信号能够传播多远,以及设备能够被其他BLE设备发现和连接的范围。通过调整广播发射功率,BLE设备可以在不同的通信需求和环境条件下实现优化的性能。
3.8.2. 功率电平的选择 BLE设备的广播发射功率通常可以在一定的范围内进行调整。这个范围通常由设备的硬件规格和蓝牙标准所定义。在选择广播发射功率时,需要考虑以下几个因素:
通信范围 :较高的发射功率通常意味着更广的通信范围,但也会增加设备的功耗。因此,在选择发射功率时,需要根据实际的应用场景和需求来权衡通信范围和功耗之间的关系。环境干扰 :在密集的设备环境中,较高的发射功率可能会导致更多的干扰和冲突。因此,在需要减少干扰的场景中,可能需要选择较低的发射功率。功耗考虑 :BLE设备通常以低功耗为特点,因此,在选择发射功率时,需要考虑到设备的电池寿命和功耗要求。3.8.3. 控制器与主机的关系 在BLE设备中,控制器负责实际的通信操作,包括发送和接收广播包。而主机则负责配置和管理设备的通信参数,包括广播发射功率。根据要求,控制器应选择低于或等于主机指定的功率电平。这意味着主机可以根据设备的当前状态、环境条件和通信需求来动态地调整广播发射功率,而控制器则需要遵守这些设置以确保设备的正常通信。
3.8.4. 注意事项 遵守规范 :BLE设备的广播发射功率需要遵守蓝牙标准和相关规范。超过规定范围的发射功率可能会导致设备之间的互操作性问题或干扰其他无线通信设备。考虑环境因素 :在不同的环境条件下,广播发射功率的影响可能会有所不同。例如,在开阔的环境中,较高的发射功率可以扩大通信范围;而在封闭的室内环境中,由于信号反射和衰减,可能需要调整发射功率以获得最佳的通信效果。电池寿命考虑 :较高的发射功率会增加设备的功耗,从而影响电池寿命。因此,在选择发射功率时,需要权衡通信需求和电池寿命之间的关系。 广播发射功率是BLE设备中一个重要的参数,它影响着设备的通信范围、功耗以及与其他设备的互操作性。在选择和调整广播发射功率时,需要综合考虑多个因素,以确保设备的性能和稳定性。
3.9. 物理层 (Primary_Advertising_PHY、Secondary_Advertising_PHY) 在BLE技术中,物理层(PHY)定义了数据传输的底层机制,包括调制方式、编码方式、比特率和信道等。对于广播操作,BLE引入了主要广播物理信道(Primary Advertising Physical Channel)和次要广播物理信道(Secondary Advertising Physical Channel),并允许在这些信道上使用不同的PHY来传输广播数据包。
3.9.1. 主要广播物理信道(Primary_Advertising_PHY) 1. 定义: 主要广播物理信道用于传输广播数据包,这些数据包用于让其他BLE设备发现该设备。
2. 支持的PHY: 通常,如果使用的是传统广播PDU(Protocol Data Unit),则主要广播物理信道应使用LE 1M PHY(低功耗1Mbps物理层)。然而,BLE 5.1及更高版本引入了新的PHY选项,如LE Coded PHY(低功耗编码物理层),它提供了更高的抗干扰能力和更远的通信范围。
3. 参数:
Primary_Advertising_PHY :这是一个配置参数,用于指定在主要广播物理信道上使用的PHY类型。主机(Host)通过此参数告诉控制器(Controller)应该使用哪种PHY来发送广播数据包。错误代码 :如果主机指定了一个控制器不支持的PHY类型(包括为未来使用保留的值),控制器应返回一个错误代码,通常是“Unsupported Feature or Parameter Value”(0x11),以指示该操作不被支持。4. 选项:
Primary_Advertising_PHY_Options :当Primary_Advertising_PHY指示使用LE Coded PHY时,此参数变得重要。它用于指定主机对编码方案的偏好或要求。编码方案可能包括不同的数据速率、编码类型和冗余度等。忽略情况 :如果Primary_Advertising_PHY没有指示使用LE Coded PHY,则Primary_Advertising_PHY_Options参数将被忽略。这是因为LE 1M PHY不需要额外的编码选项,而只使用标准的调制和编码方案。3.9.2. 次要广播物理信道(Secondary_Advertising_PHY) 1. 定义: 次要广播物理信道是BLE 5.1及更高版本引入的一个新概念,它为主广播物理信道提供了额外的广播能力。通过使用次要广播物理信道,BLE设备可以在不干扰主要广播活动的情况下,发送更多的广播数据包或采用不同的物理层(PHY)进行广播。
2. 支持的PHY:
次要广播物理信道在PHY的选择上具有一定的灵活性。它可以使用与主要广播物理信道相同的PHY,以实现广播数据的冗余传输或提高传输的可靠性。同时,它也可以使用不同的PHY,以利用不同PHY的特性(如抗干扰能力、通信范围等)来满足特定的应用场景需求。这取决于主机的配置和控制器的支持情况。
3. 参数:
Secondary_Advertising_PHY :此参数用于指定在次要广播物理信道上使用的PHY类型。通过配置此参数,主机可以灵活地选择最适合其应用场景的PHY类型。错误代码 :如果主机指定了一个控制器不支持的PHY类型(包括为未来使用保留的值),控制器应返回一个错误代码,通常是“Unsupported Feature or Parameter Value”(0x11) ,以指示该操作不被支持。4. 选项:
Secondary_Advertising_PHY_Options :当Secondary_Advertising_PHY指示使用LE Coded PHY时,此参数变得重要。它用于指定主机对编码方案的偏好或要求,包括周期性广播的配置等。通过配置此参数,主机可以优化广播数据的传输效率和可靠性。忽略情况 :如果Secondary_Advertising_PHY没有指示使用LE Coded PHY,则Secondary_Advertising_PHY_Options参数将被忽略。3.9.3. 特殊考虑 恒定音调扩展(Constant Tone Extensions) :在某些情况下,为了增强广播信号的抗干扰能力,可能会为广播集启用恒定音调扩展。然而,并非所有PHY都支持恒定音调扩展。如果为广播集启用了恒定音调扩展,并且Secondary_Advertising_PHY指定了一个不允许恒定音调扩展的PHY,则控制器应返回错误代码“Command Disallowed”(0x0C) ,以指示该操作不被允许。3.10. 可跳过的最大广播事件数(Secondary_Advertising_Max_Skip) 3.10.1. 定义与功能 定义 :Secondary_Advertising_Max_Skip 参数表示在可以发送AUX_ADV_IND(Auxiliary Advertising Indication,辅助广播指示)之前,可以跳过的最大广播事件数。功能 :该参数允许BLE设备在次要广播过程中,根据实际需要灵活调整广播事件的发送频率。通过跳过某些广播事件,设备可以降低功耗,同时仍然保持足够的广播覆盖率,以便其他BLE设备能够发现和连接。3.10.2. 工作原理 在BLE 5.1及更高版本中,设备可以利用次要广播物理信道(Secondary Advertising PHY)发送AUX_ADV_IND数据包。这些数据包通常包含比传统广播更丰富的信息,如更大的数据负载、更长的广播间隔等。 Secondary_Advertising_Max_Skip 参数允许设备在发送AUX_ADV_IND之前跳过一定数量的广播事件。这意味着设备不必在每个广播事件上都发送AUX_ADV_IND,而是可以根据需要选择性地发送。 通过调整该参数,设备可以在保持广播覆盖率和降低功耗之间找到最佳平衡。例如,在需要节省功耗的场景下,设备可以增加跳过的广播事件数;而在需要提高广播覆盖率的场景下,设备可以减少跳过的广播事件数。 3.10.3. 注意事项 Secondary_Advertising_Max_Skip 参数的值通常由一个或多个配置参数共同决定,这些配置参数可能包括广播间隔(Advertising Interval)、从设备延迟(Slave Latency)等。 在配置Secondary_Advertising_Max_Skip 参数时,需要确保它与设备的实际广播需求和功耗要求相匹配。如果设置不当,可能会导致广播覆盖率下降或功耗增加。 此外,还需要注意不同BLE设备和控制器对Secondary_Advertising_Max_Skip 参数的支持情况。某些设备或控制器可能不支持该参数或对其有特定的限制条件。因此,在配置和使用该参数时,需要参考相关设备的文档和规格说明。 Secondary_Advertising_Max_Skip 参数是BLE 5.1及更高版本中引入的一个重要参数,它允许设备在次要广播过程中灵活调整广播事件的发送频率。通过合理配置该参数,设备可以在保持广播覆盖率和降低功耗之间找到最佳平衡。
3.11. 广播集标识符 (Advertising_SID) Advertising_SID,即广播集标识符(Advertising Set Identifier),用于区分不同广播集的一个重要参数,特别是在BLE 5.1及更高版本引入的扩展广播(Extended Advertising)功能中。
3.11.1. 定义与功能 定义 :Advertising_SID 参数指定了在具有ADI(Advertising Data Info,广播数据信息)字段的扩展报头(Extended Header)中的ADI字段的广播SID(Advertising Set Identifier,广播集标识符)子字段中要传输的值。功能 :该参数用于区分不同的广播集(Advertising Set),从而允许BLE设备在同一时间内广播多个不同的广播集。每个广播集可以包含不同的广播数据、广播间隔和其他参数。通过为不同的广播集分配不同的Advertising_SID值,接收设备可以区分并处理来自同一发送设备的不同广播集。3.11.2. 工作原理 在BLE 5.1及更高版本中,扩展广播功能允许设备使用更多的物理信道和更大的数据负载来广播信息。扩展广播PDU(Protocol Data Unit,协议数据单元)可以包含ADI字段,该字段用于携带广播集的相关信息。 ADI字段由多个子字段组成,其中广播SID子字段用于标识特定的广播集。通过配置Advertising_SID参数,设备可以指定在广播扩展广播PDU时要在广播SID子字段中传输的值。 当接收设备接收到包含ADI字段的扩展广播PDU时,它会检查广播SID子字段的值以确定该PDU属于哪个广播集。然后,接收设备可以根据该广播集的其他参数和信息来处理该PDU。 3.11.2. 使用场景与注意事项 1. 使用场景 :
多广播集广播: BLE设备可以在同一时间内广播多个不同的广播集,每个广播集具有不同的Advertising_SID值,以满足不同的应用需求。广播集识别与过滤: 接收设备可以根据Advertising_SID来识别和过滤来自同一发送设备的不同广播集,从而更准确地处理广播数据。2. 注意事项 :
如果广播集仅使用不包含ADI字段的PDU(如传统广播PDU或某些特定的扩展广播PDU),则Advertising_SID参数将被忽略。在这种情况下,接收设备无法根据广播SID来区分不同的广播集。 在配置Advertising_SID参数时,需要确保其为有效的值,并且与其他广播集的Advertising_SID值不同。这有助于避免接收设备在处理广播数据时发生混淆或错误。 此外,还需要注意不同BLE设备和控制器对Advertising_SID参数的支持情况。某些设备或控制器可能不支持该参数或对其有特定的限制条件。因此,在配置和使用该参数时,需要参考相关设备的文档和规格说明。 Advertising_SID参数是BLE 5.1及更高版本中扩展广播功能的一个重要组成部分。它允许设备在同一时间内广播多个不同的广播集,并通过为不同的广播集分配不同的Advertising_SID值来区分它们。这有助于接收设备更准确地处理来自同一发送设备的不同广播集。
3.12. Scan_Request_Notification_Enable Scan_Request_Notification_Enable 参数的主要功能是控制BLE设备在接收到扫描请求(Scan Request)PDU(Protocol Data Unit,协议数据单元)时,是否向主机或上层应用发送通知。
3.12.1. 定义与功能 Scan_Request_Notification_Enable 参数是一个布尔值(True/False或1/0),用于指示BLE控制器在特定条件下是否应触发通知。这些特定条件包括:
控制器接收到一个扫描请求PDU。 该PDU是对来自指定广播集的广播的响应。 广播中包含设备的地址。 扫描请求来自符合广播过滤策略的扫描器。 当这些条件同时满足时,如果Scan_Request_Notification_Enable 参数被设置为True(或1),则控制器会向主机发送一个通知,表明已经接收到了符合条件的扫描请求PDU。
3.12.2. 应用场景 Scan_Request_Notification_Enable 参数在BLE应用中具有广泛的应用场景,包括但不限于:
设备发现与连接 :在BLE设备发现过程中,扫描器通过发送扫描请求PDU来请求更多关于广播设备的信息。如果广播设备启用了Scan_Request_Notification_Enable 参数,则它可以在接收到扫描请求时立即通知主机,从而加快设备发现和连接的速度。安全认证 :在某些BLE应用中,扫描请求可能包含用于安全认证的信息。通过启用Scan_Request_Notification_Enable 参数,广播设备可以在接收到这些请求时立即通知主机,以便进行进一步的安全处理。资源管理 :在BLE网络中,设备可能需要管理其广播和扫描资源。通过监控扫描请求的通知,广播设备可以动态地调整其广播策略,以优化资源使用并减少功耗。3.12.3. 配置与注意事项 在配置Scan_Request_Notification_Enable 参数时,需要注意以下几点:
兼容性 :不同的BLE控制器和主机平台可能对Scan_Request_Notification_Enable 参数的支持和实现有所不同。因此,在配置该参数之前,需要参考相关设备的文档和规格说明,以确保兼容性和正确性。功耗考虑 :启用Scan_Request_Notification_Enable 参数可能会增加BLE设备的功耗,因为控制器需要在接收到扫描请求时立即通知主机。因此,在配置该参数时,需要权衡功耗和性能之间的平衡。安全性 :如果扫描请求包含敏感信息或用于安全认证,则需要确保在启用Scan_Request_Notification_Enable 参数时采取适当的安全措施来保护这些信息。 Scan_Request_Notification_Enable 参数是BLE技术中一个重要的配置选项,它允许BLE控制器在接收到符合条件的扫描请求PDU时向主机发送通知。通过合理地配置该参数,可以优化BLE设备的性能、功耗和安全性,从而满足各种应用场景的需求。
3.13. 错误代码 3.13.1. Memory Capacity Exceeded(0x07) 含义 :控制器内存不足,无法创建新的广播集。解决方案 :释放不再使用的广播集,优化内存使用,或考虑升级硬件。3.13.2. Packet Too Long(0x45) 含义 :广播数据或扫描响应数据过长,超过了控制器能传输的最大长度。解决方案 :缩短数据长度,调整广播编码和分段策略。3.13.3. Unsupported Feature or Parameter Value(0x11) 含义 :控制器不支持主机请求的功能或参数值。解决方案 :检查并修改功能和参数值,确保它们与控制器的支持范围相匹配。3.13.4. Command Disallowed(0x0C) 1. 额外情况:
当广播已启用时尝试修改广播集配置。 当周期性广播已启用且指定了其他类型的广播(如可连接、可扫描、传统或匿名广播)时。 当周期性广播正在使用特定的PHY,但Secondary_Advertising_PHY参数未指定该PHY时。 解决方案 :在允许的情况下修改广播集配置,确保不与其他广播类型冲突,并正确设置PHY参数。2. 额外注意事项:
检查广播句柄 :在发送任何修改广播集的命令之前,确保广播句柄有效且指向现有的广播集。了解控制器限制 :在开发过程中,详细了解控制器的内存限制、支持的广播类型和PHY选项等。遵循规范 :遵循蓝牙核心规范和HCI功能规范,确保所有命令和参数都符合标准。调试和测试 :在设备上线之前,进行全面的调试和测试,以确保在各种情况下都能正确处理错误代码。 HCI_LE_Set_Extended_Advertising_Parameters命令允许主机详细配置蓝牙设备的广播行为,包括广播类型、间隔、信道、地址类型等。正确配置这些参数对于确保设备能够高效、有效地广播其存在和可连接性信息至关重要。
四、返回参数详解 4.1. Status 描述 :这是一个状态码,用于指示HCI_LE_Set_Extended_Advertising_Parameters命令是否成功执行。可能取值 : 0x00:成功。命令已成功执行,没有错误。0x0A:命令不允许(Command Disallowed) 。当前状态不允许执行该命令。0x11:不支持的功能(Unsupported Feature or Parameter Value) 。提供的参数值不被支持。0x12:无效的参数格式(Invalid HCI Command Parameters) 。命令参数格式不正确。其他状态码可能表示硬件故障、资源限制等问题。 作用 :通过检查状态码,主机可以确定命令是否成功执行,并据此采取适当的措施(如重试命令、调整参数值或报告错误)4.2. Selected_TxPower (在某些情况下)描述: Selected_TX_Power 是一个数值参数,用于指示BLE控制器在发送广播包时所使用的发射功率。该值通常以分贝毫瓦(dBm)为单位表示,是一个衡量发射器输出功率强弱的指标。可能取值 : 发射功率级别通常以dBm(分贝毫瓦)为单位表示。 可能的取值范围取决于设备的实现和蓝牙核心规范的版本。例如,某些设备可能支持从-20 dBm到+10 dBm的发射功率级别。 如果设备不支持返回Selected_TxPower参数,或者由于某种原因无法确定实际选择的发射功率级别,则可能不会返回此参数。 作用 :通过了解实际选择的发射功率级别,主机可以评估设备的广播范围,并据此调整其他参数(如广播间隔)以优化设备发现过程。4.3. 使用注意事项 在解析返回参数时,务必参考蓝牙核心规范和设备的实现文档,以确保正确理解和处理这些参数。 如果Status参数指示命令失败,请检查提供的参数值是否符合蓝牙核心规范的要求,并考虑可能的硬件限制或资源冲突。 如果设备支持Selected_TxPower参数,并且您希望了解实际选择的发射功率级别,请确保在发送HCI_LE_Set_Extended_Advertising_Parameters命令时包含了必要的参数,以便设备能够确定并返回该值。 五、命令执行流程 HCI_LE_Set_Extended_Advertising_Parameters 命令的执行流程通常涉及以下几个步骤,这些步骤确保了BLE设备能够正确配置并启动扩展广播功能。
5.1. 命令准备 参数设置 :在执行HCI_LE_Set_Extended_Advertising_Parameters命令之前,需要根据应用需求设置相关的广播参数。这些参数包括但不限于广播间隔(Advertising Interval)、广播类型(Advertising Type)、广播数据(Advertising Data)、扫描响应数据(Scan Response Data)、广播信道(Advertising Channels)等。命令格式 :确保命令的格式符合蓝牙规范的要求。HCI_LE_Set_Extended_Advertising_Parameters命令通常包含操作码(OpCode)、参数长度和具体的参数值。5.2. 发送命令 通过HCI接口 :将准备好的HCI_LE_Set_Extended_Advertising_Parameters命令通过主机控制器接口(HCI)发送给蓝牙控制器。这通常是由蓝牙协议栈中的主机部分(Host)完成的。等待响应 :发送命令后,主机需要等待蓝牙控制器的响应。蓝牙控制器在接收到命令后,会解析命令并执行相应的操作。5.3. 控制器处理 参数验证 :蓝牙控制器在接收到HCI_LE_Set_Extended_Advertising_Parameters命令后,会首先验证参数的合法性和有效性。如果参数设置不正确或超出范围,控制器可能会返回错误响应。配置广播参数 :如果参数验证通过,蓝牙控制器将根据命令中的参数值配置广播参数。这包括设置广播间隔、广播类型、广播数据等。准备广播 :在配置完广播参数后,蓝牙控制器会准备广播数据,并等待主机发送启用扩展广播的命令。5.4. 启用扩展广播 发送启用命令 :在确认广播参数已经正确配置后,主机需要发送LE Set Extended Advertising Enable command命令来启用扩展广播功能。广播启动 :蓝牙控制器在接收到启用命令后,会启动扩展广播功能,并按照配置的参数开始广播数据。5.5. 监控与调试 状态监控 :在广播启动后,主机可以监控蓝牙控制器的状态变化,以确保广播功能已经正确启用。可以通过读取相关的状态寄存器或使用调试工具来完成。问题诊断 :如果广播功能没有按预期工作,主机可以使用调试工具来诊断问题。这可能包括检查命令的发送和接收情况、验证参数的设置是否正确、检查蓝牙控制器的固件版本等。六、使用注意事项 6.1. 禁用现有广播活动 重要性 :在发送HCI_LE_Set_Extended_Advertising_Parameters命令之前,必须确保已经通过HCI_LE_Set_Advertising_Enable命令禁用了任何现有的广播活动。如果尝试在广播活动正在进行时更改广播参数,可能会导致不可预测的行为,包括命令失败、广播中断或设备不稳定。操作 :在发送HCI_LE_Set_Extended_Advertising_Parameters命令之前,发送一个HCI_LE_Set_Advertising_Enable命令,并将“Advertising_Enable”参数设置为0(禁用)。等待确认命令成功执行后再发送新的广播参数配置命令。6.2. 参数支持和默认值 重要性 :根据蓝牙核心规范的版本和设备的实现,某些广播参数可能不受支持或具有不同的默认值。这意味着即使按照规范发送了特定的参数值,设备也可能不会按照预期的方式工作。操作 :在配置广播参数之前,查阅设备的实现文档和蓝牙核心规范,了解哪些参数受支持以及它们的默认值。如果某个参数不受支持,请避免在命令中包含该参数,或者将其设置为设备的默认值。6.3. 电源效率、广播范围和兼容性 重要性 :在配置广播参数时,必须考虑到设备的电源效率、广播范围和与其他设备的兼容性。这些因素是相互关联的,并且可能需要根据具体的应用场景和设备能力进行调整。操作 : 电源效率 :通过调整广播间隔、通道映射和发射功率等参数来优化电源效率。较长的广播间隔和较低的发射功率可以延长设备的电池寿命,但可能会减少广播范围和可发现性。广播范围 :通过调整发射功率和广播类型等参数来优化广播范围。较高的发射功率和适当的广播类型(如可连接且可扫描的广播)可以增加广播范围,但可能会增加电源消耗。兼容性 :确保配置的广播参数与目标设备的蓝牙核心规范版本和实现兼容。避免使用不受支持的参数值,以确保与其他设备的互操作性。6.4. 其他注意事项 命令顺序 :确保按照正确的顺序发送HCI命令。例如,在发送HCI_LE_Set_Extended_Advertising_Parameters命令之前,可能需要先发送其他配置命令(如设置扫描参数或白名单)。错误处理 :在发送命令后,始终检查返回的状态码。如果命令失败,请按照设备的实现文档和蓝牙核心规范的建议进行错误处理。文档和测试 :在部署之前,仔细查阅设备的实现文档和蓝牙核心规范,并进行充分的测试以确保广播参数配置的正确性和可靠性。 通过遵循这些注意事项,可以更有效地配置BLE设备的广播参数,从而优化设备发现、连接建立和数据传输的过程。
七、缺失参数的处理方式 当命令在发出时未包含上述全部所需参数时,为了确保命令能够尽可能正确地执行,通常会为那些缺失的参数设定一些默认值或采取特定的处理方式。
7.1. 必须使用的values 7.2. 命令参数(Command parameters)