Bluetooth RFCOMM介绍
目录
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介绍的更多相关文章
- Bluetooth GATT介绍
目录 1. 介绍 2 内容 2.1 Configured Broadcast 2.2 GATT Profile Hierarchy 3 Service Interoperability Require ...
- Bluetooth GAP介绍
目录 1 GAP协议栈 2 Profile Role 3 用户接口 4 模式 5 安全 5.1 认证(Authentication) 5.2 安全模式 6 Idle Mode Procedures 7 ...
- Bluetooth ATT介绍
目录 1 介绍 2 详细内容 2.1 Attribute Type 2.2 Attribute Handle 2.3 Attribute Handle Grouping 2.4 Attribute V ...
- Bluetooth LMP介绍
目录 1. 介绍 2. 数据包格式(Packet Format) 3. Procedure Rules 4. 通用回应消息(General Response Messages) 5. 设备特性(Dev ...
- Bluetooth Baseband介绍
目录 1. 概述 1.1 Clock(时钟) 1.2 寻址方式 2. 物理信道(Physical Channels) 3. 物理链路(Physical Links) 4. 逻辑传输层(Logical ...
- Bluetooth HFP介绍
目录 1. 介绍 1.1 目的 1.2 使用场景 1.3 依赖关系 1.4 协议栈 1.5 角色 2. 应用层 3. 空白章节 4. 互操作性要求 4.1 介绍 4.2 Service Level C ...
- Bluetooth HCI介绍
目录 1. HCI功能 2. HCI Packet 1. HCI Command 2. HCI Event 3. HCI Data 3. HCI传输层 HCI, 主机控制接口(Host Control ...
- Bluetooth L2CAP介绍
目录 1. 通用操作 1. L2CAP Channel 2. 设备间操作 3. 层间操作 4. 操作模式 2. 数据包格式(Data Packet Format) 1. B-Frame 2. G-Fr ...
- Bluetooth SDP介绍
目录 1. 概念 2. 服务记录(Service Record) 3. 服务属性(Service Attribute) 4. 服务类(Service Class) 5. 服务查找 5.1 UUID 5 ...
随机推荐
- python 类的初始化
虽然我们可以自由地给一个实例绑定各种属性,但是,现实世界中,一种类型的实例应该拥有相同名字的属性.例如,Person类应该在创建的时候就拥有 name.gender 和 birth 属性,怎么办? 在 ...
- 使用iterator出现的死循环
public static void main(String[] args) { List<String> list = new ArrayList<String>(); li ...
- Xamarin.iOS模拟器调试找不到资源文件
Xamarin.iOS模拟器调试找不到资源文件 在Visual Studio 2015中,运行Xamarin.iOS项目,出现找不到资源文件的错误.错误信息:System.IO.FileNotFoun ...
- jQuery对象和DOM对象之间的相互转换
DOM对象:DOM(Document Object Model,文档对象模型),每一份DOM都可以表示成为一棵树,DOM对象可以使用javascript中的方法. jQuery对象:jQuery对象就 ...
- 简单几何(四边形形状) UVA 11800 Determine the Shape
题目传送门 题意:给了四个点,判断能构成什么图形,有优先规则 分析:正方形和矩形按照点积为0和长度判断,菱形和平行四边形按向量相等和长度判断,梯形按照叉积为0判平行.因为四个点是任意给出的,首先要进行 ...
- JavaScript初学者应注意的七个细节
每种语言都有它特别的地方,对于JavaScript来说,使用var就可以声明任意类型的变量,这门脚本语言看起来很简单,然而想要写出优雅的代码却是需要不断积累经验的.本文利列举了JavaScript初学 ...
- HDU 4405 期望DP
期望DP算是第一题吧...虽然巨水但把思路理理清楚总是好的.. 题意:在一个1×n的格子上掷色子,从0点出发,掷了多少前进几步,同时有些格点直接相连,即若a,b相连,当落到a点时直接飞向b点.求走到n ...
- Splay 伸展树
废话不说,有篇论文可供参考:杨思雨:<伸展树的基本操作与应用> Splay的好处可以快速分裂和合并. ===============================14.07.26更新== ...
- COJ969 WZJ的数据结构(负三十一)
WZJ的数据结构(负三十一) 难度级别:D: 运行时间限制:3000ms: 运行空间限制:262144KB: 代码长度限制:2000000B 试题描述 A国有两个主基站,供给全国的资源.定义一个主基站 ...
- 清除 WD MyCloud 自动生成的 .wdmc 目录
1. 先 SSH,停止相应服务 /etc/init.d/wdmcserverd stop/etc/init.d/wdphotodbmergerd stop 2. 禁止服务自启动 update-rc.d ...