目录
2.1. HCI_LE_Set_Data_Length 命令格式
3.2. HCI_LE_Data_Length_Change事件
HCI_LE_Set_Data_Length
是低功耗蓝牙(Bluetooth Low Energy, BLE)核心规范中定义的一个主机控制接口(Host Controller Interface, HCI)命令。该命令允许主机(Host)设置蓝牙控制器(Controller)的数据长度参数。通过合理设置数据长度,可以优化数据传输效率,适应不同的应用场景和通信需求。例如,在传输大量数据(如文件传输)时,适当增大数据长度可以减少数据包的数量,从而降低传输开销,提高传输速度。
一、命令概述
不同的蓝牙设备其控制器支持的数据长度能力可能不同。HCI_LE_Set_Data_Length
命令允许主机根据设备的实际能力和通信双方的需求,设置合适的数据长度,以确保数据传输的兼容性和高效性。比如,当连接一个支持较大数据长度的新设备时,可以使用该命令设置较大的数据长度来充分利用设备的性能优势。
HCI_LE_Set_Data_Length
命令的主要功能是让主机(Host)能够对给定连接中的链路层(LL,Link Layer)数据协议数据单元(PDU,Protocol Data Unit)的最大传输有效载荷大小(connMaxTxOctets)和最大数据包传输时间(connMaxTxTime)提出建议。这两个参数是在BLE通信的链路层数据传输过程中非常关键的因素,它们决定了数据如何在连接上进行传输。
- 命令参数
- Connection Handle:指定要更改数据长度的BLE连接的句柄。
- Max TX Octets(
connMaxTxOctets
):建议的最大传输数据长度(包括头部和CRC),以字节为单位。这个值决定了BLE数据包可以携带的最大有效载荷。 - Max TX Time(
connMaxTxTime
):建议的最大传输时间,以微秒为单位。这个值表示在BLE连接上传输一个数据包所需的最大时间。
- 控制器行为:虽然主机可以通过这个命令提出建议,但控制器(Controller)在实际操作中有一定的自主性。控制器可能会根据本地信息(如设备的当前状态、通信环境、硬件资源等)来决定使用比主机建议的更小或者更大的值。
- 如果控制器接受主机的建议,它将在后续的BLE连接中使用这些参数来传输数据。
- 如果控制器不接受主机的建议,它可能会忽略该命令或返回一个错误代码。
-
示例:假设主机希望为某个BLE连接设置最大传输有效载荷大小为251字节,最大传输时间为某个特定值(该值取决于BLE物理层的波特率和数据包长度)。主机将发送一个
HCI_LE_Set_Data_Length
命令,其中包含相应的Connection Handle
、Max TX Octets
和Max TX Time
参数。控制器接收到该命令后,将根据其内部策略决定是否接受这些建议,并在后续的BLE连接中使用这些参数(如果接受的话)。
二、命令格式和参数说明
2.1. HCI_LE_Set_Data_Length
命令格式
HCI_LE_Set_Data_Length
命令的格式通常包括以下几个部分:
- OGF(Opcode Group Field,操作码组字段):对于BLE相关的命令,OGF通常为0x08,表示该命令属于LE(低功耗)控制器命令组。
- OCF(Opcode Command Field,操作码命令字段):对于
HCI_LE_Set_Data_Length
命令,OCF为0x0022,用于指示该命令的功能。 - Parameter Length(参数长度):这是一个无符号8位整数,表示后续参数的总长度(以字节为单位)。对于
HCI_LE_Set_Data_Length
命令,这个长度是固定的,通常为6字节(不包括OGF和OCF)。 - Connection Handle:指定要更改数据长度的BLE连接的句柄,是一个16位值。
- Max TX Octets:指定最大传输数据长度(包括头部和CRC),是一个无符号16位整数,范围通常为27到251字节。
- Max TX Time:指定最大传输时间(以微秒为单位),是一个无符号16位整数。
以下是一个HCI_LE_Set_Data_Length
命令的示例格式:
OGF: 0x08
OCF: 0x0022(具体值根据蓝牙核心规范确定)
Parameter Length: 0x06(表示后续参数长度为6字节)
Connection Handle: 0xXXXX(具体值根据连接句柄确定)
Max TX Octets: 0xFF(表示最大传输数据长度为255字节,这里仅为示例,实际值应根据需要设置)
Max TX Time: 0xXXXX(具体值根据最大传输时间确定,单位微秒)
注意:
- 在实际发送命令时,OCF的具体值需要参考蓝牙核心规范来确定。
Connection Handle
的值应该替换为实际要更改数据长度的BLE连接的句柄。Max TX Octets
和Max TX Time
的值应该根据实际需要来设置,但需要注意它们受到BLE规范的限制,并且可能受到控制器硬件和软件的限制。
2.2. Connection_Handle
Connection_Handle的作用是指定需要设置数据长度的连接。由于BLE设备可能同时与多个设备保持连接,因此需要使用Connection_Handle来区分不同的连接。Connection_Handle是在建立连接时由BLE控制器分配的,并且对于每个活跃的连接都是唯一的。当主机发送HCI_LE_Set_Data_Length命令时,它会通过Connection_Handle来告诉BLE控制器要修改哪个连接的数据长度参数。
取值范围:0x0000到0x0EFF(十进制为0到3839)。然而,这个范围可能会因BLE控制器的具体实现而有所不同。在实际应用中,可能不会用到这个范围内的所有值。例如,某些值可能被保留用于特定目的,或者由于实现方式的限制,某些值可能根本不会被分配。
2.3. TX_Octets
在HCI_LE_Set_Data_Length
命令中,TX_Octets参数为控制器提供了一个关于发送数据长度的参考。当主机发送该命令时,这个参数值就是主机认为在当前连接下,控制器比较合适的最大发送有效载荷字节数。虽然控制器最终可能根据自身的实际情况(如设备状态、信号质量等)进行调整,但这个参数起到了重要的引导作用,帮助控制器更好地理解主机对于数据传输效率和性能的期望。
参数范围:
- 最小值:0x001B(十进制为27)
- 最大值:0x00FB(十进制为251)
这个范围定义了BLE设备在单个LL Data PDU中可以发送或接收的最大数据量。需要注意的是,这个参数是一个优选值,实际发送或接收的数据量可能会受到多种因素的影响,如BLE控制器的实现、连接间隔、其他设备的干扰等。
影响数据传输策略:TX_Octets直接影响了数据传输过程中的数据包大小策略。如果这个参数值较大,理论上可以减少数据包的数量,从而可能减少传输开销,提高传输效率,但同时也可能对通信质量有更高的要求。相反,较小的值会使数据包变小,增加数据包的数量,虽然可能会降低传输效率,但在不稳定的通信环境中可能会提高数据传输的可靠性。
应用场景示
标签:Set,0x0022,命令,Length,LE,BLE,HCI,Data From: https://blog.csdn.net/weixin_37800531/article/details/143648890