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

【android bluetooth 协议分析 13】【RFCOMM详解 1】【通俗易懂 什么是rfcomm】

在这里插入图片描述

RFCOMM 是什么?

你可以把 RFCOMM 想象成蓝牙设备之间的“虚拟串口线”。
就像以前用一根物理线(比如老式打印机的串口线)连接两台设备传输数据一样,RFCOMM 在蓝牙上模拟了这种有线连接的效果,让设备能像插了线一样互相通信。

RFCOMM 协议支持两个蓝牙设备之间最多同时建立 60 个连接。蓝牙设备中可同时使用的连接数取决于具体实现。

在这里插入图片描述


1. 为什么需要 RFCOMM?

  • 兼容老设备:很多旧设备(如打印机、刷卡机、工业传感器)原本是靠物理串口线(如 RS-232)工作的。

  • 无线化简化:蓝牙无线化后,RFCOMM 让这些设备不用改硬件,直接通过蓝牙“假装成有线连接”,省去了改造的麻烦。


2. RFCOMM 的核心功能

① 模拟串口的所有功能
  • 不仅传输数据,还能模拟串口的控制信号(如 RTS/CTS、DTR/DSR),就像真的插了线一样。

  • 支持“虚拟多串口”:一条蓝牙连接上,可以同时开多个虚拟串口(比如一边传文件,一边控制设备)。

② 简单可靠的传输
  • 数据像“快递包裹”一样被打包成帧(UIH 帧)传输,底层蓝牙协议(如 L2CAP)负责纠错和流量控制。

  • 支持流控(比如对方缓冲区满了会发信号暂停发送)。


3. RFCOMM 的工作原理

① 连接过程(像打电话)
  1. 拨号(SABM 帧):设备 A 发送连接请求。

    • SABM:
      • Set Asynchronous Balanced Mode (SABM) command
      • 设置异步平衡模式 命令
  2. 接听(UA 帧):设备 B 同意连接,回确认。

    • UA:
      • Unnumbered Acknowledgement (UA) response
      • 未编号 应答
  3. 通话(数据传输):用 UIH 帧传数据。

    • UIH:
      • Unnumbered information with header check (UIH) command and response
      • 具备头检查的无编号信息 命令帧和应答帧
  4. 挂断(DISC 帧):一方发断开请求,另一方确认(DM)后断开。

    • DIS:
      • Disconnect (DISC) command
      • 断开连接命令
    • DM:
      • Disconnected Mode (DM) response
      • 断开应答帧
② 数据流控(避免“堵车”)
  • 硬件流控:模拟串口的 RTS/CTS 信号(比如暂停/继续发送)。

  • 软件流控:用特殊字符(如 XON/XOFF)控制流量。

  • 信用机制:设备会告诉对方“我还能收多少数据”,避免数据丢失。


4. 两种设备类型

在这里插入图片描述

类型角色例子
Type 1通信终点设备手机、电脑、打印机
Type 2中转设备(带物理串口)蓝牙调制解调器、工业网关
  • Type 1 直接运行应用程序(如手机传文件给打印机)。

  • Type 2 把蓝牙数据转给其他设备(如蓝牙模块把数据转发给有线传感器)。


5. 实际应用场景

  • 蓝牙耳机:配对时用 RFCOMM 传输控制指令(如调节音量)。

  • 蓝牙打印机:手机通过 RFCOMM 发送打印数据,就像插了根虚拟打印线。

  • 车载系统:手机通过 RFCOMM 把导航指令传给车载中控。


6. rfcomm 参考模型

在这里插入图片描述

  • 例如服务侧应用程序, 通过 向SDP 中注册 服务说明。 这样 远端设备就可以通过 SDP 查询到 注册的 rfcomm 服务。 这样 两个设备就可以根据 SDP 中的信息,建立 rfcomm 通道。
  • 建立完 rfcomm 通道后,应用侧,就可以类似 礼物 windows下访问 VCOMM 或者类似于 linux 下访问 /dev/ttyXXX 一样,读写虚拟串口。
  • 最终虚拟串口,会通过 rfcomm 通道传递 出去。

总结:RFCOMM 是蓝牙的“万能串口转换器”

  • 对用户:无感,就像设备之间插了一根线。

  • 对开发者:兼容老协议,不用重写代码。

  • 对硬件:省去物理串口,降低成本。

它的存在让蓝牙既能支持新应用,又能无缝兼容旧设备,是物联网和传统设备无线化的关键桥梁!

相关文章:

  • 数理天地杂志数理天地杂志社数理天地编辑部2025年第6期目录
  • Java的比较器 Comparable 和 Comparator
  • 如何批量拆分Excel工作表或按行拆分Excel表格 - Excel拆分器使用方法
  • 通信协议与网络知识:从硬件到互联网的全面指南
  • 什么是 MCP(模型上下文协议)
  • 10乱码问题的解释(1)
  • GLPI 在企业 IT 资产全生命周期管理中的价值
  • thinkcmf搭建
  • Thinkpad t14的startup 没有 UEFI/Legacy Boot 选项,如何设为U盘启动
  • 【Easylive】MySQL中LEFT JOIN与INNER JOIN的使用场景对比
  • c# 虚函数、接口、抽象区别和应用场景
  • C语言复习--assert断言
  • 一起学习大语言模型-常用命令及模型介绍
  • 输电线路航空标志球:低空飞行的安全路标 / 恒峰智慧科技
  • WiFi(无线局域网)技术的多种工作模式
  • Nest.js学习路径
  • Linux SDHCI 驱动解析:硬件原理与核心机制全解
  • 实现一个分布式锁需要考虑哪些问题
  • Windows 平台下AnythingLLM本地开发环境运行踩坑记录
  • Git相关笔记1 - 本地文件上传远程仓库
  • 上海青少年书法学习园开园:少年以巨笔书写《祖国万岁》
  • 2025吉林市马拉松开跑,用赛道绘制“博物馆之城”动感地图
  • 四大皆空!赛季还没结束,曼城已经吃上“散伙饭”了
  • 南京艺术学院博导、雕塑家尹悟铭病逝,年仅45岁
  • 新任重庆市垫江县委副书记刘振已任县政府党组书记
  • 俄乌直接谈判结束