Bluetooth技术学习笔记 ——L2CAP之数据包格式

参考:core_v5.0 vol 3. Part A
PSM:Protocol/Service Multiplexer 协议/服务复用器。
FCS:Frame Check Sequence,帧校验序列
MTU:Maximum Transmission Unit,最大传输单元
piconet :微微网
B-frame:Basic information frame
G-frame:Group frame
S-frame:Supervisory frame,监控帧
I-frame:Information frame,信息帧
LE-frame:LE information frame ,LE信息帧
1. 数据包格式
  • L2CAP是基于数据包,但是数据包是基于信道的。
  • 一个信道代表一个与remote设备L2CAP实体间的数据流。
  • 数据信道包括面向连接的和无连接的,所有动态分配的信道都是面向连接的。
  • 除信息载荷外的所有L2CAP PDU都使用小端模式。

 

2. 面向连接的数据信道 —— 基本L2CAP模式

(1)L2CAP PDU格式
Bluetooth技术学习笔记 ——L2CAP之数据包格式_第1张图片
(2)element

  • length:长度,2个字节,表示信息载荷的字节数。信息载荷的最长为65535。在接收端,长度域可对重组L2CAP包进行简单的完整性校验。
  • Channel ID:数据包目的端点的CID,2个字节。
  • 信息载荷:0 ~ 65535个字节。动态分配CID信道的MTU由信道配置时确定。

 

3. 无连接的数据信道 —— 基本L2CAP模式

(1)L2CAP PDU格式
Bluetooth技术学习笔记 ——L2CAP之数据包格式_第2张图片
(2)element

  • length:长度,2个字节,表示信息载荷和PSM的字节数。
  • Channel ID:0x0002。
  • PSM:至少2个字节。
  • 信息载荷:0 ~ 65535个字节。

 

4. 面向连接的数据信道 —— 重传、流控、流模式

(1)L2CAP PDU格式(重传、流控模式)
Bluetooth技术学习笔记 ——L2CAP之数据包格式_第3张图片
(2) L2CAP头域:长度和CID

  • 长度:L2CAP PDU数据包的长度,不包括长度和CID所占的字节。信息帧中信息所占帧的长度取决于控制域的类型。

(3)控制域

  • 控制域类型
    ① 标准控制域,用于重传和流控模式
    ② 增强型控制域,用于增强型重传和流模式
    ③ 扩展控制域,可能用于增强型重传和流模式

  • 控制域格式
    ① 标准控制域格式
    Bluetooth技术学习笔记 ——L2CAP之数据包格式_第4张图片
    ② 增强型控制域
    Bluetooth技术学习笔记 ——L2CAP之数据包格式_第5张图片
    ③ 扩展控制域
    Bluetooth技术学习笔记 ——L2CAP之数据包格式_第6张图片

  • TxSeq:Send Sequence Number ,发送序列号,对每一个I-frames进行计数,用于排序和重传。

  • ReqSeq: Receive Sequence Number,接收序列号,接收端用于确认I-frames,REJ和SREJ帧中用于请求某个特定发送序列号的I-frames的重传。

  • R: Retransmission Disable Bit,重传去使能位,用于流控。当内部缓存区已满时,设置该bit位。该场景通常为接收端收到了一个或多个I-Frames,但未收到所有需要重组的帧。当发送端收到R指示,启动去使能重传定时器,停止I-frames重传。
    R = 0, 正常模式,发送端使用重传定时器控制I-frames的重传,发送端不启动MonitorTimer
    R =1, 接收端请求推迟I-frames重传,发送端停止重传定时器,启动MonitorTimer监控信令。

  • SAR:Segmentation and Reassembly,用于标记L2CAP SDU是否分段。
    Bluetooth技术学习笔记 ——L2CAP之数据包格式_第7张图片

  • S: Supervisory function,监控功能,用于标记S-frame类型。
    Bluetooth技术学习笔记 ——L2CAP之数据包格式_第8张图片
    RR:接收就绪,其作用有3。一表明已经准备好了,可以接收I-frames了;二 确认之前的ReqSeq - 1个I-frames帧已经收到了;三 若p-bit设置为1,表明不再是忙碌模式。(翻译得好别扭啊。。。。)
    REJ
    RNR:接收未就绪。用于指示本地设备处于忙碌状态。此时,I-frames编号小于ReqSeq都是已确认的,编号大于等于ReqSeq都是未确认的。
    SREJ

  • P: 设置为1时,要求发送端请求响应。

  • F: 设置为1,用于响应S-frames帧P位设置为1的情况。

(4)L2CAP SDU长度域,表示SDU的长度

  • 当控制域中SAR为01时,存在数据包中。

(5)信息负荷域,nothing I want to say

(6)FCS,帧检测序列

(7)无效帧检测,在重传和流控模式下,当满足以下条件之一时,认为帧无效:

  • 含未知的CID
  • FCS错误
  • 长度位的值大于最大PDU负荷大小(MPS)
  • I-frame小于8个字节
  • 携带SAR=01b的I-frame小于10个字节
  • I-frame的SAR信息与已知CID的相关信息不符合。
  • s-frame的长度不等于4.

 

5. 面向连接的数据信道 —— 基于LE信用的流控模式

(1)L2CAP PDU格式
Bluetooth技术学习笔记 ——L2CAP之数据包格式_第9张图片
(2)L2CAP SDU长度域,2个字节

  • SDU的第一个LE-frame携带该字段。

(3)信息负荷域

  • 信息负荷域中包含的最大字节数取决于对端的MPS和基本L2CAP头长度域可携带的最大值,65535。
  • 第一个LE-frame携带载荷信息的长度等于L2CAP头长度指示的长度 - 2,随后的LE-frame携带信息载荷长度等于L2CAP头长度。
  • 接收端发起断开信道的场景: 1)SDU长度域 > 接收端MTU;2)LE-frame载荷长度 > 接收端MPS;3)总的载荷长度 >指示的SDU长度

你可能感兴趣的:(Bluetooth)