2015年1月21日 星期三

Bluetooth L2CAP介绍 (轉) (規格詳細說明)

邏輯鏈路控制和適配協議(Logical Link Control and Adaptation Protocol),是藍芽系統中的核心協議 
相應的規範位於Core Version 4.1的vol 3:Part A
111 
L2CAP負責適配基帶中的上層協議。它同LM並行工作,向上層協議提供面向連接和無連接的數據服務,並提供多路復用,分段和重組操作 

允許高層次的協議和應用能夠以64KB的長度發送和接收數據包(L2CAP Serveice Data Units, SDU)。
L2CAP提供了邏輯通道,名為L2CAP Channels,即在一個或多個邏輯鏈路上進行多路復用。
L2CAP可分為兩個部件 
~1 Channel Manager 
~2 Resource Manager
l2cap
總的來說,L2CAP提供了如下功能 
~1 協議/通道多路復用 
~2 分段和重組 
~3 服務質量
tip: 
L2CAP只支持ACL,而不支持SCO/eSCO(用預留寬頻進行實時語音傳輸)   
L2CAP不支持可靠的廣播通道

1. 通用操作

1. L2CAP Channel

L2CAP基於通道的概念,通道的每一個端點被稱為通道標識符(CID) 
不同設備間CID可復用,但本地設備CID不可復用
以下是CID ACL-U和AMP-U鏈路的name space(LE-U未列出)
CIDDescriptionLogical Link Supported
0x0000Null identifier 
0x0001L2CAP Signalling ChannelACL-U
0x0002Connectionless ChannelACL-U
0x0003AMP Manager ProtocolACL-U
0x0004~0x003EReservedACL-U
0x003FAMP Test ManagerACL-U
0x0040~0xFFFFDynamically allocatedACL-U, AMP-U

2. 設備間操作

2323
上圖說明了CID在不同設備對等L2CAP實體間通信中的使用方式。
面向連接的數據通道提供了兩設備間的連接,綁定邏輯鏈路的CID則用於標識通道的每一端。
對於無連接的數據通道,當用於廣播傳輸時限制了傳輸的方向;當用於單播傳輸時則沒有限制(?)
部分通道都保留用做特殊目的,具體如下圖 
如0x0001表示Signalling Channel,用於創建和建立面向連接的數據通道,並可對這些通道的特性變化進行協商(ACL-U) 
1111 

3. 層間操作

121212

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

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
對於不同的連接類型,數據包格式是不同的 
且Information payload是基於Little Endian byte order

1. B-Frame

bf
Length: 2 bytes,Information payload的位元組數(0~65535) 
Channel ID: 2 bytes, 對端目的通道 
Information payload: 0~65535 bytes

2. G-Frame

gf
Length: 2 bytes,Information payload和PSM的位元組數(0~65535) 
Channel ID: 2 bytes, 對於無連接傳輸使用固定值0x0002 
PSM: >= 2 bytes, Protocol/Servece Multiplexer(具體指參考Channel Identifiers
psm 
Information payload: 0~65535 bytes

3. S-Frame/I-Frame

I-Frame用於在L2CAP實體間進行信息傳輸 
S-Frame則用於確認I-Frame和I-Frame的重傳請求
slf
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有三種模式 
~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格式如下
111  
222 
333
SAR: (2bits)Segmentation and Reassembly,指明該L2CAP是否是分段過,定義如下 
a1 
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,定義如下 
b1
P: (1bits)Poll, 置1表示從接收方徵求相應 
F: (1bits)Final,相應P置1的S-Frame

4. LE-Frame

lef
欄位含義與上類似

3. 信號包格式(Signaling Packet Format)

信號包格式(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

4. 參數配置選項(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

5. 狀態機(State Machine)

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

1. 狀態機

如下圖所示,發起請求的一方是客戶機,服務器接收請求,應用層的客戶既可以發起也可以接收請求 
image 
命令規則為: 
兩層之間的界面上(垂直方向)用下層的縮寫名作首碼,為上層提供服務,如L2CA 
兩個同層實體之間的接口(水平方向)則使用協議縮寫作為首碼,如L2CAP。 
來自上層的事件稱作請求Request(Req), 相應的答覆稱為確認Confirm(Cfm) 
來自低層的事件稱為指示Indication(Ind), 相應的答覆稱為相應Response(Rsp)

2. 事件

在L2CAP層中,只有超時事件是由本層產生
事件分為5類: 
來自下層的指示(Indication)和確認(Confirm) 
來自上層的請求(Request)和相應(Response) 
來自對等層的數據 
來自對等層的請求和相應 
超時事件

3. 動作

動作可分為5類: 
對上層的確認(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
更多內容見最下方參考網址

沒有留言:

張貼留言