一.介绍

1. spp是什么

串行端口配置文件(SPP)定义了使用蓝牙进行RS232(或类似)串行电缆仿真的设备应使用的协议和过程。 此配置文件涵盖的方案通过虚拟串行端口抽象(本身取决于操作系统)来处理使用蓝牙替代电缆的旧应用程序。

2. spp 结构

在图1.1中,描述了蓝牙配置文件结构和配置文件的依存关系。 如果配置文件通过隐式或显式引用它来重新使用该配置文件的某些部分,则它依赖于另一个配置文件。 在图中说明了依赖性:概要文件直接或间接地依赖于包含它的概要文件。

2.profile 概述

2.1 profile堆栈

基带[1] LMP [2]和L2CAP [3]是OSI层1和2蓝牙协议。 RFCOMM [4]是GSM TS 07.10 [5]的蓝牙改编版,为串行端口仿真提供了传输协议。 SDP是蓝牙服务发现协议[6]。

图2.2所示的端口仿真层是仿真串行端口或为应用程序提供API的实体。

双方的应用程序通常都是传统应用程序,能够并且希望通过串行电缆(在这种情况下是模拟的)进行通信。 但是,旧版应用程序无法了解用于设置仿真串行电缆的蓝牙过程,这就是为什么它们需要双方都需要某种支持蓝牙的辅助应用程序的帮助。 (这些问题未在此配置文件中明确解决;这里主要关注的是蓝牙的互操作性。)但是,同样,希望通过蓝牙执行串行通信的非传统应用程序也必须遵守此配置文件中指定的行为。 无论他们是使用如上所述的支持蓝牙的帮助器,还是使用其他与蓝牙协议栈的接口,都是如此。 这样可以确保旧版应用程序和非旧版应用程序的所有组合在蓝牙级别保持互操作性。

2.2 Configurations and roles

图2.2显示了此配置文件的一种可能的设备配置:

为此配置文件定义了以下角色:

设备A(DevA)–这是主动与另一个设备建立连接的设备(DevA是根据GAP [9]第2.2节的发起方)。

设备B(DevB)–这是等待其他设备主动连接的设备(根据GAP [9]中的2.2节,DevB是接受器)。

请注意,连接顺序(从DevA到DevB)不一定与分别在每侧启动旧版应用程序的顺序有任何关系。
信息性注释:为了将串行端口配置文件映射到常规串行端口体系结构,DevA和DevB都可以是数据电路端点(DCE)或数据终端端点(DTE)。 (RFCOMM协议被设计为独立于DTE-DCE或DTE DTE关系。)

2.3 User Requirements and Scenarios

此配置文件涵盖的场景如下:
在两个设备(例如PC)上设置虚拟串行端口(或等效端口),并将其与蓝牙连接,以仿真两个设备之间的串行电缆。
可以使用虚拟串行端口在任一设备上运行任何旧版应用程序,就像使用两根设备连接真实的串行电缆一样(带有RS232控制信号)。

此配置文件仅要求支持一槽数据包。 这意味着该配置文件可确保使用最高128 kbps的数据速率。 支持更高的费率是可选的。
此配置文件一次仅处理一个连接,因此仅考虑点对点配置。 但是,这不应被解释为对并发施加任何限制; 此配置文件的多次执行应该能够在同一设备上同时运行。 这还包括同时承担两个不同的角色(如DevA和DevB)。

2.4 Profile Fundamentals

为了执行此配置文件,可以选择使用安全性功能,例如授权,身份验证和加密。 对身份验证和加密的支持是强制性的,因此,如果从对等设备请求,则该设备可以参与相应的过程。 如果需要使用安全功能,则在连接建立阶段(如果不是更早的话)将两个设备配对,请参阅GAP,第7节。
此配置文件中未明确使用绑定,因此对绑定的支持是可选的。
链接建立由DevA启动。 必须执行服务发现过程以建立仿真的串行电缆连接。
没有固定的主从角色。
RFCOMM用于传输用户数据,调制解调器控制信号和配置命令。

2.5 Conformance

当要求符合此概要文件时,应以指定的方式(过程强制)支持为此概要文件指示的所有必需功能。 这也适用于表示支持的所有可选和条件功能。 表示支持的所有强制性功能以及可选和有条件的功能,都应作为蓝牙认证计划的一部分进行验证。

3 Application Layer

本节介绍符合串行端口配置文件的设备的功能要求。 此配置文件基于通用访问配置文件。

读取Generic Access Profile时,A方(连接发起方)等效于DevA,而B方(等效于DevB)。
Generic Access Profile中定义的所有强制性要求对此配置文件都是强制性的。
除非下文另有说明,否则Generic Access Profile中定义的所有可选要求对于此配置文件都是可选的。

3.1 Procedure Overview

表3.1显示了所需的过程:

•“ M”为强制性支持
•“ O”表示可选以支持
•“ X”表示排除(用于设备可能支持的功能,但免提配置文件不得使用这些功能)

3.1.1建立链接并建立虚拟串行连接

此过程是指执行必要的步骤以建立与远程设备中模拟串行端口(或等效端口)的连接。 此过程中的步骤为:

1. 使用SDP提交查询,以查找远程设备中所需应用程序的RFCOMM Server通道号。 这可能包括浏览功能,使用户可以在对等设备中的可用端口(或服务)中进行选择。或者,如果确切知道要联系的服务,使用与所需服务关联的服务类别ID来查找必要的参数就足够了。

2. (可选)要求执行对远程设备的身份验证。 同样(可选),需要打开加密。

3. 向远程RFCOMM实体请求一个新的L2CAP通道。

4. 在L2CAP通道上启动RFCOMM会话。

5.使用上述服务器通道号在RFCOMM会话上启动新的数据链路连接。

步骤5之后,虚拟串行电缆连接已准备就绪,可用于双方应用程序之间的通信。

注意:如果在建立新的数据链路连接时设备之间已经存在RFCOMM会话,则必须在现有的RFCOMM会话上建立新的连接。 (这等效于跳过上面的步骤3和4。)

注意:步骤1和2之间的顺序并不重要(可能相反)。

3.1.2 Accept Link and Establish Virtual Serial Connection

此过程是指参与以下步骤:

1.如果远程设备请求,请参加身份验证过程,并在进一步请求时打开加密。

2.接受来自L2CAP的新通道建立指示。

3.在该通道上接受RFCOMM会话建立。

4.在RFCOMM会话上接受新的数据链接连接。 如果用户要求将仿真串行端口连接到本地(并且尚未执行认证/加密过程),则这可能会触发本地请求以认证远程设备并打开加密。

注意:当已经存在到远程设备的RFCOMM会话时,步骤1和4可能会被视为孤立事件。

3.1.3 Register Service Record in Local SDP Database

此过程指的是在SDP数据库中注册模拟串行端口(或等效端口)的服务记录。 这意味着服务数据库的存在,以及响应SDP查询的能力。

通过RFCOMM可以访问的所有服务/应用程序都需要提供SDP服务记录,其中包括达到相应服务/应用程序所需的参数,请参见第6.1节。 为了支持在虚拟串行端口上运行的旧版应用程序,必须通过一些帮助程序来完成服务注册,这有助于用户设置端口。

3.2 Power Mode and Link Loss Handling

由于串行端口配置文件中活动的设备的电源要求可能完全不同,因此不需要使用任何节能模式。 但是,在可能的情况下,不应拒绝使用低功耗模式的请求。

如果使用嗅探,驻留或保留模式,则不会释放RFCOMM DLC或L2CAP通道。

如果单元检测到链路丢失,则应认为RFCOMM已关闭。不应执行第4节中提到的断开DLC和关闭RFCOMM程序。 在高层通信可以恢复之前,必须执行初始化RFCOMM会话过程。

4 RFCOMM Interoperability Requirements

本节介绍了符合串行端口配置文件的RFCOMM的要求。

M1:在RFCOMM协议中,可以同时运行多个RFCOMM会话是可选的。 尽管在合理的情况下鼓励并发支持,但是此配置文件并不要求在DevA或DevB中支持并发RFCOMM会话。
X1:在执行此概要文件中定义的角色期间,将不会使用这些功能。
N / A1:RFCOMM协议中未确认信息传输。
C1:使用哪种流控制机制(每个DLC,聚合或同时使用这两者)是实现问题,但是,如果实现不能保证始终有缓冲区可用于接收数据,则可以发送每个DLC流控制的功能 或总流量控制是强制性的。

在下面的小节中将对某些过程作进一步的评论。

4.1 RS232 Control Signals

根据TS 07.10 [5]的5.4.6.3.7节,要求所有设备使用“调制解调器状态命令”发送有关RS232控制信号中所有更改的信息。

但是,由于RFCOMM可以与实现任何类型的API的适配层一起使用(不仅是虚拟串行端口),因此可以选择使用除流控制(TS 07.10 [5]中的RTR信号)以外的所有RS232控制信号。 该信号可以映射到RTS / CTS或XON / XOFF或其他API机制上,这是一个实现问题。

信息性注释:为了在实际使用所有RS232控制信号的设备与未使用它们的设备之间提供互操作性,前一种实现方式必须根据RFCOMM DLC状态将API /连接器中适当信号的状态设置为适当的默认值。 该实现不得依赖于从对等设备接收任何RS232控制信息。 对RFCOMM DLC状态的依赖性可能意味着,当建立RFCOMM DLC时,DSR / DTR以及DCD都将设置为高电平;如果由于任何原因而关闭了相应的DLC,则将相同的信号设置为低电平。

4.2 Remote Line Status indication

如果本地设备从物理串行端口(或等效端口)中继信息,则需要使用“远程线路状态”指示命令将RS232线路状态的任何变化通知另一台设备,请参阅[5]第5.4.6.3.10节。 可能会发生溢出,奇偶校验或成帧错误。

4.3 Remote Port Negotiation

在建立DLC之前,DevA可能会通过远程端口协商命令向DevB通知RS232端口设置。 参见[5],第5.4.6.3.9节。 如果RFCOMM适配层的API公开了这些设置(例如,波特率,奇偶校验),则需要这样做。

DevB被允许发送远程端口协商命令。

注释:远程端口协商过程中传达的信息应仅根据RFCOMM [4]中的1.2节仅在II类设备(具有物理串行端口)中有用,或者在模拟的串行端口接口上进行数据调步 出于任何原因。 这样的RFCOMM不会根据波特率设置人为地限制吞吐量,请参阅RFCOMM [4]第2章。

5 L2CAP Interoperability Requirements

以下文本以及相关的子条款定义了有关此配置文件的强制性要求。

X1: 在此配置文件的执行过程中不使用无连接通道,但不排除其他配置文件/应用程序的并发使用。

5.1 Channel Types

在此配置文件中,仅应使用面向连接的通道。 这意味着广播数据和单播无连接数据将不在此配置文件中使用。
在连接请求数据包的PSM字段中,必须使用在分配的数字文档[8]第3.2节中定义的RFCOMM值。

5.2 Signaling

在此配置文件的执行过程中,只有DevA可以发出L2CAP连接请求。 除此之外,串行端口配置文件不对L2CAP信令施加任何其他限制或要求。

5.3 Configuration Options

本节介绍“串行端口配置文件”中配置选项的用法。

5.3.1 Maximum Transmission Unit

与L2CAP [3]第6.1节所述的限制相比,此配置文件未对MTU大小施加任何限制。

5.3.2 Flush Timeout

串行端口数据通过可靠的L2CAP通道传输。 除非为承载RFCOMM的L2CAP通道协商了L2CAP增强重传模式,否则刷新超时值应设置为其默认值0xffff(请参阅第5.3.4节)。 如果协商了L2CAP增强重传模式,则可以根据在同一ACL逻辑传输上运行的其他配置文件来设置刷新超时值。

5.3.3 Quality of Service

服务质量的协商在此配置文件中是可选的。

5.3.4 Flow and Error Control

对于将要传输大数据文件并且接收设备会受到无线电干扰而导致丢包的任何产品,建议通过配置通道来利用L2CAP(核心规范V3.0及更高版本)中的错误控制功能 使用增强型重传模式。

串行端口数据通过可靠的L2CAP通道传输。 可以使用ACL逻辑传输上的无限刷新超时来实现此通道的可靠性。 但是,如果串行端口配置文件与同一物理链路上的其他配置文件共存,则以这种方式配置ACL逻辑传输可能是不可接受的。 因此,对于希望串行端口配置文件与物理链路上的其他配置文件共存的设备,应该为承载RFCOMM的信道协商L2CAP增强重传模式(在核心规范版本3.0中引入)。 通过这种方式实现可靠的L2CAP通道,允许ACL逻辑传输具有适合其他配置文件的有限刷新超时。

还可以为使用串行端口配置文件的应用程序协商L2CAP增强重传模式,该应用程序需要比非刷新ACL逻辑传输所提供的可靠性更高的可靠性。

6 SDP Interoperability Requirements

6.1 SDP Service Records for Serial Port Profile

DevA中没有与串行端口配置文件相关的SDP服务记录。
下表是DevB的SDP数据库中与串行端口相关的条目的描述。 允许向该服务记录添加更多属性。
低于v1.2的串行端口配置文件版本未要求BluetoothProfileDescriptorList属性。 新的DevA设备应假定没有此属性的远程DevB不支持1.2或更高版本的串行端口配置文件。

1.在“分配的号码”文档[8]中定义。
2.为了对所有“可显示”文本字符串属性提供本国语言支持,必须为所选语言的LanguageBaseAttributeIDList值添加一个偏移量(有关详细信息,请参见SDP规范[6],第5.1.14节)。
3.“ SerialPort”服务类别是最通用的服务类型。 此配置文件不排除其他更特定的服务类。
4.这里建议的ServiceName属性值仅是示例; 帮助程序设置串行端口可能会为该端口提供更具描述性的名称。

6.2 SDP Procedures

为了检索支持此配置文件的服务记录,DevA中的SDP客户端实体通过SDAP [7]第5和6节中介绍的SDP和L2CAP过程,与DevB中的SDP服务器实体连接并进行交互。 扮演LocDev的角色,而DevB扮演RemDev的角色。

7 Link Manager (LM) Interoperability Requirements

7.1 Capability Overview

除了Link Manager规范本身中说明的有关受支持过程的要求(请参阅[2]中的第3节)之外,此配置文件还要求在DevA和DevB中都支持加密。

7.2 Error Behavior

如果一个单元尝试使用强制性功能,而另一个单元答复说不支持该功能,则发起单元应发送一个LMP_detach,其分离原因为“不支持的LMP功能”。
单元应始终能够处理对可选功能的拒绝请求。

7.3 Link Policy

没有固定的主从角色来执行此配置文件。 如果使用低功耗模式或使用低功耗模式,则此配置文件不声明任何要求。 在5.3.3节中规定的等待时间要求的限制内,这取决于每个设备的链路管理器在适当时决定和请求。

8 Link Control (LC) Interoperability Requirements

8.1 Inquiry

在DevA中调用查询时,它应使用常规查询程序; 参见GAP [9],第6.1节。
只有DevA可以在执行此配置文件时查询。

8.2 Inquiry Scan

对于查询扫描,(至少)应根据GAP [8] 4.1.2节和4.1.3节中定义的一种可发现模式使用GIAC。 也就是说,如果适用于DevB中驻留的应用程序,则仅允许使用“可发现的受限”模式。

在DevB INQUIRY RESPONSE消息中,“设备类别”字段将不包含任何提示,表明DevB是否参与了串行端口配置文件的执行(由于此配置文件为旧应用程序提供的通用串行端口服务不适合 设备类别字段定义中主要服务类别位的字段)

8.3 Paging

在此配置文件的执行范围内,只有DevA可以分页。 当在DevA和DevB之间已经存在基带连接时,开始执行此配置文件时,将在DevA中跳过寻呼步骤。 (在这种情况下,由于DevB先前的分页,可能已经建立了连接。)

8.4 Error Behavior

由于LC级别上的大多数功能都必须通过LMP程序激活,因此错误通常会在该层被捕获。 但是,有些LC程序独立于LMP层。 例如查询或传呼。 滥用这些功能很难或有时无法检测。 没有定义检测或防止这种不当使用的机制。

9 References

[1] Baseband specification v1.2 or later
[2] Link Manager Protocol v1.2 or later
[3] L2CAP Specification v1.2 or later
[4] RFCOMM with TS 07.10
[5] ETSI, TS 101 369 (GSM 07.10) version 6.3.0
[6] Service Discovery Protocol (SDP) v1.2 or later
[7] Service Discovery Application Profile v1.2 or later
[8] Bluetooth Assigned Numbers
[9] Generic Access Profile v1.2 or later

SPP(SERIAL PORT PROFILE)相关推荐

  1. Android 操作串口 (android serial port api)

    Android 操作串口 (android serial port api)

  2. vb.net2019- 串口serial port通信

    serial port,即串行端口,现在大多数硬件设备均采用串口技术与计算机相连. Public Class Form1Private Sub GetSerialPortNames()' Show a ...

  3. Basic serial port listening application

    Basic serial port listening application 转载于:https://www.cnblogs.com/pcdmisnc/archive/2010/10/09/1846 ...

  4. Non-standard serial port baud rate setting

    ////combuad_recv.cpp #include <stdio.h> /*标准输入输出定义*/ #include <stdlib.h> /*标准函数库定义*/ #in ...

  5. Virtual Serial Port Driver虚拟串口vspd v7.2 下载及破解方法

    虚拟串口安装之后,不要立刻运行它.将压缩包内附的用vspdctl.dll文件放到C:\Program Files\Eltima Software\Virtual Serial Port Driver ...

  6. 解决ubuntu下arduino IDE的Serial Port无法选择问题

    刚接触arduino,刚买了个arduino uno的板子(mango的兼容板 ,不得不说,质量还不错.),拿回来就开始折腾,开始在windows上折腾没有问题,近来在windows下工作越来越少,而 ...

  7. VSPD V9版(Virtual Serial Port Driver 9.0)

    VSPD V9版(Virtual Serial Port Driver 9.0) 最好用的虚拟串口对: Virtual Serial Port Driver 最新版 Standard V9.0.575 ...

  8. 关于电脑出现 “USB Serial Port“ 黄色感叹号

    有时你明明正确安装了FT232或者PL2303等驱动,但是电脑设备管理器还是提示缺失 "USB Serial Port",这就让人很纳闷了,搜索这个驱动又搜不到: 其实这就是表明你 ...

  9. 修改手机BP(比如烧号)必备的VSP(Virtual Serial Port)虚拟串口软件

    HW VSP3 - Virtual Serial Port http://www.hw-group.com/products/hw_vsp/index_en.html VSPM (国产软件哦) htt ...

最新文章

  1. 写论文神器APEX-NET:自动重新绘制图像
  2. 【Flutter】Flutter 混合开发 ( Flutter 与 Native 通信 | 通信场景 | Channel 通信机制 | Channel 支持的通信数据类型 | Channel 类型 )
  3. python中的魔法参数:*args和**kwargs
  4. python传递参数格式_Python语言学习基础篇之Python发送Post请求之根据参数位置传参、数据类型、不同方式传参...
  5. python处理csv文件案例_让繁琐的工作自动化——python处理CSV文件
  6. LeetCode 261. 以图判树(全部连通+边数=V-1)
  7. swift for循环_Swift | 实战一个简单的素数计算器demo
  8. 网络协议笔记-数据链路层
  9. Python Imaging Library: ImageGrab Module(图像采集模块)
  10. HDU2522 A simple problem【分数与小数】
  11. json转换为对象 java对象数组对象_将json数组转换为java列表对象
  12. 计算机故障代码0098,故障码P0098排除方法
  13. 洛谷 P1097 统计数字
  14. 短信工具类——mo信通
  15. AutoJs学习-实现悬浮网络监视器
  16. 使用 Notepad 或 TextEdit 来编写 HTML
  17. opencv边缘检测加提取(圆形和矩形)
  18. 关于啤酒和尿布故事的真相
  19. Server 2008改成个人习惯的配置
  20. 进制转换(十进制转二进制)

热门文章

  1. android 名片识别 简书,iOS 自己实现 名片识别 四 图片转文字以及归类
  2. ASP.NET中的AutoPostBack和IsPostBack以及EnableViewState三者的运用以及区别
  3. 【深度学习】Linux服务器搭建pytorch环境
  4. 能帮你换运营商的,不止携号转网这一条路
  5. 在matlab中fscanf,matlab中fscanf的用法
  6. 你手机注册过哪些网站,测一测
  7. 大学生笔记本电脑性价比排行2023 大学生笔记本电脑哪款适合大学生用
  8. CSS学习(3) - 轮廓文本和字体图标
  9. 微信小程序:想要点击图片时进行一个放大的功能,写完之后可以正常显示,但点击时图片加载不出来,在此想问一下各路大神有没有解决办法
  10. 如何用 Python 发送通知到微信?