0 Preface/Foreword
1 RFCOMM介绍
1.1 RFCOMM
RFCOMM :R adio F requency COMM unication(基于射频的通讯协议)
在蓝牙上模拟RS-232串口通信(Serial Port Emulation)。
RFCOMM被描述为:Bluetooth Serial Port Emulation Protocol。
1.2 RFCOMM上层典型profile
++RFCOMM上层典型应用包括++:
- SPP (S erial P ort Profile)
- HFP(AT命令通道)
- PBAP/MAP的控制信令
1.3 Apple不开放RFCOMM
普通开发者无法使用RFCOMM,需要通过了MFi(Made For iPhone)认证才可以使用。(系统安全,数据可监管)
1.4 RFCOMM特性
对比BLE + GATT,RFCOMM功耗高。
2 RFCOMM应用场景
2.1 A2DP播放音乐(不使用RFCOMM)
A2DP不需要使用RFCOMM。
++A2DP的数据流如下++:从手机端看
- 手机(Source)
- SBC/AAC编码
- AVDTP
- L2CAP (ACP / Streaming Channel)
- 蓝牙空口
- 耳机(Sink)
- 蓝牙空口
- L2CAP (ACP / Streaming Channel)
- AVDTP
- SBC/AAC编码
NOTE:核心传输是使用L2CAP。
2.1.1 蓝牙空口
蓝牙空口 :Bluetooth Air Interface;真正通过2.4GHz无线电在空气中传输的那一段。即
芯片天线《======》空气中的射频信号《======》另一端天线(比如手机)
++蓝牙空口对应以下两层++:
上层协议(L2CAP)
Baseband / Link |<---逻辑链路调度
PHY(物理层) |<---2.4GHz空口
++PHY:++
- 调制方式(GFSK / π、4-DQPSK / 8-DPSK)
- 信道(79 / 40 channels)
++Baseband/Link Layer:++
- 时隙(time slot)
- SCO / ACL调度
- 重传、跳频
++空口性能:++
- 丢包率
- 干扰能力
- Rx灵敏度
- Tx功率
通俗理解:
蓝牙空口=不看任何上层协议,只看无线电怎么飞
2.1.2 ACP(工程口语,不是规范名)
在A2DP /AVDTP里真正标准的分类是:
- AVDTP Signaling Channel(信令通道)
- 用途
- 建立连接
- 选择codec
- Start/Suspend Stream
- 特点
- 数据量小
- 不实时
- 用途
- AVDTP Media Transport Channel(媒体通道)
- 用途
- 承载SBC/AAC音频帧
- 特点
- 连续
- 高throughput
- 对时延敏感
- 用途
2.1.3 A2DP音频链路
++顺序如下++:
- PCM samples
- SBC / AAC编码
- AVDTP 打包
- L2CAP segamentation
- ACL packet
- Baseband scheduling
- PHY modulation
- 蓝牙空口(2.4GHz)
2.2 HFP通话
HFP通话一定会用到RFCOMM,而且是必须的。
++HFP的协议结构++:
- RFCOMM(控制信令(AT指令))
- SCO/eSCO(语音数据)
- L2CAP(底层承载)
2.2.1 HFP控制信息
所有通话相关的++控制信息++都在RFCOMM里:
- 建立通话
- 挂断
- 来电通知
- 电量、信号强度上报
- 音量控制
++典型的数据流++:从耳机到手机(耳机----->手机(AT命令))
- AT+BIND=?
- AT_VGS=10
- AT_CHUP
- AT_CLCC
2.2.2 数据流(建立通话)
✅️AT命令--->RFCOMM ✅️语音---->SCO/eSCO
2.2.3 为什么语音不走RFCOMM
++RFCOMM特性++:
- 基于ACL(面向无连接;抖动大)
- 面向字节流(无时间严格性)
- 有重传(实时性差)
++语音需要特性++:
- 固定带宽
- 低延迟
- 可丢包
蓝牙语音=SCO/eSCO的电路交换模型。
2.2.4 HFP音频链路
++HFP音频链路如下++:
- CVSD / mSBC
- SCO/eSCO
- Baseband
- 蓝牙空口
2.3 AVRCP
调音和播放控制,可能需要用到RFCOMM。
- 之前的实现:用到RFCOMM
- 当前主流的做法是:L2CAP