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 ...
随机推荐
- Android 编程下的四大组件之服务(Service)
服务(Service) 是一种在后台运行,没有界面的组件,由其他组件调用开始.Android 中的服务和 Windows 中的服务是类似的东西,它运行于系统中不容易被用户发觉,可以使用它开发如监控之类 ...
- LilyPad Arduino可穿戴技术和电子织物控制器板简介
LilyPad Arduino可穿戴技术和电子织物控制器板简介 第1章 LilyPad Arduino概览 作为本书的第一章,在这里将为读者介绍LilyPad Arduino相关的基础知识.例如,L ...
- 简单几何(凸包+多边形面积) POJ 3348 Cows
题目传送门 题意:求凸包 + (int)求面积 / 50 /************************************************ * Author :Running_Tim ...
- 简单几何(直线与线段相交) POJ 1039 Pipe
题目传送门 题意:一根管道,有光源从入口发射,问光源最远到达的地方. 分析:黑书上的例题,解法是枚举任意的一个上顶点和一个下顶点(优化后),组成直线,如果直线与所有竖直线段有交点,则表示能穿过管道. ...
- 洛谷 P1908 逆序对 Label:归并排序||树状数组 不懂
题目描述 猫猫TOM和小老鼠JERRY最近又较量上了,但是毕竟都是成年人,他们已经不喜欢再玩那种你追我赶的游戏,现在他们喜欢玩统计.最近,TOM老猫查阅到一个人类称之为“逆序对”的东西,这东西是这样定 ...
- 洛谷 P1541 乌龟棋 Label:O(n^4)的dp
题目背景 小明过生日的时候,爸爸送给他一副乌龟棋当作礼物. 题目描述 乌龟棋的棋盘是一行N个格子,每个格子上一个分数(非负整数).棋盘第1格是唯一的起点,第N格是终点,游戏要求玩家控制一个乌龟棋子从起 ...
- CC150 - 11.2
Question: Write a method to sort an array of strings so that all the anagrams are next to each other ...
- HttpClient_javax.net.ssl.SSLHandshakeException: sun.security.validator 问题解决,与环境有关
用httpclient访问https 资源时,会出现异常,与环境也有关系,有些机器请求正常. javax.net.ssl.SSLHandshakeException: sun.security.val ...
- QMessageBox 使用方法
在Qt中经常需要弹出窗口,QMessageBox可以实现此功能,一共有三种窗口,information, question, 和 warning,critical, about分别对应感叹号,问号和叉 ...
- cookie 换肤
jquery.Cookies.js /** * Cookie plugin * * Copyright (c) 2006 ziqiu.zhang * Dual licensed under the M ...