当前位置: 首页 > ops >正文

蓝牙RFCOMM协议概述

RFCOMM概述

概念

RFCOMM 协议提供了对 L2CAP 协议上的串行端口的模拟。该协议基于 ETSI 标准 GSM 07.10。

RFCOMM 采用与 TS07.10 相同的字节序列方式。所有二进制数字都按照从低位到高位的顺序,从左至右读。

在这里插入图片描述

两个使用RFCOMM通信的蓝牙设备可以打开多个仿真串行端口。RFCOMM支持多达60个开放仿真端口;但是,设备中可以使用的端口数量是特定于实现的。数据链路连接标识符(Data Link Connection Identifier, DLCI)在GSM 07.10中用于标识客户端和服务器应用程序之间正在进行的连接。dcl由6位表示,但它的可用值范围是2…61;在GSM 07.10中,DLCI 0是专用的控制通道,DLCI 1由于服务器通道的概念而无法使用,保留了dcls 62-63。DLCI在两个设备之间的一个RFCoMM会话中是唯一的。(这将在第2.3.2节中进一步解释)考虑到客户端和服务器应用程序可能驻留在RFcoMM会话的两端,其中任何一方的客户端都相互独立地建立连接,因此划分了DLCI值空间

RFCOMM帧格式

RFCOMM支持SABM,UA,DM,DISC,UIH五种帧

在这里插入图片描述
Q:RFCOMM 的 initiator 跟 responser 是什么意思?
A:建立连接的设备(通过在 DLCI 0 上发送 SABM 命令)称为 initiator,响应的设备(通过在 DLCI 0 上发送 UA 响应)称为 responder。
这里有一个注意的点,就是每个一定要 DLC0 的通道上发送的 SABM 帧才能定义角色,在其他 RFCOMM server channel 上发送的不算,一旦定义角色,在断开之前都一直遵循这个角色!

Address Field

在这里插入图片描述
EA Field
这部分在蓝牙 RFCOMM 协议中一直为 1

C/R Field

  1. 对于(SABM,UA,DM,DISC)帧,这些统称为命令帧,initiator 发送给 responder,
    C/R=1,response 相应 initiator C/R 也为 1。
  2. 对于(SABM,UA,DM,DISC)帧,这些统称为命令帧,response 发送给 initiator
    C/R 为 0,initiator 响应给 responder,C/R=0.
  3. 对于 UIH 帧,这个称为数据帧,initiator 发送给 responder,C/R=1,response
    发送给 initiator C/R 为 0.
    在这里插入图片描述
    D Field(它与server channel共同组成DCL1)
    initiator 自己的 D=1,responder 自己的 D=0,所以如果在 DLCI 已经建立连接后,后续 initiator 连接 responder 某一个 profile 的时候(比如 HFP),那么应该是 DCLI=0+ server chanel<<1,如果是 responder 连接 initiator 的某一个 profile,那么应该是 DCLI=1+ server channel<<1后续交互封包的 UIH 的 DCLI 一直不变

server channle
就是上层profile的rfcomm channel

Control Field

Control Field 是 1 个 byte 的数据, 主要是标示 RFCOMM frame type 是什么,
我们来截取 GSM 07.10 一个图示,截图如下:
在这里插入图片描述
P/F 是 Poll/Final 位,在 Commands 中,被称为 P(poll)位;而在 Responses中则被称为 F(final)位,总结下:

  1. 对于(SABM,UA,DM,DISC)帧,这些统称为命令帧,command 跟 response 都设置为 1 就好。
    2)对于 UIH 帧,除了给对方 credit 设置为 1 外,UIH user 帧以及 UIH 多路控制帧都设置为 0

SABM:异步平衡模式设置指令 SABM 命令可以用在异步平衡模式下,并且它的控制字段只能有一个字节。设备通过首先发送 UA 应答来确认接收到 SABM 命令,DLC 发送和接收状态变量都必须设定为 0。用大白话讲就是连接命令UA:未加编号的确认应答。 UA 应答用在设备对接收到 SABM 和 DISC 后的确认应答

DM:断开连接模式应答。DM 应答是用来报告设备从数据链路逻辑地断开连接这么一种状态的。在断开模式下,不支持任何命令,直到收到了 SABM 命令,然后停止断开模式。在断开模式下,接收到了 DISC 命令,则要向对方发送一个 DM 应答。

DISC:断开连接指令。用 DISC 命令可以用来结束一个正在运行或者刚刚开始的模式。它就是通知一方另一方悬置操作,设备必须假定一个逻辑断开模式。在执行这个命令之前,接收设备要通过发送 UA 应答来确认接受 DISC 命令。在DLCI0 中 DISC 命令的发送也和其他的 DLCI 具有同意的意思。

UIH:带头校验的未编号信息命令和应答。用 UIH 命令/应答可以通过不影响V(S)或 V®变量来相互发送信息。UIH 是用在传输一些信息的完整性没有它要在正确的 DLCI 上传输重要的情况下的。 FCS 只在地址和控制字段进行计算。UIH,用于对差错码要求不是很高的场合,如语音。

Length Indicator Field

在这里插入图片描述
L1 到 L7 位表示数据字段的长度,其默认值为 31 字节。同样,它可以根据 EA位进行扩展。当 EA=0 时,它接下来的字节如下表表示就可以表示 15 个数字。

information field

仅UIH帧有这个

FCS Field

帧校验序列(FCS)根据不同帧类型在不同域集上进行运算.下面列出需要进行帧运算的字段:
对于 SABM、DISC、UA、DM 帧:在地址、控制和长度标志字段上进行运算;
对于 UIH 帧:在地址和控制字段上进行运算。

多路控制通道的控制命令

多路控制通道主要在 DLCI=0 发送的,主要用来控制 RFCOMM 的连接,来协商一些参数,主要基于 UIH control frame 来发送

发送 UIH 给对方 credit card,在这里又回牵扯到一个知识点,credit,如果 UIH 是在 signaling 通道发送,并且 P/F=0 那么就是普通的 user 数据,如果 P/F=1,那么就是给对方 credit,credit给对方 10,那么在我们不补充的情况下,对方只能发送 10 包 rfcomm 数据,同样道理,对方也会给我们 credit

Remote Port Negotiation Command (RPN)
Remote Line Status Command (RLS)
DLC Parameter Negotiation (PN)

http://www.xdnf.cn/news/5430.html

相关文章:

  • 第二十一节:图像金字塔-高斯金字塔
  • TTS-Web-Vue系列:移动端侧边栏与响应式布局深度优化
  • OSCP备战-kioptrixvm3详细解法
  • [Java实战]Spring Boot 中Starter机制与自定义Starter实战(九)
  • Linux为啥会重新设置中断请求号与中断向量号之间的关系?
  • vector--OJ1
  • 【外网下载Jar包】
  • AI技术驱动SEO关键词智能布局
  • go程序编译成动态库,使用c进行调用
  • linux--------------Ext系列⽂件系统(下)
  • QOwnNotes:功能强大的跨平台笔记应用程序
  • FreeRTOS静态任务的创建、删除和软件定时器的开启(尚硅谷学习笔记)
  • 监控易一体化运维:任务计划管理的关键作用
  • 王道计算机网络知识点总结
  • 动态路由实现原理及前端控制与后端控制的核心差异
  • Linux:43线程封装与互斥lesson31
  • 前端Web开发HTML5+CSS3+移动web(基础-flex)
  • 基于Python的网络电子书阅读系统
  • 在Python中计算函数耗时并超时自动退出
  • 英语听力口语词汇--2.宣传类
  • 【时时三省】(C语言基础)字符数组
  • 关于TIAV20 PLCSIM仿真错误的原因
  • java中的io流
  • 专题一:汉诺塔问题:递归算法的精妙解析
  • PyGame游戏开发(含源码+演示视频+开结题报告+设计文档)
  • 【LwIP源码学习6】UDP部分源码分析
  • [思维模式-28]:《本质思考力》-8- 两种相反的构建与解构系统的思维模式:①自顶向下的分解、牵引;②自底向上的堆叠、聚合
  • 深入剖析 MyBatis 位运算查询:从原理到最佳实践
  • AI文字识别工具汇总
  • 控制LED灯设备