用户工具

站点工具


cc2640r2f:l2cap

差别

这里会显示出您选择的修订版和当前版本之间的差别。

到此差别页面的链接

后一修订版
前一修订版
cc2640r2f:l2cap [2017/08/31 16:30]
127.0.0.1 外部编辑
cc2640r2f:l2cap [2021/06/22 23:14] (当前版本)
行 1: 行 1:
 <markdown> <markdown>
-# 逻辑链路控制和适配层协议(L2CAP) # 
  
-L2CAP运行在HCI之上的Host,实现Host更高层(GAPGATTAPP)和低层协议栈传输数据。该层负责在Host和协议栈之间把交换的数据进行分割(segmentation)和重组(reassembly )以提供协议的多路处理能力。L2CAP允许更高级别的协议和应用程序发送和接收高达64KB(实际受限于蓝牙设备实际内存)的上层数据包(L2CAP服务数据单元,SDU)。+# 逻辑链路控制和适配层协议(L2CAP) # 
 + 
 +L2CAP 运行在 HCI 之上的 Host ,实现 Host 更高层(GAPGATTAPP)和低层协议栈之间传输数据。 
 + 
 +该层负责在 Host 和协议栈之间把交换的数据进行分割( segmentation )和重组( reassembly )以提供协议的多路处理能力。L2CAP 允许更高级别的协议和应用程序发送和接收高达 64KB(实际受限于蓝牙设备实际内存)的上层数据包(L2CAP 服务数据单元,SDU)。
  
 ![](http://www.leconiot.com/md_res/cc2640r2f/ble_stack_app/stack/l2cap/Images/L2CAp.png) ![](http://www.leconiot.com/md_res/cc2640r2f/ble_stack_app/stack/l2cap/Images/L2CAp.png)
  
->**注意**:可能还是不太明白这里的L2CAP,简单理解就是对我们上层议数据多路处理,同时提供数据缓存能力,以及重新拆包组包能力。+图1. L2CAP 层数据传输示意图 
 + 
 + > **注意**:可能还是不太明白这里的 L2CAP,简单理解就是对上层议数据多路处理,同时提供数据缓存以及重新拆包组包能力。
  
-## L2CAP术语 ##+## L2CAP 术语 ##
  
  |术语|描述|  |术语|描述|
   |---|:-----|   |---|:-----|
-  |L2CAP通道|在对等设备中的两个端点之间的逻辑连,其特征在于它们的信道标识符(CID)| +  |L2CAP 通道|在对等设备中的两个端点之间的逻辑连,其特征在于它们的信道标识符(CID)| 
-  |SDU或L2CAP SDU|服务数据单元:L2CAP与上层交换的数据包,并使用本文档中规定的过程通过L2CAP通道透明传输| +  |SDU 或 L2CAP SDU|服务数据单元:L2CAP 与上层交换的数据包,并使用本文档中规定的过程通过 L2CAP 通道透明传输| 
-  |PDU或L2CAP PDU |协议数据单元:包含L2CAP协议信息字段,控制信息和/或上层信息数据的数据包| +  |PDU 或 L2CAP PDU |协议数据单元:包含 L2CAP 协议信息字段,控制信息和/或上层信息数据的数据包| 
-  |最大传输单位(MTU) |上层实体可以接受的有效载荷数据的最大大小(以八位字节为单位)(即,MTU对应于最大SDU大小)。| +  |最大传输单位(MTU) |上层实体可以接受的有效载荷数据的最大大小(以八位字节为单位)(即,MTU 对应于最大 SDU 大小)。| 
-  |最大PDU有效载荷大小(MPS) |L2CAP层实体可以接受的八位字节中的有效负载数据的最大大小(即,MPS对应于最大PDU有效载荷大小)。|+  |最大 PDU 有效载荷大小(MPS) | L2CAP 层实体可以接受的八位字节中的有效负载数据的最大大小(即,MPS 对应于最大 PDU 有效载荷大小)。|
  
 ## 最大传输单位(MTU) ## ## 最大传输单位(MTU) ##
  
-蓝牙低功耗协议栈支持在链路层将L2CAP PDU分割(segmentation)和重组(reassembly )。这种分段允许L2CAP和构建在L2CAP之上的更高级协议(如属性协议ATT)使用更大的有效负载,从而减少与较大数据传输不断拆分开销。当使用分片时,较大的数据包直接被分割成多个链路层数据包,并由对等设备的链路层重新组合。+蓝牙低功耗协议栈支持在链路层将 L2CAP PDU 分割( segmentation )和重组( reassembly )。这种分段允许 L2CAP 和构建在 L2CAP 之上的更高级协议(如属性协议 ATT )使用更大的有效负载,从而减少与较大数据传输不断拆分开销。当使用分片时,较大的数据包直接被分割成多个链路层数据包,并由对等设备的链路层重新组合。
  
 ![](http://www.leconiot.com/md_res/cc2640r2f/ble_stack_app/stack/l2cap/Images/L2CAPData.png) ![](http://www.leconiot.com/md_res/cc2640r2f/ble_stack_app/stack/l2cap/Images/L2CAPData.png)
  
-L2CAP PDU的大小决定了 属性协议最大传输单元(Attribute Protocol Maximum Transmission Unit (`ATT_MTU`))。默认情况下,LE设备L2CAP PDU的大小为27字节,这决定了在单个连接事件数据包可以传输的LE数据包的最大大小。在这种情况下,L2CAP协议头为4字节,ATT_MTU默认大小为23。+图2. L2CAP 分割重组数据包
  
 +L2CAP PDU 的大小决定了属性协议最大传输单元( Attribute Protocol Maximum Transmission Unit ( `ATT_MTU` ))。默认情况下,LE 设备 L2CAP  PDU 的大小为 27 字节,意味着在单个连接事件数据包可以传输的 LE 数据包的最大字节。在这种情况下,L2CAP 协议头为 4 字节,ATT_MTU 默认大小为 23 。
  
-> **注意**:图所示的`L2CAP ATT_MTU_SIZE`支持最大长度251的配置,但是 受限于 BLE4.0/4.1设备硬件 LL PDU 大小 27字节其实L2CAP帮助我们在Host层进行分割和重组Controller 依然按照最大长度27进行收发。升级的CC2640R2F BLE4.2/5.0<a href="..\..\..\le_stack_app\stack\le_data_length_extension\le_data_length_extension.html">LE Data Length Extension</a> 直接使能 LL PDU的251字节,实现了硬件上提高数据吞吐量。+ > **注意**:图 所示的 `L2CAP ATT_MTU_SIZE` 支持最大长度 251 的配置,但受限于 BLE4.0/4.1 设备硬件 LL PDU 大小 27 字节其实 L2CAP 在 Host 层进行分割和重组Controller 依然按照最大长度 27 进行收发。升级的 CC2640R2F BLE4.2/5.0 <a href="..\..\..\le_stack_app\stack\le_data_length_extension\le_data_length_extension.html"> LE Data Length Extension </a> 直接使能 LL PDU 的 251 字节,实现了硬件上提高数据吞吐量。
  
 +## 配置更大的 MTU ##
  
-## 配置更大的MTU ##+GATT  Client 可以通过使用 `GATT_ExchangeMTU()` 在连接期间请求更大的 `ATT_MTU` 。在此过程中,客户端请求服务器其最大支持的接收 MTU 大小,服务器回复其最大支持的接收 MTU 大小进行,只有客户端可以启动此过程。当成功交换该值后,`ATT_MTU` 是客户端 MTU 和服务器 MTU 值的最小值。如果客户端表示可以支持 200 字节的 MTU,并且服务器响应最大大小为 150 字节,该 ATT_MTU 连接的大小为 150 。
  
-GATT  Client 可通过使用`GATT_ExchangeMTU()` 在连接期间请求更大的`ATT_MTU`。在此过程中,客户端请求服务器其最大支持的接收MTU小,服务器回复其最大支持接收MTU大小进行。只有客户端可以启动此过程。当成功交换该后,`ATT_MTU`是客户端MTU和服务器MTU值的最小值。如果客户端表示可以支持200字节的MTU,并且服务器响应最大大小为150字节,该ATT_MTU连接的大小为150。+采取以下步骤配置协议栈以支持大的 MTU 值
  
-采取以下步骤配协议栈支持较大的MTU+1. 将应用程序项目中的 `MAX_PDU_SIZE` 预处理器符号设为所需的值,达到 L2CAP PDU 所需的最大小。最大 `ATT_MTU` 大小总是比 `MAX_PDU_SIZE` 小 4 字节。 
 +2. 在主从设备建立连接后,调用 `GATT_ExchangeMTU()`(仅限 GATT 客户端)。传递给此函数的 MTU 参数必须小于或等于步骤 1 GATT Servier 中的定义 `ATT_MTU` 。 
 +3. 接收 `ATT_MTU_UPDATED_EVENT` 以验证 MTU 是否已成功更新,此更新要求调用已注册的 GATT 消息任务
  
-1. 应用程序项目中的`MAX_PDU_SIZE`预处理器符号设置为所需的值,以达到L2CAP PDU所需的最大大小。最大`ATT_MTU`大小总是比`MAX_PDU_SIZE`小4字节。 +尽管可以协议栈配置为支持 `MAX_PDU_SIZE` 最大 255 个字节,但每个低功耗蓝牙最初连接时都使默认的 27 字节( ATT_MTU = 23 字节,直到交换 MTU 过程中出现更大的 MTU必须在每个蓝牙低功耗连上执行交换 MTU 过程,且须由客户端发起
-2. 在主从设备建立连接后,调`GATT_ExchangeMTU()`仅限GATT客户端。传递给此函数的MTU参数必须小于或等于步骤1GATT Servier 中的定义`ATT_MTU`。 +
-3. 收`ATT_MTU_UPDATED_EVENT`以验证MTU是否已成功更新。此更新要求调用已注册的GATT消息任务+
  
 + > **注意**:如果启用安全连接 BLE 4.2 功能,连接时默认的 MTU 大小为 69 。详情查看 ble_user_config.h。
  
-尽管可以将协议栈配置支持`MAX_PDU_SIZE`最大为255个字节,但每低功耗蓝牙最初连接时都使用默认27字节(ATT_MTU= 23字节),直到交换MTU过程中出现更大的MTU。必须在每个蓝牙低功耗连接上执行交换MTU过程,且须由客户端发起+增加 `ATT_MTU` 大小可以在单个 ATT 数据包中发送更多数据。单个数据包中发送的最长属性( `ATT_MTU- 1 )个字节。如果是通知则有额外的长度限制。如果一属性值长度为 100 个字节,则得到整个属性需要读取请求来获取第一个( `ATT_MTU` - 1 )字节,然后是多个读取 blob 请求以获得后续( ATT_MTU - 1 字节。如果传输整个 100 字节的有效载荷数据默认 ATT_MTU 值为 23 字节,需要五个请求或响应过程每个字节返回 22 个字节。如果执行交换 MTU 过程,将 ATT_MTU 配置为 101 字节(或更大),则可以在单个读取请求或响应过程中读取整个 100 个字节
  
->**注意**:如果启用安全连接BLE 4.2功能,连接时默认的MTU大小为69详情查看ble_user_config.h+ > **注意**:由于内存和处理的限制,并不是所有的蓝牙低功耗系统都支持更大的 MTU 尺寸。在定义系统的行为时,需要了解预期对等设备的功能。如果对等设备的力未知请设计系统使用默认的 27 字 L2CAP PDU/23 字节 ATT_MTU 大小。例如,发送长度大于 20 字节( ATT_MTU - 3 )字节的通知会导致在不支持较大 MTU 大小的设备上截断数据
  
-增加`ATT_MTU`大小可以在单个ATT数据包中发送更多数据。单个数据包中发送的最长属性为(`ATT_MTU`-1)个字节。如果是知,则有额外的长度限制。如果一个属性值的长度为100个字节,则读取该整个属性需要读取请求来获取第一个(`ATT_MTU`-1)字节,然后是多个读取blob请求以获得后续(ATT_MTU-1)字节。要传输整个100字节的有效载荷数据,默认ATT_MTU值为23字节,需要五个请求或响应过程,每个字节返回22个字节。如果执行了交换MTU过程,并且将ATT_MTU其配置为101字节(或更大),则可以在单个读取请求或响应过程中读取整个100个字节。+## L2CAP 道 ##
  
->**注意**:由内存和处理限制,并不是所有的蓝牙低功耗系统都支持更大MTU尺寸。在定义系统的行为时了解预期对等设备的功能。如果对等设备的能力未知请设计系统使用默认的27字L2CAP PDU/23字节ATT_MTU 大小。例如,发送长度大于20字节(ATT_MTU-3字节的通知会导致在不支持较大MTU大小的设备上截断数据+L2CAP 基信道,信道每个端点由信道标识符( CID )标识。关 L2CAP 信道标识符更多详细信息,请参阅蓝牙核心规范版本 5.0 “信道标识符”部分([第 3 卷第 A 部分第 2.1 节)
  
-## L2CAP通道 ## +信道可分为固定和动态信道。例如,通过 GATT 协议交换的数据使用信道 0x0004 。动态分配的 CID 以标识逻辑链路和本地端点。本地端点必须在 0x0040 到 0xFFFF 之间该端点用于以下部分中描述的面向连接的 L2CAP 通道。
-L2CAP基于信道。L2CAP信道的每个端点由信道标识符(CID)标识。有关L2CAP信道标识符的更多详细信息,请参阅蓝牙核心规范版本5.0的“信道标识符”部分([第3卷,第A部分,第2.1节))。信道可分为固定和动态信道。例如,通过GATT协议交换的数据使用信道0x0004。动态分配的CID以标识逻辑链路和本地端点。本地端点必须在0x0040到0xFFFF之间该端点用于以下部分中描述的面向连接的L2CAP通道。+
  
-### L2CAP面向连接的通道(CoC)示例 ### +### L2CAP 面向连接的通道( CoC )示例 ### 
-蓝牙低功耗协议栈SDK提供API来创建L2CAP CoC通道,以在支持此功能的两个蓝牙低功耗设备之间双向传输数据该功能默认在协议栈中启用。下图显示了一个简单的连接,使用L2CAP面向连接的通道基于LE信用流量控制模式让数据在主机和从机之间交换。+ 
 +蓝牙低功耗协议栈 SDK 提供 API 来创建 L2CAP CoC 通道,用于支持此功能的两个蓝牙低功耗设备之间双向传输数据该功能默认在协议栈中启用。下图 显示了一个简单的连接,使用 L2CAP 面向连接的通道基于 LE 信用流量控制模式让数据在主机和从机之间交换。
  
 ![](http://www.leconiot.com/md_res/cc2640r2f/ble_stack_app/stack/l2cap/Images/CoC.png) ![](http://www.leconiot.com/md_res/cc2640r2f/ble_stack_app/stack/l2cap/Images/CoC.png)
 +
 +图3. 主从机双向交换数据
  
 ## 加入我们 ## ## 加入我们 ##
 +
 文章所有代码、工具、文档开源。加入我们[**QQ群 591679055**](http://shang.qq.com/wpa/qunwpa?idkey=d94f12d37c3b37892af4b757c6dc34bea140f3f3128a8d68e556a3d728148e85)获取更多支持,共同研究CC2640R2F&BLE5.0。 文章所有代码、工具、文档开源。加入我们[**QQ群 591679055**](http://shang.qq.com/wpa/qunwpa?idkey=d94f12d37c3b37892af4b757c6dc34bea140f3f3128a8d68e556a3d728148e85)获取更多支持,共同研究CC2640R2F&BLE5.0。
 <div> <div>
行 66: 行 77:
 </div> </div>
 </markdown> </markdown>
- 
cc2640r2f/l2cap.1504168239.txt.gz · 最后更改: 2021/06/22 23:14 (外部编辑)