Bluetooth L2CAP介紹


1. 介紹

L2CAP,Logical Link Control and Adaptation Protocol,即邏輯鏈路控制和適配協議,是藍牙系統中的核心協議
相應的規范位於Core Version 4.1的Vol 3:Part A

其在藍牙架構如下圖所示

111

2. 實現

L2CAP負責適配基帶中的上層協議,它同LM並行工作,向上層協議提供面向連接和無連接的數據服務,並提供多路復用,分段和重組操作,允許高層次的協議和應用能夠以64KB的長度發送和接收數據包(L2CAP Serveice Data Units, SDU)

L2CAP提供了邏輯信道,名為L2CAP Channels,即在一個或多個邏輯鏈路上進行多路復用

L2CAP提供了如下功能

 - 協議/信道多路復用 
 - 分段和重組 
 - 服務質量

L2CAP可分為兩個部分

 - Channel Manager
 - Resource Manager
TIP:
L2CAP只支持ACL,而不支持SCO/eSCO(用預留寬帶進行實時語音傳輸)  
L2CAP不支持可靠的廣播信道

l2cap

3. 通用操作

3.1 L2CAP Channel

L2CAP基於信道的概念,信道的每一個端點被稱為信道標識符(CID)
不同設備間CID可復用,但本地設備CID不可復用

以下是CID ACL-U和AMP-U鏈路的name space(LE-U未列出)

CID Description Logical Link Supported
0x0000 Null identifier  
0x0001 L2CAP Signalling Channel ACL-U
0x0002 Connectionless Channel ACL-U
0x0003 AMP Manager Protocol ACL-U
0x0004~0x003E Reserved ACL-U
0x003F AMP Test Manager ACL-U
0x0040~0xFFFF Dynamically allocated ACL-U, AMP-U

3.2 設備間操作

2323

上圖說明了CID在不同設備對等L2CAP實體間通信中的使用方式

面向連接的數據信道提供了兩設備間的連接,綁定邏輯鏈路的CID則用於標識信道的每一端
對於無連接的數據信道,當用於廣播傳輸時限制了傳輸的方向;當用於單播傳輸時則沒有限制

部分信道都保留用做特殊目的,具體如下圖
1111

如0x0001表示Signalling Channel,用於創建和建立面向連接的數據信道,並可對這些信道的特性變化進行協商(ACL-U)

3.3 層間操作

121212

3.4 操作模式

L2CAP Channels可運行在以下模式之一

 - 基本L2CAP模式(Basic L2CAP Mode)    /* 也是默認模式 */
 - 流量控制模式(Flow Control Mode) 
 - 重傳模式(Retransmission Mode) 
 - 加強版重傳模式(Enhanced Retransmission Mode) 
 - 流模式(Streaming Mode) 
 - LE Credit Based Flow Control Mode

4. 數據包格式

本章節介紹數據包格式,Data Packet Format

L2CAP有以下幾種連接類型:

 - Connection-oriented Channels in Basic L2CAP mode 
 - Connectionless Data Channel in Basic L2CAP mode 
 - Connection-oriented Channel in Retransmission/Flow Control/Streaming Mode 
 - Connection-oriented Channels in LE Credit Based Flow Control Mode

對於不同的連接類型,數據包格式是不同的;且Information payload是基於Little Endian byte order

4.1 B-Frame

B-Frame格式如下圖所示
bf

B-Frame各字段含義如下

Length:              2 bytes, Information payload的字節數(0~65535) 
Channel ID:          2 bytes, 對端目的信道 
Information payload: 0~65535 bytes

4.2 G-Frame

G-Frame格式如下圖所示
gf

G-Frame各字段含義如下

Length:     2 bytes, Information payload和PSM的字節數(0~65535) 
Channel ID: 2 bytes, 對於無連接傳輸使用固定值0x0002 
PSM:        >= 2 bytes, Protocol/Servece Multiplexer

關於PSM,其取值范圍如下所示,具體指參考Channel Identifiers
psm 

4.3 S-Frame/I-Frame

I-Frame用於在L2CAP實體間進行信息傳輸;S-Frame則用於確認I-Frame和I-Frame的重傳請求

S-Frame和I-Frame格式如下圖所示
slf

S-FrameI-Frame各字段含義如下

Length:           2 bytes, 除Basic L2CAP外的總字節數  
Channel ID:       2 bytes, 對端目的信道 
L2CAP SDU Length: 2 bytes, 只出現在Start I-Frame(SAR=0x01)中, 表示總的SDU長度 
FCS:              2 bytes, Frame Check Sequence

Control Field有三種模式

 - Standard Control Field: 用於Retransmission mode and Flow Control mode 
 - Enhanced Control Field: 用於Enhanced Retransmission mode and Streaming mode 
 - Extended Control Field: 用於Enhanced Retransmission mode and Streaming mode

Standard Control Field格式如下
111 

Enhanced Control Field格式如下
222 

Extended Control Field格式如下
333 

Control Field各字段含義如下

SAR:    (2 bits),    Segmentation and Reassembly, 指明該L2CAP是否是分段過
TxSeq:  (6/14 bits), Send Sequence Number,        對發送的I-Frame計數, 用於分段和重組
ReqSeq: (6/14 bits), Receive Sequence Number,     接收方用於應答I-Frame和請求重傳
R:      (1 bits),    Retransmission Disable Bit,  用來實現Flow Control
S:      (2 bits),    Supervisory function,        表示S-Frame的type
P:      (1 bits),    Poll,                        置1表示從接收方征求相應 
F:      (1 bits),    Final,                       相應P置1的S-Frame

SAR取值及含義如下
a1 

S取值及定義定義如下
b1

4.4 LE-Frame

LE-Frame格式如下圖所示
lef

LE-Frame字段含義與其他Frame類似

5. 信號包格式

本章節介紹信號包格式,Signaling Packet Format

這里介紹的是在對端設備上兩個L2CAP實體間傳遞的信號命令(Signaling Commands)
這些信號命令通過Signaling Channel來傳輸
對於ACL-U邏輯鏈路應該使用CID 0x0001, 而對於LE-U則應該使用CID 0x0005

通用的信號包格式如下

image

Field類似B-Frame,不詳述;值得一說的是payload長度
image

另需要注意:
一個C-Frame通過0x0001信道可以傳遞多個命令;而一個C-Frame通過0x0005信道則只能傳遞一個命令

image

上圖顯示了信號命令的通用格式,各字段含義如下

Code:       1 byte,   指定Command的類別 
Identifier: 1 byte,   用於標識一個Request和Response匹配對 
Length:     2 byte,   data字段的長度 
Data:       0~N byte, Code字段來決定其格式

下圖顯示了規范所定義的Code類型,至於data的格式請參考規范Vol 3-Part A-4

Command_list

6. 參數配置選項

本章節介紹參數配置選項,Configuration Parameter Options,慚愧,原文晦澀難懂,哥不甚理解

image 

各字段含義如下所示

Type:        1 byte, 定義需要被配置的參數, 若不能識別則由最高位決定其行為
0表示必須識別該選項, 若無法識別則拒絕配置請求; 1表示可以跳過該選項 Length:
1 byte, 選項數據的字節數, 若選項數據為空則為0 Option Data: 由Type決定其內容(不詳述,見規范Vol 3-Part A-5)

Type字段具體含義

1) Maximum Transmission Unit(MTU),         Type=0x01 
2) Flush Timeout Option,                   Type=0x02 
3) Quality of Service(Qos) Option,         Type=0x03 
4) Retransmission and Flow Control Option, Type=0x04 
5) Frame Check Sequence(FCS) Option,       Type=0x05 
6) Extended Flow Specification Option,     Type=0x06 
7) Extended Window Size Option,            Type=0x07

7. 狀態機

這里指的是面向連接信道(Connection-oriented Channel)狀態機(State Machine),適用於雙向CID
介紹了狀態(state),引起狀態變化的事件(event)及事件相對應的動作(action)

7.1 狀態機

如下圖所示,發起請求的一方是客戶機,服務器接收請求,應用層的客戶既可以發起也可以接收請求
image
命令規則為:

 - 兩層之間的界面上(垂直方向)用下層的縮寫名作前綴, 為上層提供服務, 如L2CA 
 - 兩個同層實體之間的接口(水平方向)則使用協議縮寫作為前綴, 如L2CAP
 - 來自上層的事件稱作請求Request(Req), 相應的答復稱為確認Confirm(Cfm) 
 - 來自低層的事件稱為指示Indication(Ind), 相應的答復稱為相應Response(Rsp)

7.2 事件

在L2CAP層中,只有超時事件是由本層產生,事件分為5類:

- 來自下層的指示(Indication)和確認(Confirm) 
- 來自上層的請求(Request)和相應(Response) 
- 來自對等層的數據 
- 來自對等層的請求和相應 
- 超時事件

7.3 動作

動作可分為5類:

 - 對上層的確認(Confirm)和指示(Indication) 
 - 對下層的請求(Request)和相應(Response) 
 - 發給對等層實體的數據傳輸 
 - 發給對等層的請求和相應 
 - 計時器設置

7.4 信道操作狀態

信道操作狀態

1)  CLOSED 
2)  WAIT_CONNECT 
3)  WAIT_CONNECT_RSP 
4)  CONFIG 
5)  OPEN 
6)  WAIT_DISCONNECT 
7)  WAIT_CREATE 
8)  WAIT_CREATE_RSP 
9)  WAIT_MOVE 
10) WAIT_MOVE_RSP 
11) WAIT_MOVE_CONFIRM_RSP 
12) WAIT_CONFIRM_RSP

參考:
<邏輯鏈路控制和適配協議規范>


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM