news 2026/4/16 15:32:20

蓝牙基础(十):蓝牙串口、文件传输、通话控制

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
蓝牙基础(十):蓝牙串口、文件传输、通话控制

liwen01 2026.01.02

前言

日常生活中,我们用到的很多蓝牙功能,都是基于蓝牙 RFCOMM 传输协议来实现,比如:

  • 手机与手机间通过蓝牙分享名片、短信、图片、文件等
  • 手机与车机之间的来电显示、电话接听、挂断、音量调节等
  • 蓝牙模拟串口的数据透传等

对应的蓝牙/* by yours.tools - online tools website : yours.tools/zh/imagetotiff.html */ Profile(配置文件)有:/* by yours.tools - online tools website : yours.tools/zh/imagetotiff.html */ OPP/FTP,PBAP/MAP/SYNC,BPP/BIP,HFP/HSP,SPP,DUN等等

它们间的层级关系如下图:

具体功能如下表:

Profile
中文名称
主要功能
常见设备
OPP
对象推送
文件、名片传输
手机间传文件
FTP
文件传输
访问远程文件系统
手机、电脑
SPP
串口通信
数据传输通道
MCU 模块、扫描枪
DUN
拨号联网
调制解调器上网
手机 → 电脑
HSP
耳机
基础语音通信
蓝牙耳机
HFP
免提
电话控制与语音通话
车载系统
PBAP
电话本访问
读取联系人
车机
MAP
短信访问
读/发短信
车机、智能手表
SYNC
信息同步
联系人、日历同步
手机与电脑
BPP
基本打印
蓝牙打印
手机打印机
BIP
图像传输
图片传输与控制
相机、打印机

这里,我们只简单介绍蓝牙的串口数据透传、文件传输、通话控制

(一)RFCOMM 简介

RFCOMM 是金典蓝牙(BR/EDR)的一个传输层协议,它是串口数据透传、文件传输、通话控制等应用功能的基础。

(1)RFCOMM 历史

RFCOMM (Radio Frequency Communication)诞生于 20 世纪 90 年代末,当时计算机和外设(如调制解调器、打印机)主要通过物理串口(COM 口)连接。

RFCOMM 的核心任务是在蓝牙连接之上模拟传统的 RS-232 串口(Serial Port)通信,它是蓝牙协议栈中极为重要的一个传输层协议。

蓝牙技术联盟(Bluetooth SIG)在制定蓝牙 V1.0 版本规范时,目标之一就是电缆替代。为了让原本基于串口工作的旧软件能无缝迁移到无线蓝牙,开发者需要一种协议来模拟串口,于是就有了 RFCOMM。

RFCOMM 是基于 ETSI TS 07.10 标准修改而来,而 TS 07.10 是 GSM 蜂窝网络中用于在移动设备和终端之间进行多路复用串口通信的标准。 具体定义可以查看官网的《RFCOMM WITH TS 07.10》。

(2)RFCOMM 的技术变迁

(A)信号模拟

最初的 RFCOMM 仅实现了对 RS-232 九针串口信号(如 RTS/CTS, DTR/DSR)的逻辑映射。这使得早期的蓝牙手机可以像接了串口线一样,被电脑识别为一个无线调制解调器

(B)基于信用的流控制

最初 RFCOMM 依赖底层的 L2CAP 进行简单的流控,但在高负载下容易丢包或死锁。

在蓝牙核心规范 V1.1 及后续版本中引入了信用(Credit)机制。发送方必须先获得接收方的信用额度才能发送数据包。

每发送一个包,信用减一;接收方处理完数据后,再返还信用。这极大地提高了大规模数据传输(如文件传输)的稳定性。

(C)安全性增强

随着蓝牙版本从 V2.1 进化到 V5.x 及目前最新的 V6.x,RFCOMM 本身虽然结构未变,但其底层的链路层引入了 SSP(安全简易配对) 和 AES-128 加密,使得通过 RFCOMM 传输的串口数据安全性有了大幅度的提升。

(3)模拟串口

(A)RFCOMM 的两种连接方式

这是最常见、最标准的 蓝牙串口通信方式(SPP 类),两个设备都有蓝牙功能(Type 1 与 Type 2),二者通过 蓝牙链路(BT) 进行通信。

在这条链路上运行 RFCOMM 协议,从而提供虚拟串口连接。

典型的应用是:手机(Type 1)与 蓝牙 GPS 模块(Type 2)通过蓝牙虚拟串口传输 NMEA 数据。

这里多了一个 Device C(没有蓝牙功能),蓝牙设备 Type 2 在此扮演中继桥接(gateway)角色。把蓝牙 RFCOMM 链路与传统的有线串口相连接。

典型的应用是:电脑(Type 1)通过蓝牙连接到蓝牙-转-串口适配器(Type 2), 而该适配器再通过 RS-232 连接到一台老式工业设备(Device C)。

电脑看上去就像直接用串口连着那台设备一样。

(A)RFCOMM 串口端口号

在一个会话中,理论上可以支持最大60个端口号。

但是实际上大多数蓝牙受内存和调度能力限制,一般只支持1 ~ 7个端口。

(二)数据透传

(1)SPP 简介

SPP 的全称是Serial Port Profile。它的核心定义是:如何在两个蓝牙设备之间建立仿真串口连接

它在蓝牙链路上模拟了 RS232 控制信号,使得传统的串口应用程序可以无缝迁移到蓝牙无线传输上,而无需修改应用层逻辑。

(2)SPP 的协议栈架构

SPP 是构建在RFCOMM协议之上的应用协议,它依赖于:RFCOMM、SDP、L2CAP的支持。

RFCOMM 层:SPP 的直接承载者。RFCOMM 在 L2CAP 之上模拟了 9 针串口信号,支持多路复用(即一个蓝牙链路可以跑多个虚拟串口)。

SDP(Service Discovery Protocol):服务发现协议。客户端通过查询 SDP 记录,找到服务器上 SPP 服务对应的RFCOMM Server Channel(1~30)。

L2CAP 层:负责数据的分段与重组,为 RFCOMM 提供面向连接的数据服务。

(3)SPP 的建立连接流程

要实现两个设备间的串口通信,通常需要经历以下四个阶段:

(A)查询与发现(Inquiry/Discovery):主设备(Client)扫描周围的蓝牙设备。

(B)服务发现(SDP Query):主设备向从设备(Server)发起 SDP 请求,查询其是否含有UUID 为0x1101的服务。从设备返回其对应的RFCOMM 通道号

(C)链路建立(Connection): 主设备发起 RFCOMM 连接请求,指定通道号。此时,底层会依次建立 ACL 链路和 L2CAP 通道。

(D)数据传输(Data Exchange):一旦 RFCOMM 通道打开,两端就可以像读写本地串口文件(如 Linux 下的/dev/rfcomm0)一样发送原始字节流。

(4)SPP 与 BLE (GATT) 串口的区别

在蓝牙 4.0 之后,存在两种实现串口的方式:

特性
经典蓝牙 SPP
BLE 透传 (GATT)
标准性
SIG 标准定义,通用性强
非 SIG 标准,各厂商自定义 UUID
数据量
适合大吞吐量、持续传输
适合小包、间歇性传输
功耗
较高
极低
系统支持
Android 支持,iOS 不支持(需 MFi)
Android、iOS 均完美支持

如果你的产品需要连接 iPhone,且不打算申请 Apple 的 MFi 认证,那么请务必选择 BLE 透传,而非 SPP。

(三)文件传输(OBEX、OPP 与 FTP)

OBEX (Object Exchange) 协议最初是由红外标准组织(IrDA)开发的,后来被蓝牙协议栈吸收。它的设计哲学与 HTTP 非常相似,采用了经典的请求-响应模型。

(1)OPP (Object Push Profile):轻量级推送

OPP 是最基础的文件传输方式。它的核心特点是无状态点对点直接推送

(A)核心逻辑

在 OPP 中,Client(发送方)不需要知道 Server(接收方)的文件系统结构。它就像是把一张名片或一张照片给对方,对方可以选择接收拒绝

(B)交互流程

SDP 查询:Client 查找 UUID 为0x1105的服务。

OBEX 连接:建立临时会话。

PUT 操作

  • Client 发送PUT请求,头部携带NameLength
  • Server 弹出提示框。
  • 如果用户点击同意,Server 返回Continue (0x90),Client 开始分段发送Body

断开:传输完成,连接立即释放。

主要应用场景有:两台手机通过蓝牙分享一张联系人名片(vCard)或一张图片。

(2)FTP (File Transfer Profile):全功能文件管理器

虽然名字也叫 FTP,但它和互联网上的 FTP 协议不同,它是OBEX 上的 FTP。相比 OPP,它提供了完整的远程文件系统访问权限。

(A)核心功能

核心功能有:浏览目录、路径切换、多文件操作

  • 浏览目录:Client 可以请求 Server 的文件夹列表。
  • 路径切换:使用SetPath操作在文件夹间跳转。
  • 多文件操作:支持连续的GET(下载)或DELETE(删除)。

(B)关键点:Folder Listing Object

当 Client 想要查看 Server 端的文件夹时,Server 会返回一个特殊的XML 对象。这个 XML 描述了当前目录下所有的文件和子文件夹信息。

<folder-listingversion="1.0"> <parent-folder/> <filename="report.pdf"size="102400"modified="20231027T103000Z"/> <foldername="Photos"/> </folder-listing>`

(C)OPP 与 FTP 对比

特性
OPP (Object Push)
FTP (File Transfer)
UUID0x11050x1106
控制力
只能发送/推送,无法查看对方文件
可以浏览、下载、删除、创建文件夹
交互复杂度
低(推完即断)
高(需要维持会话进行多次操作)
安全性
每次推送通常需要手动确认
建立连接时一次性鉴权,后续操作更自由
典型案例
手机互发一张照片
电脑管理嵌入式设备的日志文件夹

(3)OBEX 的扩展

在蓝牙协议栈中,有不少重要的Profile都是 OBEX 的的变种

  • PBAP(Phone Book Access):把电话本看作一个文件进行 GET。

  • MAP(Message Access):把短信/邮件看作对象进行操作。

(四)蓝牙通话控制(HSP 与 HFP)

(1)核心角色定义

在通话协议中,蓝牙定义了两个核心角色:

AG(Audio Gateway):音频网关。通常指手机。它是音频数据的来源,也是连接移动网络的网关。

HF(Hands-Free) / HS (Headset):免提端/耳机端。通常指蓝牙耳机、车载中控。它作为 AG 的远程控制器和音频 IO 设备。

(2)HSP (Headset Profile) :简约的先驱

HSP 是最早的通话协议,它只提供了最基本的功能:耳机作为手机的音频输入/输出设备,并能进行简单的控制

  • 功能子集:接听电话、挂断电话、调节音量。
  • 控制机制:基于RFCOMM传输极简的 AT 指令。
  • 局限性:它不支持查看来电号码、不支持拒接(只能接听后再挂断)、不支持三方通话。

目前的现状就是:现代蓝牙设备中,HSP 几乎已经被 HFP 完全取代,仅作为协议兼容性的最低保障存在。

(3)HFP (Hands-Free Profile) :现代通话的标准

HFP 是目前 TWS 耳机和车载系统的标配。它在 HSP 的基础上进行了巨大的功能扩充,目前主流版本为v1.7v1.8

(A)协议栈架构

HFP 的实现依赖于两条完全并行的链路:

控制链路(Control Plane):运行在RFCOMM之上。用于传输 AT 指令,负责拨号、同步联系人、电量显示、通话状态切换等。

音频链路(User Plane):运行在基带层(Baseband)之上,使用SCO (Synchronous Connection Oriented)eSCO链路。它绕过了 L2CAP,直接传输同步语音数据,以保证极低的延迟。

(B)HFP 的关键技术流程

要实现一次完美的蓝牙通话,必须经过以下三个关键步骤:

(1)服务级连接建立 (SLC - Service Level Connection)

当耳机连接上手机后,双方会先在 RFCOMM 上进行一系列暗号对接,确认彼此支持的功能:

特性协商:HF 发送AT+BRSF(Bluetooth Retrieve Supported Features),告诉手机“我支持降噪、支持电量显示”。

指标更新:通过AT+CIND获取手机当前的信号强度、电量、漫游状态。

事件报告:通过AT+CMER开启事件通知,这样手机有来电时才会主动推送RING

(2) 语音链路的建立 (SCO vs eSCO)

这是决定通话音质的关键:

SCO:传统的语音链路,带宽固定为 64kbps,通常使用CVSD编码。音质类似于老式座机(采样率 8kHz)。

eSCO(Extended SCO):HFP 1.5+ 引入。支持数据重传,抗干扰能力更强。

宽带语音(Wideband Speech):HFP 1.6+ 引入,使用mSBC编码,采样率提升至16kHz(高清通话),这是目前大多数蓝牙耳机“通话清晰”的技术支撑。

(3)典型通话信令示例

当一个电话打入时,RFCOMM 上的 AT 指令流如下:

AG -> HF: `RING`(振铃) AG -> HF: `+CLIP: "13800138000",129`(来电显示号码) HF -> AG: `ATA`(用户按下耳机键,Answer) AG -> HF: `OK`(手机响应,通话接通) 后续: 建立 eSCO 语音链路,声音开始传输。

(C) HFP 特有的高级功能

三方通话(Three-Way Calling):支持保持当前通话并接听等待中的第二个来电。

语音拨号(Voice Recognition):通过AT+BVRA唤醒手机端的 Siri 或小爱同学。

电量上报:通过特定的厂商自定义指令(如 Apple 的AT+IPHONEACCEV)或标准指令在手机右上角显示耳机电量。

结尾

这里我们简单地介绍了一下蓝牙的串口、文件传输和通话控制应用,下一章我们将详细地分析介绍蓝牙鼠标的工作原理。

------------------End------------------
如需获取更多内容
请关注liwen01公众号
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/13 18:50:28

电脑系统找不到mfc71ud.dll文件 无法启动 免费下载方法

在使用电脑系统时经常会出现丢失找不到某些文件的情况&#xff0c;由于很多常用软件都是采用 Microsoft Visual Studio 编写的&#xff0c;所以这类软件的运行需要依赖微软Visual C运行库&#xff0c;比如像 QQ、迅雷、Adobe 软件等等&#xff0c;如果没有安装VC运行库或者安装…

作者头像 李华
网站建设 2026/4/16 14:46:27

专科生必看!10个高效降AIGC工具推荐,轻松降低AI痕迹

专科生必看&#xff01;10个高效降AIGC工具推荐&#xff0c;轻松降低AI痕迹 AI降重工具&#xff1a;让论文更自然&#xff0c;让查重更轻松 随着人工智能技术的不断发展&#xff0c;越来越多的专科生在撰写论文时会借助AI工具进行辅助。然而&#xff0c;AI生成的内容往往带有…

作者头像 李华
网站建设 2026/4/16 14:29:36

springboot读书学习笔记共享平台

目录 核心功能概述技术架构特点典型应用场景关键创新点 开发技术源码文档获取/同行可拿货,招校园代理 &#xff1a;文章底部获取博主联系方式&#xff01; 核心功能概述 SpringBoot读书学习笔记共享平台是一个基于SpringBoot框架开发的Web应用&#xff0c;旨在为用户提供书籍阅…

作者头像 李华
网站建设 2026/4/16 14:04:56

带你真正了解什么是 I/O 多路复用(附 Java + Spring Boot 实战案例)

视频看了几百小时还迷糊&#xff1f;关注我&#xff0c;几分钟让你秒懂&#xff01; 一、前言&#xff1a;为什么我们要聊 I/O 多路复用&#xff1f; 在开发高并发网络服务&#xff08;比如聊天服务器、实时推送系统、游戏后端等&#xff09;时&#xff0c;我们经常会遇到一个…

作者头像 李华
网站建设 2026/4/14 7:03:48

司拉德帕seladelpar常见副作用分析:瘙痒、头痛与血脂异常的处理方法

司拉德帕在治疗PBC过程中虽展现出显著疗效&#xff0c;但其常见副作用如瘙痒、头痛及血脂异常需通过系统化管理以保障患者生活质量。基于临床试验数据及真实世界研究&#xff0c;以下为针对性处理方法。瘙痒的缓解策略瘙痒是PBC患者最常见且最困扰的症状&#xff0c;严重影响生…

作者头像 李华
网站建设 2026/4/16 15:31:15

智慧农业大棚让反季果蔬管理便利、效益更好

随着全球人口增长和消费升级&#xff0c;反季果蔬需求持续攀升。消费者对冬季草莓、夏季番茄等非时令果蔬的需求&#xff0c;推动农业大棚种植规模快速扩张。然而&#xff0c;传统大棚依赖人工经验调控环境&#xff0c;存在环境参数波动大、资源浪费严重、病虫害频发等问题&…

作者头像 李华