邏輯鏈路控制和適配協議(Logical Link Control and Adaptation Protocol),是藍芽系統中的核心協議
相應的規範位於Core Version 4.1的vol 3:Part A
相應的規範位於Core Version 4.1的vol 3:Part A
L2CAP負責適配基帶中的上層協議。它同LM並行工作,向上層協議提供面向連接和無連接的數據服務,並提供多路復用,分段和重組操作
允許高層次的協議和應用能夠以64KB的長度發送和接收數據包(L2CAP Serveice Data Units, SDU)。
L2CAP提供了邏輯通道,名為L2CAP Channels,即在一個或多個邏輯鏈路上進行多路復用。
L2CAP可分為兩個部件
~1 Channel Manager
~2 Resource Manager
~1 Channel Manager
~2 Resource Manager
總的來說,L2CAP提供了如下功能
~1 協議/通道多路復用
~2 分段和重組
~3 服務質量
~1 協議/通道多路復用
~2 分段和重組
~3 服務質量
tip:
L2CAP只支持ACL,而不支持SCO/eSCO(用預留寬頻進行實時語音傳輸)
L2CAP不支持可靠的廣播通道
L2CAP只支持ACL,而不支持SCO/eSCO(用預留寬頻進行實時語音傳輸)
L2CAP不支持可靠的廣播通道
1. 通用操作
1. L2CAP Channel
L2CAP基於通道的概念,通道的每一個端點被稱為通道標識符(CID)
不同設備間CID可復用,但本地設備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 |
2. 設備間操作
上圖說明了CID在不同設備對等L2CAP實體間通信中的使用方式。
面向連接的數據通道提供了兩設備間的連接,綁定邏輯鏈路的CID則用於標識通道的每一端。
對於無連接的數據通道,當用於廣播傳輸時限制了傳輸的方向;當用於單播傳輸時則沒有限制(?)
部分通道都保留用做特殊目的,具體如下圖
如0x0001表示Signalling Channel,用於創建和建立面向連接的數據通道,並可對這些通道的特性變化進行協商(ACL-U)
如0x0001表示Signalling Channel,用於創建和建立面向連接的數據通道,並可對這些通道的特性變化進行協商(ACL-U)
3. 層間操作
4. 操作模式
L2CAP Channels可運行在以下模式之一(~1是默認模式)
~1 基本L2CAP模式(Basic L2CAP Mode)
~2 流量控制模式(Flow Control Mode)
~3 重傳模式(Retransmission Mode)
~4 加強版重傳模式(Enhanced Retransmission Mode)
~5 流模式(Streaming Mode)
~6 LE Credit Based Flow Control Mode
~1 基本L2CAP模式(Basic L2CAP Mode)
~2 流量控制模式(Flow Control Mode)
~3 重傳模式(Retransmission Mode)
~4 加強版重傳模式(Enhanced Retransmission Mode)
~5 流模式(Streaming Mode)
~6 LE Credit Based Flow Control Mode
2. 數據包格式(Data Packet Format)
Data Packet Format
L2CAP有以下幾種連接類型:
~1 Connection-oriented Channels in Basic L2CAP mode
~2 Connectionless Data Channel in Basic L2CAP mode
~3 Connection-oriented Channel in Retransmission/Flow Control/Streaming Mode
~4 Connection-oriented Channels in LE Credit Based Flow Control Mode
~1 Connection-oriented Channels in Basic L2CAP mode
~2 Connectionless Data Channel in Basic L2CAP mode
~3 Connection-oriented Channel in Retransmission/Flow Control/Streaming Mode
~4 Connection-oriented Channels in LE Credit Based Flow Control Mode
對於不同的連接類型,數據包格式是不同的
且Information payload是基於Little Endian byte order
且Information payload是基於Little Endian byte order
1. B-Frame
Length: 2 bytes,Information payload的位元組數(0~65535)
Channel ID: 2 bytes, 對端目的通道
Information payload: 0~65535 bytes
Channel ID: 2 bytes, 對端目的通道
Information payload: 0~65535 bytes
2. G-Frame
Length: 2 bytes,Information payload和PSM的位元組數(0~65535)
Channel ID: 2 bytes, 對於無連接傳輸使用固定值0x0002
PSM: >= 2 bytes, Protocol/Servece Multiplexer(具體指參考Channel Identifiers)
Information payload: 0~65535 bytes
Channel ID: 2 bytes, 對於無連接傳輸使用固定值0x0002
PSM: >= 2 bytes, Protocol/Servece Multiplexer(具體指參考Channel Identifiers)
Information payload: 0~65535 bytes
3. S-Frame/I-Frame
I-Frame用於在L2CAP實體間進行信息傳輸
S-Frame則用於確認I-Frame和I-Frame的重傳請求
S-Frame則用於確認I-Frame和I-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
Channel ID: 2 bytes, 對端目的通道
L2CAP SDU Length: 2 bytes, 只出現在Start I-Frame(SAR=0x01)中,表示總的SDU長度
FCS: 2 bytes, Frame Check Sequence
Control Field有三種模式
~1 Standard Control Field: 用於Retransmission mode and Flow Control mode
~2 Enhanced Control Field: 用於Enhanced Retransmission mode and Streaming mode
~3 Extended Control Field: 用於Enhanced Retransmission mode and Streaming mode
~1 Standard Control Field: 用於Retransmission mode and Flow Control mode
~2 Enhanced Control Field: 用於Enhanced Retransmission mode and Streaming mode
~3 Extended Control Field: 用於Enhanced Retransmission mode and Streaming mode
這三種Control Mode格式如下
SAR: (2bits)Segmentation and Reassembly,指明該L2CAP是否是分段過,定義如下
TxSeq: (6/14bits)Send Sequence Number,對發送的I-Frame計數,用於分段和重組。
ReqSeq: (6/14bits)Receive Sequence Number,接收方用於應答I-Frame和請求重傳
R: (1bits)Retransmission Disable Bit,用來實現Flow Control.
S: (2bits)Supervisory function,表示S-Frame的type,定義如下
ReqSeq: (6/14bits)Receive Sequence Number,接收方用於應答I-Frame和請求重傳
R: (1bits)Retransmission Disable Bit,用來實現Flow Control.
S: (2bits)Supervisory function,表示S-Frame的type,定義如下
P: (1bits)Poll, 置1表示從接收方徵求相應
F: (1bits)Final,相應P置1的S-Frame
F: (1bits)Final,相應P置1的S-Frame
4. LE-Frame
欄位含義與上類似
3. 信號包格式(Signaling Packet Format)
信號包格式(Signaling Packet Format)
這裡介紹的是在對端設備上兩個L2CAP實體間傳遞的信號命令(Signaling Commands)
這些信號命令通過Signaling Channel來傳輸
對於ACL-U邏輯鏈路應該使用CID 0x0001, 而對於LE-U則應該使用CID 0x0005
這些信號命令通過Signaling Channel來傳輸
對於ACL-U邏輯鏈路應該使用CID 0x0001, 而對於LE-U則應該使用CID 0x0005
通用的信號包格式如下
Field類似B-Frame,不詳述
值得一說的是payload長度
值得一說的是payload長度
另需要注意:
一個C-Frame通過0x0001通道可以傳遞多個命令
而一個C-Frame通過0x0005通道則只能傳遞一個命令
一個C-Frame通過0x0001通道可以傳遞多個命令
而一個C-Frame通過0x0005通道則只能傳遞一個命令
上圖顯示了信號命令的通用格式
Code: 1 byte, 指定Command的類別
Identifier: 1 byte, 用於標識一個Request和Response匹配對
Length: 2 byte, data欄位的長度
Data: 0~N byte, Code欄位來決定其格式
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
4. 參數配置選項(Configuration Parameter Options)
(原文晦澀難懂,哥不甚理解)
Type: 1 byte, 定義需要被配置的參數,若不能識別則由最高位決定其行為
0表示必須識別該選項,若無法識別則拒絶配置請求
1表示可以跳過該選項
Length: 1 byte, 選項數據的位元組數,若選項數據為空則為0
Option Data: 由Type決定其內容(不詳述,見規範vol 3-Part A-5)
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
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
5. 狀態機(State Machine)
這裡指的是面向連接通道(Connection-oriented Channel)狀態機,適用於雙向CID
介紹了狀態(state), 引起狀態變化的事件(event)及事件相對應的動作(action)
介紹了狀態(state), 引起狀態變化的事件(event)及事件相對應的動作(action)
1. 狀態機
如下圖所示,發起請求的一方是客戶機,服務器接收請求,應用層的客戶既可以發起也可以接收請求
命令規則為:
兩層之間的界面上(垂直方向)用下層的縮寫名作首碼,為上層提供服務,如L2CA
兩個同層實體之間的接口(水平方向)則使用協議縮寫作為首碼,如L2CAP。
來自上層的事件稱作請求Request(Req), 相應的答覆稱為確認Confirm(Cfm)
來自低層的事件稱為指示Indication(Ind), 相應的答覆稱為相應Response(Rsp)
命令規則為:
兩層之間的界面上(垂直方向)用下層的縮寫名作首碼,為上層提供服務,如L2CA
兩個同層實體之間的接口(水平方向)則使用協議縮寫作為首碼,如L2CAP。
來自上層的事件稱作請求Request(Req), 相應的答覆稱為確認Confirm(Cfm)
來自低層的事件稱為指示Indication(Ind), 相應的答覆稱為相應Response(Rsp)
2. 事件
在L2CAP層中,只有超時事件是由本層產生
事件分為5類:
來自下層的指示(Indication)和確認(Confirm)
來自上層的請求(Request)和相應(Response)
來自對等層的數據
來自對等層的請求和相應
超時事件
來自下層的指示(Indication)和確認(Confirm)
來自上層的請求(Request)和相應(Response)
來自對等層的數據
來自對等層的請求和相應
超時事件
3. 動作
動作可分為5類:
對上層的確認(Confirm)和指示(Indication)
對下層的請求(Request)和相應(Response)
發給對等層實體的數據傳輸
發給對等層的請求和相應
計時器設置
對上層的確認(Confirm)和指示(Indication)
對下層的請求(Request)和相應(Response)
發給對等層實體的數據傳輸
發給對等層的請求和相應
計時器設置
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
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
更多內容見最下方參考網址
參考:
<邏輯鏈路控制和適配協議規範>
<邏輯鏈路控制和適配協議規範>
沒有留言:
張貼留言