传统蓝牙L2CAP的连接流程(以被连接为例)

一. 声明

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

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

第二篇: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)。

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

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的连接流程(以主动连接RFCOMM为例)

整个过程连接流程如下:

其中红色就是SIGNALING command,也就是C-frame,绿框是SDU(解释见截图),也就是B-frame

整理流程如下:

步骤整理如下:

步骤1)我们发送L2CAP Connection Request with RFCOMM PSM,对方回复L2CAP Connection Response

步骤2)我们发送L2CAP Configure Request配置请求 with MTU,对方回复L2CAP Configure Response

步骤3)当MTU不符合要求的时候,对方发送L2CAP Configure Request配置请求with MTU,我们会送L2CAP Configure Response

步骤4)后续的SDU的交互。

我们就结合前面的知识来分析下raw data,加深我们上面的理解:

步骤1)我们发送L2CAP Connection Request with RFCOMM PSM,对方回复L2CAP Connection Response

① 我们L2CAP Connection Request with RFCOMM PSM

在这里我们还是重复下C-frame的封包格式,上面已经介绍,下面用到C-frame的时候格式我们就不再介绍。

其中Information Payload格式为

那么本步骤connection request以及connection response用到的information payload如下:

Raw data分析

08 00 01 00 02 04 04 00 03 00 41 00(hex data)

08 00 -> payload len,也就02 01 04 00 01 00 40 00

01 00->Signaling channel

 

02 -> Code,L2CAP_CONNECTION_REQ (CODE 0x02)

04->Identifier

04 00 -> data的长度,也就是01 00 40 00

03 00->PSM,0x0003就是RFCOMM

40 00->0x0040,Source cid

② 对方回复L2CAP Connection Response

L2CAP raw data为:0C 00 01 00 03 04 08 00 42 00 41 00 00 00 00 00

0c 00 -> 整个L2CAP payload长度,也就是 03 04 08 00 42 00 41 00 00 00 00 00

01 00-> Signaling channel

03 -> L2CAP_CONNECTION_RSP (CODE 0x03)

04 ->Identifier,可以看到跟connect req是一样的

08 00->data长度,也就是42 00 41 00 00 00 00 00长度

42 00 -> Destination CID

41 00->Source CID

00 00->Result connection successful

00 00->Status

步骤2)我们发送L2CAP Configure Request配置请求 with MTU,对方回复L2CAP Configure Response

用到的C-frame information payload格式如下:

①我们发送L2CAP Configure Request配置请求 with MTU‘

L2CAP raw data为0C 00 01 00 04 05 08 00 42 00 00 00 01 02 8E 04

0c 00 -> 后续payload长度,也就是04 05 08 00 42 00 00 00 01 02 8E 04的长度

01 00-> Signaling channel

04 ->L2CAP_CONFIGURATION_REQ (CODE 0x04)

05 ->Identifier

08 00-> 后续的data长度

42 00 -> Destination CID,在connection response的回复的

00 00->Flags (2 octets),no continye

01 02 8e 04是config opt,整个配置选项格式如下:

那MTU的格式如下:

01 -> MTU的type

02 -> length

8e 04 -> 0x48e = 1166byte

②对方回复L2CAP Configure Response

0A 00 01 00 05 05 06 00 41 00 00 00 00 00

0A 00-> 后续payload长度,也就是 05 05 06 00 41 00 00 00 00 00长度

01 00-> Signaling channel

05 ->L2CAP_CONFIGURATION_RSP (CODE 0x05)

05 -> Identifier

06 00 -> 后续的data长度

41 00-> Source CID

00 00->flag no continue

00 00->Result

步骤3)当MTU不符合要求的时候,对方发送L2CAP Configure Request配置请求with MTU,我们会送L2CAP Configure Response

这个交互跟2)基本一样,所以不再重复说明

步骤4)后续的SDU的交互

SDU的我们走的basic mode,格式如下:

Raw data为:04 00 42 00 03 3F 01 1C

04 00 -> payload length是4

42 00 -> CID

03 3F 01 1C -> 数据,也就是rfcomm数据

 

OK,本章结束

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
传统蓝牙L2CAP(Logical Link Control and Adaptation Protocol)连接流程如下: 1. 建立物理连接:首先,两台蓝牙设备需要建立物理连接。设备A作为主设备,设备B作为从属设备。主设备使用发现和配对流程找到从属设备,并建立物理链路。链路建立后,主设备和从属设备之间可以进行蓝牙通信。 2. L2CAP信道配置:建立物理连接后,主设备将通过LMP(Link Manager Protocol)命令发送L2CAP信道配置请求给从属设备。请求中包含了需要建立的L2CAP信道的相关信息,如协议类型、服务类型等。从属设备收到请求后,确认并回复L2CAP信道配置响应。 3. SDP查询:建立L2CAP信道后,主设备可能需要查询从属设备所提供的服务,这时就需要使用SDP(Service Discovery Protocol)进行查询。主设备发送SDP查询请求给从属设备,请求中包含了需要查询的服务类型等信息。从属设备收到请求后,回复SDP查询响应,提供相应的服务信息。 4. L2CAP连接:在L2CAP信道配置和SDP查询完成后,主设备与从属设备之间的L2CAP连接建立成功。此时,两台设备之间可以使用L2CAP协议进行数据传输。主设备可以通过发送L2CAP消息给从属设备,从属设备收到消息后可以进行相应的处理或回复。 综上所述,传统蓝牙L2CAP的连接流程包括建立物理连接L2CAP信道配置、SDP查询和L2CAP连接建立。这个流程确保了设备之间的连接和通信,并为后续的数据传输提供了支持。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值