经典蓝牙(Classic Bluetooth / BR/EDR)--- 核心协议层5 --- 经典蓝牙(BR/EDR)电缆替代协议层核心机制详解

文章目录

经典蓝牙电缆替代协议层(RFCOMM)详解

一、概述

RFCOMM (Radio Frequency Communication,射频通信协议)是经典蓝牙(BR/EDR)协议栈中专用的电缆替代协议层 (Cable Replacement Protocol)。它基于 GSM TS 07.10 标准设计,核心目标是在蓝牙无线链路上模拟传统 RS-232 串口,使原有基于串口的应用程序无需修改即可通过蓝牙传输数据。


二、协议定位

复制代码
┌─────────────────────────────────────────────┐
│  应用层 Profiles                              │
│  SPP / HFP / HSP / DUN / OPP / OBEX ...     │
├─────────────────────────────────────────────┤
│  ┌─────────────────────────────────────┐    │
│  │      电缆替代协议层(Cable Replacement) │    │
│  │  ┌─────────┐  ┌─────────────────┐   │    │
│  │  │ RFCOMM  │  │      TCS        │   │    │
│  │  │(串口模拟)│  │(电话控制协议)    │   │    │
│  │  └────┬────┘  └─────────────────┘   │    │
│  └───────┼─────────────────────────────┘    │
├──────────┼──────────────────────────────────┤
│  ┌───────┴─────────────────────────────┐    │
│  │      L2CAP(逻辑链路控制与适配层)     │    │
│  │  - 提供面向连接的可靠信道              │    │
│  │  - 分段重组、QoS、多路复用             │    │
│  └─────────────────────────────────────┘    │
├─────────────────────────────────────────────┤
│  HCI / Baseband / Radio                     │
└─────────────────────────────────────────────┘
属性 说明
全称 Radio Frequency Communication
标准依据 ETSI GSM TS 07.10
OSI 映射 传输层 ~ 会话层
承载层 L2CAP 面向连接信道(PSM = 0x0003)
核心能力 可靠字节流、多路复用、流控、Modem 状态模拟

三、设计目标

RFCOMM 的设计围绕**"无线替代有线串口"**这一核心场景展开:

有线串口特性 RFCOMM 对应实现
物理 RS-232 线缆 蓝牙 L2CAP 无线链路
单一数据流 多路复用(最多 60 路逻辑信道)
RTS/CTS 硬件流控 基于信用的软件流控(Credit-Based)
DTR/DSR 状态信号 Modem Status 命令模拟
波特率配置 端口参数协商(PN 命令)

四、核心机制

4.1 多路复用(Multiplexing)

RFCOMM 在一条 L2CAP 连接上复用多条独立的数据链路:

复制代码
┌─────────────────────────────────────┐
│           一条 L2CAP 链路            │
├─────────┬─────────┬─────────┬───────┤
│  DLCI 0 │  DLCI 2 │  DLCI 4 │  ...  │
│ (控制)   │ (数据A) │ (数据B) │       │
└─────────┴─────────┴─────────┴───────┘
  • DLCI(Data Link Connection Identifier):数据链路连接标识符
  • DLCI 0:控制信道,用于建立/释放数据信道、参数协商、Modem 状态传输
  • DLCI 1:保留(GSM 07.10 兼容)
  • DLCI 2~59 :数据信道,最多 30 路双向数据流(每方向 30 路)
  • DLCI 60~63:保留

DLCI 的计算公式:DLCI = (Server Channel << 1) | Direction_Bit

4.2 帧格式

RFCOMM 帧基于 GSM 07.10 的 UIH(Unnumbered Information with Header check)帧:

复制代码
┌────────┬────────┬────────┬────────┬────────┬────────┬────────┐
│  Flag  │ Address│ Control│ Length │  Info  │  FCS   │  Flag  │
│ (0xF9) │        │(UIH=EF)│        │        │        │ (0xF9) │
├────────┼────────┼────────┼────────┼────────┼────────┼────────┤
│ 1 byte │ 1 byte │ 1 byte │1/2 byte│0~32767B│ 1 byte │ 1 byte │
└────────┴────────┴────────┴────────┴────────┴────────┴────────┘
  • Address 字段:包含 DLCI、C/R 位、EA 位
  • Control 字段 :固定为 UIH (0xEF),表示无连接号的无编号信息帧
  • Length 字段:信息字段长度(支持 EA 扩展,最大 32767 字节)
  • FCS:帧校验序列(仅校验 Address + Control + Length)

4.3 流控机制

RFCOMM 采用基于信用的流控(Credit-Based Flow Control)

方向 机制
RFCOMM → L2CAP 依赖 L2CAP 的流控(L2CAP 本身支持基于信用的流控)
RFCOMM 内部 发送方分配初始信用值,接收方消耗信用,耗尽后暂停发送
上层应用 通过 Modem Status 命令模拟 RTS/CTS 信号

五、连接建立流程

RFCOMM 会话的建立分为两个阶段:L2CAP 连接建立RFCOMM 数据信道建立

5.1 阶段一:L2CAP 连接

复制代码
设备A                          设备B
  │                              │
  │  L2CAP_Connect_Req (PSM=3)   │
  │ ───────────────────────────> │
  │                              │
  │  L2CAP_Connect_Resp (Success)│
  │ <─────────────────────────── │
  │                              │
  • PSM(Protocol/Service Multiplexer)= 0x0003,标识 RFCOMM 服务

5.2 阶段二:RFCOMM 数据信道建立

复制代码
设备A (Initiator)              设备B (Responder)
  │                              │
  │  SABM (DLCI=0, 建立控制信道)  │
  │ ───────────────────────────> │
  │                              │
  │  UA (DLCI=0, 确认)           │
  │ <─────────────────────────── │
  │                              │
  │  PN (Parameter Negotiation)  │
  │ ───────────────────────────> │
  │                              │
  │  PN Response                 │
  │ <─────────────────────────── │
  │                              │
  │  SABM (DLCI=N, 建立数据信道)  │
  │ ───────────────────────────> │
  │                              │
  │  UA (DLCI=N, 确认)           │
  │ <─────────────────────────── │
  │                              │
  │  MSC (Modem Status Command)  │
  │ <──────────────────────────> │
  │                              │
  │  ===== 数据通信开始 =====     │
  │                              │
命令 全称 作用
SABM Set Asynchronous Balanced Mode 建立异步平衡模式连接
UA Unnumbered Acknowledgement 无编号确认
PN Parameter Negotiation 协商最大帧长、窗口大小、流控等
MSC Modem Status Command 模拟 DTR/DSR/RTS/CTS 等 Modem 信号
DISC Disconnect 断开连接
DM Disconnected Mode 拒绝连接或已断开

六、关键参数协商(PN 命令)

建立数据信道前,双方通过 PN 命令协商以下参数:

参数 说明 典型值
Maximum Frame Size 最大帧长度 127 ~ 32767 字节
Convergence Layer 汇聚层类型 Type 1(无汇聚)
Priority 优先级 0~63
Credit-Based Flow Control 是否启用信用流控 是(RFCOMM 强制)
Initial Credits 初始信用值 通常 7

七、典型应用场景

RFCOMM 是多个经典蓝牙 Profile 的核心承载协议

Profile 用途 RFCOMM 角色
SPP(Serial Port Profile) 串口透传 直接承载串口数据
HFP(Hands-Free Profile) 车载免提 传输 AT 命令(接听/挂断/拨号)
HSP(Headset Profile) 耳机通话 传输 AT 命令
DUN(Dial-Up Networking) 拨号上网 模拟 Modem AT 命令集
OPP(Object Push Profile) 文件推送 OBEX 可基于 RFCOMM 传输

SPP(串口协议) 是 RFCOMM 最典型、最广泛的应用,几乎所有蓝牙串口模块(如 HC-05、RN-42)都基于 SPP + RFCOMM 实现。


八、RFCOMM 与 BLE UART 的对比

特性 经典蓝牙 RFCOMM/SPP BLE UART(自定义 GATT)
协议层级 电缆替代层,基于 L2CAP 应用层自定义(GATT Characteristic)
连接方式 传统配对 + 连接 广播 + 直连(无需配对)
数据吞吐 较高(~1-3 Mbps 理论) 较低(~125 Kbps ~ 2 Mbps)
功耗 较高(持续连接) 极低(可休眠)
兼容性 成熟稳定,设备广泛支持 需双方支持 BLE + 自定义服务
多路复用 原生支持 60 路 DLCI 需应用层自行实现
流控 基于信用的内置流控 需应用层或 GATT 通知机制实现
典型芯片 HC-05、BC04、CSR8670 nRF52832、CC2640、ESP32

九、总结

RFCOMM 是经典蓝牙协议栈中的电缆替代协议层,它基于 GSM TS 07.10 标准,在 L2CAP 可靠传输之上实现了 RS-232 串口的无线模拟。通过 DLCI 多路复用、基于信用的流控、Modem 状态模拟等机制,RFCOMM 为 SPP、HFP、DUN 等上层 Profile 提供了透明、可靠的字节流通信能力,是经典蓝牙"替代物理线缆"这一核心愿景的关键实现层。

相关推荐
你怎么知道我是队长5 天前
经典蓝牙(Classic Bluetooth / BR/EDR)--- 核心协议层1 --- 经典蓝牙(BR/EDR)物理层核心机制详解
bluetooth
奔跑吧 android1 个月前
【Bluetooth-SIG】【CoreV6.2】【Vol3 Part G】【GATT】【零】【GATT 逐句逐段学习计划 2】
ble·bluetooth·att·gatt·core_v6.2·sig
奔跑吧 android1 个月前
【Bluetooth-SIG】【CoreV6.2】【Vol3 Part F】【十三】【Error Handling——ATT_ERROR_RSP】
ble·bluetooth·att·gatt·蓝牙协议·bt·core_v6.2
一渊之隔3 个月前
uniapp蓝牙搜索连接展示蓝牙设备包含信号显示
前端·网络·uni-app·bluetooth
yanlaifan3 个月前
BLE中PHY 1M和 2M
bluetooth
奔跑吧 android4 个月前
【BT-SIG】【Core_v6.2】【Vol 3 Host】【Part G: GATT】【3.1 Service definition】
ble·bluetooth·gatt·蓝牙协议·bt·core_v6.2·bt-sig
奔跑吧 android4 个月前
【BT-SIG】【Core_v6.2】【Vol 3 Host】【Part G: GATT】【2.Profile overview】
ble·bluetooth·协议解析·gatt·bt-sig解析·core_v6.2
wzfj123455 个月前
bt-l2cap 深入理解重点接口 l2c_link_check_send_pkts
蓝牙·bluetooth·bt
summerkissyou19875 个月前
android -wifi/蓝牙-常见面试题
android·wifi·bluetooth