欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  科技

L2CAP蓝牙协议的 basic mode 基本模式数据格式

程序员文章站 2022-03-15 13:45:54
一. 声明本专栏文章我们会以连载的方式持续更新,本专栏计划更新内容如下:第一篇:蓝牙综合介绍 ,主要介绍蓝牙的一些概念,产生背景,发展轨迹,市面蓝牙介绍,以及蓝牙开发板介绍。第二篇:Transport层介绍,主要介绍蓝牙协议栈跟蓝牙芯片之前的硬件传输协议,比如基于UART的H4,H5,BCSP,基于USB的H2等第三篇:传统蓝牙controller介绍,主要介绍传统蓝牙芯片的介绍,包括射频层(RF),基带层(baseband),链路管理层(LMP)等第四篇:传统蓝牙host介绍,主...

本专栏文章我们会以连载的方式持续更新,本专栏计划更新内容如下:

L2CAP蓝牙协议的 basic mode 基本模式数据格式

第一篇:蓝牙综合介绍 ,主要介绍蓝牙的一些概念,产生背景,发展轨迹,市面蓝牙介绍,以及蓝牙开发板介绍。

第二篇:Transport层介绍,主要介绍蓝牙协议栈跟蓝牙芯片之前的硬件传输协议,比如基于UART的H4,H5,BCSP,基于USB的H2等

第三篇:传统蓝牙controller介绍,主要介绍传统蓝牙芯片的介绍,包括射频层(RF),基带层(baseband),链路管理层(LMP)等

第四篇:传统蓝牙host介绍,主要介绍传统蓝牙的协议栈,比如HCI,L2CAP,SDP,RFCOMM,HFP,SPP,HID,AVDTP,AVCTP,A2DP,AVRCP,OBEX,PBAP,MAP等等一系列的协议吧。

第五篇:低功耗蓝牙controller介绍,主要介绍低功耗蓝牙芯片,包括物理层(PHY),链路层(LL)

第六篇:低功耗蓝牙host介绍,低功耗蓝牙协议栈的介绍,包括HCI,L2CAP,ATT,GATT,SM等

第七篇:蓝牙芯片介绍,主要介绍一些蓝牙芯片的初始化流程,基于HCI vendor command的扩展

第八篇:附录,主要介绍以上常用名词的介绍以及一些特殊流程的介绍等。

另外,开发板如下所示,对于想学习蓝牙协议栈的最好人手一套。以便更好的学习蓝牙协议栈,相信我,学完这一套视频你将拥有修改任何协议栈的能力(比如Linux下的bluez,Android下的bluedroid)。

L2CAP蓝牙协议的 basic mode 基本模式数据格式

------------------------------------------------------------------------------------------------------------------------------------------

CSDN学院链接(进入选择你想要学习的课程):https://edu.csdn.net/lecturer/5352?spm=1002.2001.3001.4144

蓝牙交流扣扣群:970324688

Github代码:https://github.com/sj15712795029/bluetooth_stack

入手开发板:https://item.taobao.com/item.htm?spm=a1z10.1-c-s.w4004-22329603896.18.5aeb41f973iStr&id=622836061708

蓝牙学习目录https://blog.csdn.net/XiaoXiaoPengBo/article/details/107727900

------------------------------------------------------------------------------------------------------------------------------------------

二. L2CAP数据格式

L2CAP的数据格式除非特别声明,否则都是小端

L2CAP一共有记下几个操作模式

• Basic L2CAP Mode((equivalent to L2CAP specification in Bluetooth v1.1) 默认模式,在未选择其他模式的情况下,用此模式。

• Flow Control Mode,此模式下不会进行重传,但是丢失的数据能够被检测到,并报告丢失。

• Retransmission Mode,此模式确保数据包都能成功的传输给对端设备。

• Enhanced Retransmission Mode,此模式和重传模式类似,加入了Poll-bit等提高恢复效率。

• Streaming Mode,此模式是为了真实的实时传输,数据包被编号但是不需要ACK确认。设定一个超时定时器,一旦定时器超时就将超时数据冲掉。

• LE Credit Based Flow Control Mode,被用于LE设备通讯。

• Enhanced Credit BasedFlow Control Mode

1. 面向连接的基本模式数据格式(CONNECTION-ORIENTEDCHANNELS IN BASIC L2CAP MODE)

格式如下,面向连接的基本模式称为B-frame

L2CAP蓝牙协议的 basic mode 基本模式数据格式

参数:

Length:Information payload的长度

Channel ID:The channel ID (CID) identifies the destination channel endpoint of the packet.

Infomation payload:就是后面的数据,有可能是L2CAP本身的(比如signal通道),也有可能是上层协议

我们找一个B-frames来看下

L2CAP蓝牙协议的 basic mode 基本模式数据格式

L2CAP蓝牙协议的 basic mode 基本模式数据格式

其中:

0x0e 0x00 -> payload len是0xe,也就是CID后面黄色长度

0x40 0x00-> CID为0x0040.

2.无连接的基本模式数据格式(CONNECTIONLESS DATACHANNEL IN BASIC L2CAP MODE)

格式如下,无连接的基本模式称为G-frame

L2CAP蓝牙协议的 basic mode 基本模式数据格式

参数:

Length:InFormation payload + PSM的长度

CID:固定0x0002

PSM(Protocol/Service Multiplexer):主要就是用于标识协议的,协议的PSM具体参照,

https://www.bluetooth.com/specifications/assigned-numbers/logical-link-control/

如下:

Protocol and Service Multiplexers (PSMs)

Protocol PSM Reference
SDP 0x0001 See Bluetooth Service Discovery Protocol (SDP), Bluetooth SIG
RFCOMM 0x0003 See RFCOMM with TS 07.10, Bluetooth SIG
TCS-BIN 0x0005 See Bluetooth Telephony Control Specification / TCS Binary, Bluetooth SIG
TCS-BIN-CORDLESS 0x0007 See Bluetooth Telephony Control Specification / TCS Binary, Bluetooth SIG
BNEP 0x000F See Bluetooth Network Encapsulation Protocol, Bluetooth SIG
HID_Control 0x0011 See Human Interface Device, Bluetooth SIG
HID_Interrupt 0x0013 See Human Interface Device, Bluetooth SIG
UPnP 0x0015 See [ESDP], Bluetooth SIG
AVCTP 0x0017 See Audio/Video Control Transport Protocol, Bluetooth SIG
AVDTP 0x0019 See Audio/Video Distribution Transport Protocol, Bluetooth SIG
AVCTP_Browsing 0x001B See Audio/Video Remote Control Profile, Bluetooth SIG
UDI_C-Plane 0x001D See the Unrestricted Digital Information Profile [UDI], Bluetooth SIG
ATT 0x001F See Bluetooth Core Specification
3DSP 0x0021 See 3D Synchronization Profile, Bluetooth SIG.
LE_PSM_IPSP 0x0023 See Internet Protocol Support Profile (IPSP), Bluetooth SIG
OTS 0x0025 See Object Transfer Service (OTS), Bluetooth SIG
EATT 0x0027 See Bluetooth Core Specification

我们的代码定义如下:

/* Protocol and service multiplexor */
#define SDP_PSM 0x0001
#define RFCOMM_PSM 0x0003
#define TCS_BIN_PSM 0x0005
#define TCS_BIN_CORDLESS_PSM 0x0007
#define BNEP_PSM 0x000F
#define HID_CONTROL_PSM 0x0011
#define HID_INTERRUPT_PSM 0x0013
#define UPNP_PSM 0x0015
#define AVCTP_PSM 0x0017
#define AVDTP_PSM 0x0019
#define AVCTP_BROWSING_PSM 0x001B
#define UDI_C_PLANE 0x001D
#define ATT_PSM 0x001F
#define DSP_3_PSM 0x0021
#define LE_PSM_IPSP_PSM 0x0023
#define OTS_PSM 0x0025
#define EATT_PSM 0x0027

InFormation payload:上层协议的数据。

我们没有K-frame的btsnoop,所以就不贴了