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 ...
随机推荐
- javascript优化--05模式(函数)
回调函数模式: 基本例子: var findNodes = function (callback) { ...................... if (typeof callback !== ' ...
- Playmaker Input篇教程之Playmaker购买下载和导入
Playmaker Input篇教程之Playmaker购买下载和导入 Playmaker Input篇认识Playmaker Playmaker是Unity的插件,其标志如图1-1所示.开发者使用它 ...
- css的引入方法2
id 方法精确 #div1 { font-size:30px; } <!DOCTYPE html> <html> <head> <meta name=&q ...
- BZOJ1105 : [POI2007]石头花园SKA
考虑把所有石头翻到直线y=x同侧,此时可以保证篱笆长度最短. 这种最短的篱笆一共有4种可能,枚举每种可能然后$O(n)$检验求出答案即可. #include<cstdio> const i ...
- BZOJ3680 : 吊打XXX
本题就是找一个受力平衡的点 我们一开始假设这个点是(0,0) 然后求出它受到的力,将合力正交分解后朝着合力的方向走若干步,并不断缩小步长,一步步逼近答案 #include<cstdio> ...
- Ural 1018 (树形DP+背包+优化)
题目链接: http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=17662 题目大意:树枝上间连接着一坨坨苹果(不要在意'坨'),给 ...
- robotium 新建 android 测试项目:
注意:新建项目后再运行前一定要修改Manifest文件中的instrumentation 中的target package, 这个是测试的入口 1. 程序开始要通知系统我要测的app是什么 如何知道a ...
- topcoder SRM 592 DIV2 LittleElephantAndPermutationDiv2
#include <iostream> #include <vector> #include <algorithm> #include <iterator&g ...
- pygame系列_百度随心听_完美的UI设计
这个程序的灵感来自于百度随心听 下面是我的程序截图: 说明: 动作按钮全部是画出来的,没有用到任何图片 用到图片的只有:背景,歌手图片,作者图片 代码正在调试中.... 如果你鼠标移动到黄色小圆里面, ...
- 基于SpringMVC框架项目Demo
Git地址:https://github.com/JavaWeb1024/SpringMVC 1. 框架简介: 为打造一套集群高可用的框架,集成的技术目前比较成熟,稳定.相关的知识点在网络上也 ...