目錄:
1、L2CAP概述
2、L2CAP邏輯信道
2.1、邏輯信道
2.2、信道模式
3、幀類型及結構
4、各種事件
5、連接過程
6、L2CAP狀態機
7、遺留問題
正文
1、L2CAP概述
L2CAP-全稱是邏輯鏈路控制與適配層,爲兩個通信的藍牙設備提供一個端到端的通道。
L2CAP主要功能:
1.協議信道複用(protocol/channel multiplexing)
2.分段與重組(segmentation and reassembly SAR)
3.每個信道流控(per-channel flow control)
4.差錯控制(error control)
2、L2CAP邏輯信道
2.1、邏輯信道
L2CAP邏輯信道分配情況如下:
CID即channelID,
0x0001信道作爲發送信令的信道,如發送Conn_req;
0x0002被作爲無連接(兩個設備間未建立ACL通路)的信道使用;
0x0040-0xFFFF是動態分配的,如在SDP服務發現時候就需要動態分配一個CID,和對端的CID連接後進行通信。
在BLE設備中0x0005作爲BLE設備的信令通道;如果設備支持BLE功能,0x0005作爲其信令通道,則0x0004和0x0006也會被強制分配給BLE,分別作爲ATT和SecurityManager信道。
其中的0x0004-0x0005被分配給BLE(低功耗藍牙):
2.2、信道模式
邏輯信道分爲5中模式,最後一種是LE設備特有的:
Basic L2CAP Mode是默認模式,在未選擇其他模式的情況下,就是用此模式。
Flow Control Mode模式下,不會進行重傳,但是丟失的數據能夠被檢測到,並報告丟失。
Retransmission Mode確保數據包都成功的傳輸給對端設備。使用go-back-n(見附錄)策略簡化協議並限制緩衝區。
Streaming Mode是爲了真實的等時傳輸,數據包被編號但是不需要ACK確認。設定一個超時定時器,一旦定時器超時就將超時的數據幹掉。
LE Credit Based Flow Control Mode模式是唯一被用於LE設備的信道模式。
3、幀類型及結構
面向連接的信道包括除了0x0002的固定信道、兩個信令信道(0x0001與0x0005)和動態分配的信道。面向無連接的信道有0x0002。
B幀
用於基礎L2CAP模式下的面向連接信道。其中的Length爲Information payload的長度,不包括包頭長度。Information payload的長度範圍是0~65535.
ChannelID爲接收方的CID。
G幀
用於基礎L2CAP模式下面向無連接的信道。G幀用於固定的無連接信道0x0002。
Length爲PSM+Information payload長度之和。
PSM(Protocol/Service Multiplexer)協議服務複用,例如:SDP,RFCOMM等。
I/S幀
用於重傳、流控或者流模式下面向無連接的信道。
I幀(Information frame)被用於L2CAP實體之間的信息傳遞;
S幀被用於I幀的確認和請求重傳。
Length爲除了Basic L2CAP header外的數據長度。
需要指出的是:只有在服務數據包SDU需要分段,並且是第一個L2CAP包的時候才需要L2CAP SDU Length段。
Control字段與L2CAP模式有關
a、標準Control字段用於重傳模式和流控模式下
ReqSeq字段:被接收方用於應答I幀,當發送失敗的時候發起重傳的幀序列號。
TxSeq字段:發送I幀的序列號,用於分段與重組。
SAR字段:分段與重組,用於表示SDU包的開始結尾,佔用2bit。
R字段用於實現流控,默認R=0。
R=0:可以重傳,使能重傳定時器,關閉監視定時器。
R=1:不可重傳,使能監視定時器,關閉重傳定時器,從而實現流控。
S字段表示S幀的類型,例如01代表之前發送的I幀被拒絕。
b、增強Control字段用於增強重傳模式和流模式下
P字段:P=1請求一個接收方的回覆
F字段:回覆一個P=1的請求幀。
c、擴展Control字段用於擴展重傳模式和流模式下
LE幀
Channel ID爲接收方的CID。
C幀
控制幀(Control frame)在信令信道(傳統藍牙0x0001,BLE是0x0005)上傳輸。
在信令信道0x0001上可以多個控制命令同時包含於一個C幀中,但是0x0005信道上一個C幀只能夠包含一個控制命令。
控制命令的數據格式如下
Code表示控制命令的固定編號,例如連接請求爲0x02;
Identifier爲請求方設置此標誌,迴應方回覆請求幀的時候需要和請求幀的Identifier一致。
Length表示data的長度。
Data依據不同的命令而定的。
4、各種命令
各種命令的格式如上所述的C幀,具體的命令及簡述如下:
配置參數
5、連接過程
6、L2CAP狀態機
附錄:
go-back-n策略:當接收方檢測出時序的信息後,要求發送方重發最後一個正確接受的信息幀之後的所有未被確認的幀;或者當發送方發送了n個幀後,若發現該n幀的前一幀在計時器超時區間內仍未返回其確認信息,則該幀被判定爲出錯或丟失,此時發送方不得不重新發送該出錯幀及其後的n幀。