这里会显示出您选择的修订版和当前版本之间的差别。
后一修订版 | 前一修订版 后一修订版 两侧同时换到之后的修订记录 | ||
cc2640r2f:le_data_length_extension [2017/08/31 16:30] 127.0.0.1 外部编辑 |
cc2640r2f:le_data_length_extension [2017/09/12 21:22] wuyl |
||
---|---|---|---|
行 1: | 行 1: | ||
< | < | ||
+ | |||
# 概要 # | # 概要 # | ||
- | 数据长度扩展(LE Data Length Extension)功能允许LE控制器在连接状态下发送具有高达251字节的PDU。在连接期间的任何时刻,主从设备可以协商该PDU大小。 | + | 数据长度扩展( LE Data Length Extension )功能允许 LE 控制器在连接状态下发送高达 251 字节的 PDU,在连接期间的任何时刻,主从设备可以协商该 PDU 大小。 |
- | 对比与BLE4.0/ | + | 对比 BLE4.0/4.1 的控制器数据通道最大有效载荷为 27 字节,使能数据扩展功能后的 BLE4.2/ |
## 数据长度更新过程 ## | ## 数据长度更新过程 ## | ||
一旦建立连接,控制器将以两种可能的方式之一进行操作: | 一旦建立连接,控制器将以两种可能的方式之一进行操作: | ||
- | > | ||
- | - 如果在连接之前,PDU大小和传输时间都被设置为默认值(即TX和RX都为27B, | + | > **提示:**本文所有的提及默认 |
- | | + | - 如果在连接之前,PDU 大小和传输时间都被设置为默认值(即 TX 和 RX 都为 27B,328us),则 CC2640R2F 将不会发起数据长度交换命令(即 |
- | - 如果在连接之前,PDU的大小和传输时间收发双方或者有一方不是默认值,则设备的LE控制器将使用`LL_LENGTH_REQ`和`LL_LENGTH_RSP`控制PDU协商一个PDU的较大的有效负载大小。 | + | |
- | 数据长度更新可由Host发起或Controller自主执行。主机或从机可以启动该过程。 | + | - 如果在连接之前,PDU 的大小和传输时间收发双方或者有一方不是默认值,则设备的 LE 控制器将使用 `LL_LENGTH_REQ` 和 `LL_LENGTH_RSP` 控制 PDU 协商,选择一个较大的 PDU 有效负载。 |
- | 数据长度更新过程完成后,两个控制器都会根据两个参数选择新的数据长度:PDU大小和传输时间。同时被主从设备支持的最大长度将会被选择; | + | |
- | * **PDU大小** | + | 数据长度更新过程完成后,两个控制器都会根据两个参数选择新的数据长度:PDU 大小和传输时间,同时被主从设备支持的最大长度将会被选择。考虑到时间来支持不同的数据速率。这些参数定义如下: |
- | Controller支持的最大应用数据有效载荷大小。该大小不包括数据包的其他固定开销,例如访问地址或前导码。 | + | |
+ | * ** PDU 大小** | ||
+ | Controller 支持的最大应用数据有效载荷大小。该大小不包括数据包的其他固定开销,例如访问地址或前导码。 | ||
* **时间** | * **时间** | ||
- | 设备以PHY速率发送或接收PDU的最大微秒数。该参数使用微秒单位(us)。 | + | 设备以 PHY 速率发送或接收 PDU 的最大微秒数。该参数使用微秒单位(us)。 |
+ | |||
+ | > **注意**:有关数据长度更新过程的更多信息,请参考蓝牙核心规范版本 5.0 的数据长度更新过程部分([Vol 6],B 部分,第 5.1.9 节)。 | ||
- | > **注意**:有关数据长度更新过程的 更多信息,请参考蓝牙核心规范版本5.0的数据长度更新过程部分([Vol 6],B部分,第5.1.9节)。 | + | 下表可以参考支持的最大时间和大小,CC2640R2F 支持这些最大值。 |
- | 下表可以参考支持的最大时间和大小。CC2640R2F支持这些最大值。 | + | 表1. 数据长度扩展支持的最大时间和大小 |
![](http:// | ![](http:// | ||
行 34: | 行 38: | ||
## 初始值 ## | ## 初始值 ## | ||
- | BLE4.2/5.0 工程中为了兼容BLE4.0/ | + | BLE4.2/5.0 工程为了兼容B LE4.0/BLE4.1,默认的 TX PDU 设置为 27 字节,同时使用 328 作为最大传输时间。 |
- | 在RX PDU上面,默认使能LE Data Packet功能,也就是默认支持接收 251,以及RX PDU最大传传输时间为2120us。 | + | 在 RX PDU 上面,默认使能 LE Data Packet 功能,也就是默认支持接收 251,以及 RX PDU 最大传传输时间为 2120us。 |
- | 为了最大吞吐量,诸如BLE主机的高层协议也应使用较大的PDU大小(< | + | 为了最大吞吐量,诸如 BLE 主机的高层协议也应使用较大的 PDU 大小(< |
- | > | + | ![](http:// |
- | 应用工程可以通过以下两种方式更新数据长度: | + | 图1. 协议栈中的各种 |
- | | + | |
- | 2. Controller 可以设置默认的PDU大小和传时间(27byte/ | + | |
- | ![](http:// | + | > **注意**:正如**数据长度更新过程**章节介绍过, |
- | ## 数据长度扩展HCI命令和事件 ## | + | 应用工程可以通过以下两种方式更新数据长度: |
+ | 1. 直接初始化到最大值,每次建立连接后 Controller 会自动申请一个更大 PDU ; | ||
+ | 2. Controller 可以设置默认的 PDU 大小和时间( 27byte/ | ||
- | 以下HCI命令可用于与数据长度扩展功能相关的控制器交互: | + | ## 数据长度扩展 |
- | - LE读取建议的默认数据长度命令(`HCI_LE_ReadSuggestedDefaultDataLenCmd()`) | + | 以下 HCI 命令可用于与数据长度扩展功能相关的控制器交互: |
- | - LE写入建议的默认数据长度命令(`HCI_LE_WriteSuggestedDefaultDataLenCmd()`) | + | |
- | - LE读取最大数据长度命令(`HCI_LE_ReadMaxDataLenCmd()`) | + | |
- | - LE设置数据长度命令(`HCI_LE_SetDataLenCmd()`) | + | |
- | 以上命令可能会产生LE数据长度更改事件。 | + | - LE 读取建议的默认数据长度命令( `HCI_LE_ReadSuggestedDefaultDataLenCmd()` ) |
+ | - LE 写入建议的默认数据长度命令( `HCI_LE_WriteSuggestedDefaultDataLenCmd()` ) | ||
+ | - LE 读取最大数据长度命令( `HCI_LE_ReadMaxDataLenCmd()` ) | ||
+ | - LE 设置数据长度命令( `HCI_LE_SetDataLenCmd()` ) | ||
- | * LE Data Length Change Event | + | 以上命令可能会产生 |
- | 除了Bluetooth SIG定义的HCI命令之外,以下TI Vendor Specific命令还可以与数据长度扩展功能相关的控制器进行交互: | + | * LE 数据长度更改事件( Data Length Change Event ) |
+ | |||
+ | 除了 Bluetooth SIG 定义的 HCI 命令之外,以下 TI Vendor Specific 命令还可以与数据长度扩展功能相关的控制器进行交互: | ||
* HCI_EXT_SetMaxDataLenCmd | * HCI_EXT_SetMaxDataLenCmd | ||
行 67: | 行 73: | ||
### 在连接后设置包长度 ### | ### 在连接后设置包长度 ### | ||
- | 如**初始值**章节我们已经讲解过,为了兼容BLE4.0/ | + | **初始值**章节已经讲解过,为了兼容 BLE4.0/4.1 设备,默认传输的 TX PDU 设置为 27字节/ |
````C | ````C | ||
#define APP_TX_PDU_SIZE 27 | #define APP_TX_PDU_SIZE 27 | ||
行 74: | 行 81: | ||
#define APP_RX_TIME 328 | #define APP_RX_TIME 328 | ||
| | ||
- | // | + | //这个 API 记录在 hci.h |
HCI_EXT_SetMaxDataLenCmd (APP_TX_PDU_SIZE | HCI_EXT_SetMaxDataLenCmd (APP_TX_PDU_SIZE | ||
| | ||
```` | ```` | ||
- | 一旦建立了连接,Controller对等的主从设备协商数据包大小。如果两个设备都设置为使用数据长度扩展,可以直接观察到吞吐量提高。 | + | |
+ | 一旦建立了连接,Controller 对等的主从设备协商数据包大小。如果两个设备都设置为使用数据长度扩展,可以直接观察到吞吐量提高。 | ||
如果需要重新使能连接建立之初的自动协商功能,只需使用上述相同的命令调整值即可。使用代码段搜所示。 | 如果需要重新使能连接建立之初的自动协商功能,只需使用上述相同的命令调整值即可。使用代码段搜所示。 | ||
- | 否则控制器将拒绝此调用。除了TI Vendor Specific命令外,还可以使用蓝牙SIG HCI命令,如下所示。 | + | 否则控制器将拒绝此调用。除了 TI Vendor Specific 命令外,还可以使用蓝牙 SIG HCI 命令,如下所示: |
````C | ````C | ||
行 88: | 行 96: | ||
#define APP_SUGGESTED_TX_TIME 2120 | #define APP_SUGGESTED_TX_TIME 2120 | ||
| | ||
- | // | + | //这个 API 记录在 hci.h 中 |
HCI_LE_WriteSuggestedDefaultDataLenCmd (APP_SUGGESTED_PDU_SIZE | HCI_LE_WriteSuggestedDefaultDataLenCmd (APP_SUGGESTED_PDU_SIZE | ||
APP_SUGGESTED_TX_TIME ) | APP_SUGGESTED_TX_TIME ) | ||
行 96: | 行 104: | ||
## 在连接中设置包长度 ## | ## 在连接中设置包长度 ## | ||
- | 也可以使用以下API代码片段在连接中动态更改数据包长度。应用程序可以根据任何逻辑(如传感器数据或按钮按下)确定何时发生。 | + | 也可以使用以下 API 代码片段在连接中动态更改数据包长度。应用程序可以根据任何逻辑(如传感器数据或按钮按下)确定何时发生。 |
````C | ````C | ||
行 111: | 行 119: | ||
## 加入我们 ## | ## 加入我们 ## | ||
+ | |||
文章所有代码、工具、文档开源。加入我们[**QQ群 591679055**](http:// | 文章所有代码、工具、文档开源。加入我们[**QQ群 591679055**](http:// | ||
<div> | <div> | ||
行 120: | 行 129: | ||
</ | </ | ||
- |