【0x0037】HCI_LE_Set_Extended_Advertising_Data命令全面解析

目录

一、命令概述

1.1. 命令功能

1.2. 数据使用

1.3. 数据长度与内存

1.4. 操作与数据更新

1.5. 分片偏好与错误处理

二、命令格式

2.1. 命令标识(Opcode)

2.2. 参数长度(Parameter Length)

2.3. 扩展广播数据(Extended Advertising Data)

2.4. 其他可选参数

2.5. 示例命令格式

2.6. 实现注意事项

三、命令参数详细说明

3.1. Advertising Handle(广播句柄)

3.2. Operation(操作)

3.3. Fragment Preference(片段偏好)

3.4. Advertising Data Length(广播数据长度)

3.5. Advertising Data(广播数据)

 3.5.1. 广播数据的特性

3.5.2. ADVERTISING AND SCAN RESPONSE DATA 格式

四、返回参数详细说明

五、命令执行流程

5.1. 初始化BLE协议栈

5.2. 配置广播参数

5.3. 设置扩展广播数据

5.4. 启动扩展广播

5.5. 处理广播响应

5.6. 代码示例(伪代码)

六、命令使用场景

6.1. 大数据传输

6.2. 复杂广播数据传输

6.3. 多广播集同时存在

6.4. 周期性广播

6.5. 高功耗和复杂业务逻辑场景

6.6. 兼容性和向后兼容场景

6.7.  多信道广播

七、注意事项

7.1. 命令参数的正确性

7.2. 兼容性考虑

7.3. 性能优化

7.4. 错误处理和故障排查


LE Set Extended Advertising Data command(设置扩展广播数据命令)是蓝牙低功耗(BLE)5.0及以上版本中引入的一个重要命令,它允许设备在广播过程中发送更长的数据。

一、命令概述

LE Set Extended Advertising Data command(设置扩展广播数据命令)是蓝牙低功耗(BLE)5.0及以上版本中引入的一个关键命令,它允许BLE设备配置其扩展广播数据。与BLE 4.x版本中的传统广播数据相比,扩展广播数据具有显著的优势,包括支持更长的数据长度(最多可达255字节)以及能够在更多的广播信道上发送数据。这些特性使得BLE 5.0及以上版本的设备在需要传输大量或复杂数据时能够表现得更加出色。

1.1. 命令功能

该命令的主要功能是设置用于广播协议数据单元(PDU)中的数据字段。这些PDU可能包含扩展广播事件中的广播数据。一旦通过HCI_LE_Set_Extended_Advertising_Parameters命令创建了由Advertising_Handle参数标识的广播集,就可以随时发出此命令,无论该广播集中的广播是否已启用或禁用。

1.2. 数据使用

  • 如果指定的广播集当前已启用广播,则芯片应在后续扩展广播事件中使用新数据。
  • 如果在发出此命令时扩展广播事件正在进行中,芯片可能会为该事件使用旧数据或新数据。
  • 如果指定的广播集当前已禁用广播,则芯片应保存数据,并在为该集启用广播时使用它。一旦广播集被移除,数据将被丢弃。

1.3. 数据长度与内存

  • 主机可以使用命令中的Operation参数在一个或多个操作中设置广播数据。
  • 如果数据的总长度超过了由Advertising_Handle参数标识的广播集的容量(可通过LE Read Maximum Advertising Data Length命令查看)或当前可用的内存量,则所有数据将被丢弃,并且控制器将返回内存容量超出(Memory Capacity Exceeded,0x07)错误代码。
  • 如果广播集使用扩展广播,并且数据的总长度大于控制器在当前广播集参数下能够在最长可能的辅助广播段内传输的最大长度(如果广播已启用,则使用当前广播间隔),则所有数据将被丢弃,并且控制器将返回数据包过长(Packet Too Long,0x45)错误代码。

1.4. 操作与数据更新

  • 如果Operation指示新数据的开始(值为0x01或0x03),则任何现有的部分或完整广播数据都将被丢弃。
  • 如果命令导致广播数据被丢弃,或者命令完成后数据的总长度为零,则广播集将没有广播数据。
  • 如果Operation为0x04,则行为与再次发送当前广播数据相同;这可以用于更新广播数据标识符(DID)值。

1.5. 分片偏好与错误处理

  • Fragment_Preference参数为控制器提供了一个提示,指示是否应将广播数据分段。
  • 如果广播集指定了不支持广播数据的类型,则控制器将返回无效的HCI命令参数(Invalid HCI Command Parameters,0x12)错误代码。
  • 如果广播集使用支持广播数据的传统广播PDU,并且Operation不是0x03或Advertising_Data_Length参数超过31个八位字节,则控制器也将返回无效的HCI命令参数错误代码。
  • 对于其他特定的Operation和广播集状态组合,控制器可能会返回不同的错误代码,如命令不允许(Command Disallowed,0x0C)或未知广播标识符(Unknown Advertising Identifier,0x42)。

LE Set Extended Advertising Data command为BLE设备提供了灵活且强大的广播数据配置能力,使得设备能够根据需要在广播中传输更多和更复杂的数据。然而,在使用此命令时,需要仔细考虑数据长度、内存限制、广播集状态以及操作参数等因素,以确保广播数据的正确传输和设备的稳定运行。

二、命令格式

该命令通常包含以下几个关键字段。

2.1. 命令标识(Opcode)

  • 作用:标识这是一个特定的命令,用于设置扩展广播数据。
  • 格式:通常为1或2个字节,具体取决于BLE协议栈或芯片的实现。
  • 示例:在BLE 5.0及以上版本的规范中,这个命令可能有一个特定的操作码,如0x0020(仅作为示例,实际值可能不同)。

2.2. 参数长度(Parameter Length)

  • 作用:指定紧随该命令后的参数(即广播数据)的长度。
  • 格式:通常为1个字节。
  • 计算:参数长度包括扩展广播数据字段的长度,以及其他可能包含的可选参数的长度。
  • 示例:如果广播数据是20字节,则此字段的值应为0x14(十进制20)。

2.3. 扩展广播数据(Extended Advertising Data)

  • 作用:包含实际要广播的数据内容。
  • 格式::长度可变,具体取决于广播数据的实际内容和大小。由多个AD结构(Advertising Data Structures)组成,每个结构包含一个长度字段、一个类型字段和随后的数据字段。
  • 内容:可以包括设备名称、服务UUID、制造商特定数据等。
  • 表示:通常以字节数组的形式表示,每个字节代表广播数据中的一个元素或字段。
  • 限制:总长度受限于BLE协议和设备实现,但在BLE 5.0中,扩展广播允许的最大数据长度为255字节(包括所有AD结构)。

2.4. 其他可选参数

除了上述基本字段外,根据BLE芯片或协议栈的具体实现,LE Set Extended Advertising Data command命令还可能包含其他可选参数。这些参数可能包括广播数据的特定字段、标志、类型等。

  • 广播类型:指定广播是可连接的、可扫描的、定向的等。
  • 广播间隔:设置广播数据包发送的时间间隔。
  • 广播持续时间:指定广播应持续的时间。
  • 其他设置:如是否使用随机地址、是否包括TX功率等。

2.5. 示例命令格式

以下是一个简化的示例,用于说明LE Set Extended Advertising Data command命令的可能格式:

Command Code Parameter Length Extended Advertising Data
0xXXXX(1-2 bytes) 0xYY(1 byte) [Data1, Data2, ..., DataN](可变长度字节数组)
  • Command Code:表示这是一个设置扩展广播数据的命令。
  • Parameter Length:指示后续参数(即扩展广播数据)的长度。
  • Extended Advertising Data:要设置的扩展广播数据,以字节数组的形式表示。

2.6. 实现注意事项

  • 协议栈兼容性:不同的蓝牙协议栈实现可能有不同的命令格式和参数要求。
  • 设备限制:即使BLE 5.0支持更长的广播数据和更复杂的广播类型,具体设备的实现可能有限制。
  • 广播策略:设计广播策略时,应考虑功耗、数据量和广播的可见性。
  • 广播集创建:在发送此命令之前,需要确保广播集已被正确创建,并且处于可修改状态。
  • 广播集发送:如果广播集正在使用或已锁定,则可能需要先禁用或重置广播集,然后才能更改其扩展广播数据。

三、命令参数详细说明

该命令的参数通常包括以下几个部分:

3.1. Advertising Handle(广播句柄)

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

  • 用途:用于标识特定的广播集。在BLE设备中,每个广播集都有其唯一的句柄,该句柄在后续的广播操作中用于引用该广播集。
  • 表示方式:广播句柄的值以十六进制数(如0xXX)的形式表示,其中“XX”代表具体的数字值。
  • 取值范围:广播句柄的取值范围是从0x00到0xEF,即十进制的0到239。这意味着在一个BLE设备中,最多可以有240个不同的广播集(从0x00到0xEF,共240个值)。
  • 重要性:广播句柄是BLE设备中广播处理的重要参数之一。通过它,设备可以管理和区分不同的广播集,从而在广播过程中发送不同的广播数据或实现特定的广播行为。
  • 句柄大小:广播句柄的大小为1个八位字节(octet)。

3.2. Operation(操作)

猜你喜欢

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