1. 介绍

RFCOMM提供了基于L2CAP协议的串行(9针RS-232)模拟,最新规范是V1.2,支持在两个蓝牙设备间高达60路的通信连接

RFCOMM支持两种设备类型,但并不对它们进行区分 
Type 1: DTE, 通信终端(如计算机,打印机) 
Type 2: DCE, 通信节点(调制解调器)

连接方式如下图所示 

2. 服务概述

2.1 RS-232控制信号

RFCOMM模拟了9针RS-232接口,如下所示

Pin Circuit Name
102 Signal Common
103 Transmit Data(TD)
104 Received Data(RD)
105 Request to Send(RTS)
106 Clear to Send(CTS)
107 Data Set Ready(DSR)
108 Data Terminal Ready(DTR)
109 Data Carrier Detect(CD)
125 Ring Indicator(RI)

2.2 Null Modem Emulation

当传递非数据通路的状态信息时,不区分DTE和DCE设备, 
而用控制信号来代替相应的信号,下图是对应关系

GSM 07.10信号 对应RS-232控制信号
RTS DSR, DTR
RTR RTS, CTS
IC RI
DV DCD

当两个同类设备(如DTE)互联时,GSM 07.10传输控制信号时就会创建Null Modem

下图显示了两个DTE设备相连时创建的Null Modem 

2.3 多串口仿真

2.3.1 两个设备间的多串口仿真

两个使用RFCOMM通信的蓝牙设备可以同时打开多个串口仿真 
RFCOMM支持多大60路,但是一个设备实际能打开的数据依实现而定 

一个数据链接标识(DLCI: 参考帧格式Address字段D+ServerChannel)标识一对客户和服务器之间的持续连接 
DLCI在两个设备间的RFCOMM会话中保持一致 
DLCI长度为6bit,在RFCOMM中其可用值区间为2~61 
DLCI 0为控制信道 
DLCI 1由于服务器信道概念不能使用 
DLCI 62-63保留

在一次RFCOMM会话中,客户和服务器可以分布在通信的两端,每一端的客户都可以独立发起建立通信连接 
因此可使用RFCOMM服务器信道的概念将DLCI值域空间在两个正在进行通信的设备间进行划分

2.3.2 多仿真串口和多蓝牙设备(Optional)

如果蓝牙设备支持多串口仿真,同时通信连接两端允许使用不同BT设备 
那么RFCOMM实体必须能够运行多路复用会话,每个多路复用使用L2CAP信道标识符(CID)来区分

3. 服务接口描述

RFCOMM目的在于定义一个能够利用仿真串口的协议

下图是RFCOMM参考模型及相应描述

4. RFCOMM帧类型

RFCOMM支持的帧(Frame)类型如下

Frame Types
SABM - Set Asynchronous Balanced Mode (startup command)
UA - Unnumbered Acknowledgement (response when connected)
DISC - Disconnect (disconect command)
DM - Disconnected Mode (response to a command when disconected)
UIH - Unnumbered Information with Header check

SABM,UA,DM and DISC是"low- level”控制帧 
DLCI为0的UIH帧用来传递控制信息,DLCI不为0的UIH帧用来传递数据

5. RFCOMM帧格式

RFCOMM帧格式如下所示 

5.1 Address字段

  
EA(Extern Address)字段: 在RFCOMM中,为1 
C/R(Command/Response)字段: 表示该帧是一个Command还是Response,设置方式如下图所示 
 
DCLI: direction bit and server channel, 通常initator将D位(即最低位)设置为1,而Responser则将其设置为0 
         故initator的DCLI的值总是基数(3,5,7,…,61),而Responser则为偶数(2,4,6,…,60)

5.2 Control字段

Control字段用来标识帧的类型,下图是相关值 
 
其中,P/F是Poll/Final位,在Commands中,被称为P位;而在Responses中则被称为F位 
当发送的Command需要一个相应时,就将P置1,接收方收到这样的命令时需要马上响应并将F置1 
如果接收到P/F位置为0的SABM或DISC帧,接收方将把它们丢弃 
DM帧不考虑P/F的设置。

5.3 Length字段

 
Length字段由最低位的EA来决定其长度 
当EA为1时,长度为7bits(0~127) 
当EA为0时,长度为15bits(0~32767)

其中,RFCOMM帧的默认长度为127,最大长度为32767

5.4 Data字段

Data字段仅仅在UIH帧中存在,其长度限制由L2CAP的MTU所限制

5.5 FCS字段

用于接收方校验接收数据是否正确,校验原理采用循环冗余校验CRC-8

对于SABM,DISC,UA和DM帧,FCS计算Address,Control and Length字段 
对于UIH帧,FCS计算Address and Control字段

6. Multiplexor Frames

Multiplexorm Commands and Responses在DLCI=0在发送用于控制RFCOMM连接 
有七种类型的Commands or Responses

Commands/Responses
PN - DLC parameter negotiation
Test - Test Command
FCon/FCoff - Flow Control On/Off Command
MSC - Modem Status Command, used for flow control
RPN - Remote Port Negotiation
RLS - Remote Line Status
NSC - Non Supported Command (response only)

注意: 当收到一个不支持的命令时应该回应NSC

上面的这些命令和相应通过UIH帧(DLCI=0)来封装 
可以在一个RFCOMM帧中封装多个命令,也可以将一个命令拆分至多个RFCOMM帧

Multiplexor Frames的格式如下图 

tip: Multiplexor Frames的详细格式请参考<rfcomm_tutorial>的10.6部分

Bluetooth RFCOMM介绍的更多相关文章

  1. Bluetooth GATT介绍

    目录 1. 介绍 2 内容 2.1 Configured Broadcast 2.2 GATT Profile Hierarchy 3 Service Interoperability Require ...

  2. Bluetooth GAP介绍

    目录 1 GAP协议栈 2 Profile Role 3 用户接口 4 模式 5 安全 5.1 认证(Authentication) 5.2 安全模式 6 Idle Mode Procedures 7 ...

  3. Bluetooth ATT介绍

    目录 1 介绍 2 详细内容 2.1 Attribute Type 2.2 Attribute Handle 2.3 Attribute Handle Grouping 2.4 Attribute V ...

  4. Bluetooth LMP介绍

    目录 1. 介绍 2. 数据包格式(Packet Format) 3. Procedure Rules 4. 通用回应消息(General Response Messages) 5. 设备特性(Dev ...

  5. Bluetooth Baseband介绍

    目录 1. 概述 1.1 Clock(时钟) 1.2 寻址方式 2. 物理信道(Physical Channels) 3. 物理链路(Physical Links) 4. 逻辑传输层(Logical ...

  6. Bluetooth HFP介绍

    目录 1. 介绍 1.1 目的 1.2 使用场景 1.3 依赖关系 1.4 协议栈 1.5 角色 2. 应用层 3. 空白章节 4. 互操作性要求 4.1 介绍 4.2 Service Level C ...

  7. Bluetooth HCI介绍

    目录 1. HCI功能 2. HCI Packet 1. HCI Command 2. HCI Event 3. HCI Data 3. HCI传输层 HCI, 主机控制接口(Host Control ...

  8. Bluetooth L2CAP介绍

    目录 1. 通用操作 1. L2CAP Channel 2. 设备间操作 3. 层间操作 4. 操作模式 2. 数据包格式(Data Packet Format) 1. B-Frame 2. G-Fr ...

  9. Bluetooth SDP介绍

    目录 1. 概念 2. 服务记录(Service Record) 3. 服务属性(Service Attribute) 4. 服务类(Service Class) 5. 服务查找 5.1 UUID 5 ...

随机推荐

  1. python 类的初始化

    虽然我们可以自由地给一个实例绑定各种属性,但是,现实世界中,一种类型的实例应该拥有相同名字的属性.例如,Person类应该在创建的时候就拥有 name.gender 和 birth 属性,怎么办? 在 ...

  2. 使用iterator出现的死循环

    public static void main(String[] args) { List<String> list = new ArrayList<String>(); li ...

  3. Xamarin.iOS模拟器调试找不到资源文件

    Xamarin.iOS模拟器调试找不到资源文件 在Visual Studio 2015中,运行Xamarin.iOS项目,出现找不到资源文件的错误.错误信息:System.IO.FileNotFoun ...

  4. jQuery对象和DOM对象之间的相互转换

    DOM对象:DOM(Document Object Model,文档对象模型),每一份DOM都可以表示成为一棵树,DOM对象可以使用javascript中的方法. jQuery对象:jQuery对象就 ...

  5. 简单几何(四边形形状) UVA 11800 Determine the Shape

    题目传送门 题意:给了四个点,判断能构成什么图形,有优先规则 分析:正方形和矩形按照点积为0和长度判断,菱形和平行四边形按向量相等和长度判断,梯形按照叉积为0判平行.因为四个点是任意给出的,首先要进行 ...

  6. JavaScript初学者应注意的七个细节

    每种语言都有它特别的地方,对于JavaScript来说,使用var就可以声明任意类型的变量,这门脚本语言看起来很简单,然而想要写出优雅的代码却是需要不断积累经验的.本文利列举了JavaScript初学 ...

  7. HDU 4405 期望DP

    期望DP算是第一题吧...虽然巨水但把思路理理清楚总是好的.. 题意:在一个1×n的格子上掷色子,从0点出发,掷了多少前进几步,同时有些格点直接相连,即若a,b相连,当落到a点时直接飞向b点.求走到n ...

  8. Splay 伸展树

    废话不说,有篇论文可供参考:杨思雨:<伸展树的基本操作与应用> Splay的好处可以快速分裂和合并. ===============================14.07.26更新== ...

  9. COJ969 WZJ的数据结构(负三十一)

    WZJ的数据结构(负三十一) 难度级别:D: 运行时间限制:3000ms: 运行空间限制:262144KB: 代码长度限制:2000000B 试题描述 A国有两个主基站,供给全国的资源.定义一个主基站 ...

  10. 清除 WD MyCloud 自动生成的 .wdmc 目录

    1. 先 SSH,停止相应服务 /etc/init.d/wdmcserverd stop/etc/init.d/wdphotodbmergerd stop 2. 禁止服务自启动 update-rc.d ...