本文章主要讲下蓝牙协议栈RFCOMM协议(bluetooth rfcomm)的概念以及在整个蓝牙协议栈中的起的作用
本专栏文章我们会以连载的方式持续更新,本专栏计划更新内容如下:
第一篇:蓝牙综合介绍 ,主要介绍蓝牙的一些概念,产生背景,发展轨迹,市面蓝牙介绍,以及蓝牙开发板介绍。
第二篇: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学院链接(进入选择你想要学习的课程):
蓝牙交流扣扣群:970324688
Github代码:
入手开发板:
蓝牙学习目录:
--------------------------------------------------------------------------------------------------------------------------
RFCOMM协议提供了对L2CAP协议上的串行端口的模拟。该协议基于ETSI标准GSM 07.10。本文档不包含完整的规范。相反,参考GSM 07.10标准的相关部分。仅使用GSM 07.10标准的一个子集,本文档中指定了该协议的一些修改。此外,还以基于信用的强制性流程控制方案的形式添加了RFCOMM特定的扩展。
设备类型
RFCOMM 的目的,是针对如何在两个不同设备(通信的两端)上的应用之间保证一条完整的通信路径,并在它们之间保持一通信段。下图表示一条完整通信路径。应用不只表示终端用户应用, 比如也可以是高层协议或作为终端用户应用的其它服务。
RFCOMM的目的是覆盖使用其所在设备的串行端口的应用程序,该规范支持两种设备类型的存在:
Type 1: DTE, 设备本身就是通信终端(如计算机,打印机)
在简单的配置下,通信段是一个从一个设备到另一个设备的蓝牙链接,如下图:
Type 2: DCE, 通信节点(调制解调器)
总计起来如图:
字节序列
RFCOMM 采用与 TS07.10 相同的字节序列方式。所有二进制数字都按照从低位到
高位的顺序,从左至右读。
RFCOMM在协议栈中的位置:
截图下SIG的rfcomm服务定义模型:
各层解释:
RFCOMM 仿真 RS-232(EIATIA-232-E)串口。该仿真过程包括非数据通路状态的传输。RFCOMM 内置空 modem 仿真标准框架。如果通过 RFCOMM 服务接口设定指定端口的波特率,也不会影响 RFCOMM的实际数据吞吐量。也就是说,RFCOMM 不限制人工速率或步长。但是,如果通信链路两端的设备都是负责将数据转发到其它通信介质的第二类设备,或在两端 RFCOMM 设备接口上进行数据传输,实际数据吞吐一般将反映波特率的设置。RFCOMM 支持两个设备间的多串口仿真,也支持多个设备间多串口的仿真。