传统蓝牙RFCOMM多路控制帧(MULTIPLEXOR FRAMES)介绍

2024-01-02 15:50

本文主要是介绍传统蓝牙RFCOMM多路控制帧(MULTIPLEXOR FRAMES)介绍,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

零. 概述

本文章主要讲下蓝牙RFCOMM协议多路控制通道(MULTIPLEXOR FRAMES),包括一下几种

• PN—DLC parameter negotiation.

• Test—Checks communication link.

• FCon / FCoff—Aggregate flow control on all connections.

• MSC—Modem status, used for flow control per connection.

• RPN—Remote Port Negotiation.

• RLS—Remote Line Status.

• NSC—Non-Supported Command (response only).

一. 声明

本专栏文章我们会以连载的方式持续更新,本专栏计划更新内容如下:

第一篇:蓝牙综合介绍 ,主要介绍蓝牙的一些概念,产生背景,发展轨迹,市面蓝牙介绍,以及蓝牙开发板介绍。

第二篇:Transport层介绍,主要介绍蓝牙协议栈跟蓝牙芯片之前的硬件传输协议,比如基于UART的H4,H5,BCSP,基于USB的H2等

第三篇:传统蓝牙controller介绍,主要介绍传统蓝牙芯片的介绍,包括射频层(RF),基带层(baseband),链路管理层(LMP)等

第四篇:传统蓝牙host介绍,主要介绍传统蓝牙的协议栈,比如HCI,L2CAP,SDP,RFCOMM,HFP,SPP,HID,AVDTP,AVCTP,A2DP,AVRCP,OBEX,PBAP,MAP等等一系列的协议吧。

第五篇:低功耗蓝牙controller介绍,主要介绍低功耗蓝牙芯片,包括物理层(PHY),链路层(LL)

第六篇:低功耗蓝牙host介绍,低功耗蓝牙协议栈的介绍,包括HCI,L2CAP,ATT,GATT,SM等

第七篇:蓝牙芯片介绍,主要介绍一些蓝牙芯片的初始化流程,基于HCI vendor command的扩展

第八篇:附录,主要介绍以上常用名词的介绍以及一些特殊流程的介绍等。

另外,开发板如下所示,对于想学习蓝牙协议栈的最好人手一套。以便更好的学习蓝牙协议栈,相信我,学完这一套视频你将拥有修改任何协议栈的能力(比如Linux下的bluez,Android下的bluedroid)。

-------------------------------------------------------------------------------------------------------------------------

CSDN学院链接(进入选择你想要学习的课程):https://edu.csdn.net/lecturer/5352?spm=1002.2001.3001.4144

蓝牙交流扣扣群:970324688

Github代码:https://github.com/sj15712795029/bluetooth_stack

入手开发板:https://item.taobao.com/item.htm?spm=a1z10.1-c-s.w4004-22329603896.18.5aeb41f973iStr&id=622836061708

蓝牙学习目录:https://blog.csdn.net/XiaoXiaoPengBo/article/details/107727900

--------------------------------------------------------------------------------------------------------------------------

二. 多路控制帧(MULTIPLEXOR FRAMES)

多路控制通道主要在DLCI=0发送的,主要用来控制RFCOMM的连接,来协商一些参数,主要有以下类型:

• PN—DLC parameter negotiation.

• Test—Checks communication link.

• FCon / FCoff—Aggregate flow control on all connections.

• MSC—Modem status, used for flow control per connection.

• RPN—Remote Port Negotiation.

• RLS—Remote Line Status.

• NSC—Non-Supported Command (response only).

主要基于UIH control frame来发送,多路控制的数据格式如下,红框为多路控制帧的格式

Type参数格式如下图所示:

当EA为1时表示这是最后一个字节,当为0时则表示有扩展的字节表述,如下图:

T位代表类型编码下面我们就来一一说下每个command。

2.1 PN—DLC Parameter Negotiation

在 DLC 建立之前,要用 PN 进行参数协商,整个PN的封包格式如下:

Length一直为8

后续的value格式如下:

其中D1~D6是DLCI

I1~I4定义了在指定 DLC 上传输信息帧的类型,如下,但是我们此部分只选择UIH帧

CL 1~4位定义了在指定 DLCI 上的汇聚层类型,如下表所示:

P1~P6位表示在指定 DLC 上所分配的优先级,范围从 0 到 63,0 的优先级最高:

T 位表示 acknowledgement timer (T1)的值

N 位表示 maximum frame size (N1)的值。

NA-位表示 maximum number of retransmissions (N2)

K 位表示纠错模式下窗口大小

来一个sample后续的value如下:

2 .2 Test Command (Test)

测试命令,类型代码是 000100,长度字节为 0,后面没有参数。

2.3 Flow Control On Command (FCon)

流控开启命令,类型代码为 000101,长度字节为 0,后面没有参数

2.4 Flow Control Off Command (FCoff)

流控关闭命令,类型代码为 000110,长度字节为 0,后面没有参数

2.3/2.4的命令都没有参数,格式如下:

2.5 Modem Status Command (MSC)

用 MSC 命令来传输 V.24 控制信号,它在基本选项下面使用。MSC 命令包含一个 mandatory control signal(强制的控制信号)字节和一个 break signal(暂停信号)字节。在建立了 DLC 之后,发送用户数据之前,发送 MSC 命令。

参数有address以及V.24,address已经在前面介绍,我们来看下V.24的格式

EA:扩展位,功能如前所述。

FC:flow control,当设备不能接受帧数据的时候,设定为 1。

RTC:ready to communicate,当设备准备好通信时,把这位设定为 1。

RTR:ready to receive,设备准备好接收数据时,设定为 1。

IC:incoming call indicator,当有呼入时,设定为 1。

DV:data valid,发送了合法数据,设定为 1。

其他位保留。我们来看个btsnoop截图:

2.6 Non Supported Command Response (NSC)

当接收实体接收到了一个不支持的命令类型时,对发方发送 NSC。其类型代码为 001000,当只有一个不支持的命令类型时,长度字节为 1,后面的参数是代表不支持的命令类型的代码,其格式为:

2.7 Remote Port Negotiation Command (RPN)

我们来贴下

在来贴下从Baud rate的结构:

B1-B7 代表的是波特率,其具体含义见下表:

D1-D2 表示数据位的长度。 00 表示 5bit,01 表示 6bit,10 表示 7bit,11 表示 8bit。

S 表示停止位

P 表示校验,P=0 有校验,P=0 无校验

PT1-PT2 表示校验类型

FLC1-FLC6 D 默认值为 0, 没有流控制

Bit1 XON/XOFF on input

Bit2 XON/XOFF on output

Bit3 RTR on input

Bit4 RTR on output

Bit5 RTC on input

Bit6 RTC on output

XON1-XON8 XON character (default DC1)

XOF1-XOF8 XOFF character.(default DC3)

PM1-PM8 parameter mask

用parameter mask来表示对方的哪个参数需要进行协商。如果是命令, parameter

mask用0表示不改变,1表示要改变。如果是应答,0表示不接受建议值,1表示接

受并并使用建议值

第 7、8 个字节的 bit mask 表示

Bit1 bit rate

Bit2 data bits

Bit3 stop bits

Bit4 Parity

Bit5 parity type

Bit6 XON character

Bit7 XOF character

Bit8 reserved

PM9-PM18: Parameter mask continued

Bit1 XON/XOFF on input

Bit2 XON/XOFF on output

Bit3 RTR on input

Bit4 RTR on output

Bit5 RTC on input

Bit6 RTC on output

所有的参数默认为 0,接收方接到后对此忽略。

Mask整理如下

2.8 Remote Line Status Command (RLS)

类型代码为 001010,长度字节的值为 2,有两个参数。第一个参数为 DCLI的值,具体格式跟一般的 DCLI 格式一样。第二个参数的格式入下表所示:

L1-L4 表示链路状态,如果 L1 为 0,则表示没有错误发生,若 L1=1,则表示发生了错误

如下:

• 0b1100—Overrun error, a received character has overwritten a character which had

not yet been read.

• 0b1010—Parity error, the parity was wrong on a received character.

• 0b1001—Framing error, a character did not end with a stop bit.

这篇关于传统蓝牙RFCOMM多路控制帧(MULTIPLEXOR FRAMES)介绍的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/562920

相关文章

MybatisPlus service接口功能介绍

《MybatisPlusservice接口功能介绍》:本文主要介绍MybatisPlusservice接口功能介绍,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友... 目录Service接口基本用法进阶用法总结:Lambda方法Service接口基本用法MyBATisP

MySQL复杂SQL之多表联查/子查询详细介绍(最新整理)

《MySQL复杂SQL之多表联查/子查询详细介绍(最新整理)》掌握多表联查(INNERJOIN,LEFTJOIN,RIGHTJOIN,FULLJOIN)和子查询(标量、列、行、表子查询、相关/非相关、... 目录第一部分:多表联查 (JOIN Operations)1. 连接的类型 (JOIN Types)

Python远程控制MySQL的完整指南

《Python远程控制MySQL的完整指南》MySQL是最流行的关系型数据库之一,Python通过多种方式可以与MySQL进行交互,下面小编就为大家详细介绍一下Python操作MySQL的常用方法和最... 目录1. 准备工作2. 连接mysql数据库使用mysql-connector使用PyMySQL3.

如何搭建并配置HTTPD文件服务及访问权限控制

《如何搭建并配置HTTPD文件服务及访问权限控制》:本文主要介绍如何搭建并配置HTTPD文件服务及访问权限控制的问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、安装HTTPD服务二、HTTPD服务目录结构三、配置修改四、服务启动五、基于用户访问权限控制六、

java中BigDecimal里面的subtract函数介绍及实现方法

《java中BigDecimal里面的subtract函数介绍及实现方法》在Java中实现减法操作需要根据数据类型选择不同方法,主要分为数值型减法和字符串减法两种场景,本文给大家介绍java中BigD... 目录Java中BigDecimal里面的subtract函数的意思?一、数值型减法(高精度计算)1.

Pytorch介绍与安装过程

《Pytorch介绍与安装过程》PyTorch因其直观的设计、卓越的灵活性以及强大的动态计算图功能,迅速在学术界和工业界获得了广泛认可,成为当前深度学习研究和开发的主流工具之一,本文给大家介绍Pyto... 目录1、Pytorch介绍1.1、核心理念1.2、核心组件与功能1.3、适用场景与优势总结1.4、优

Java实现本地缓存的常用方案介绍

《Java实现本地缓存的常用方案介绍》本地缓存的代表技术主要有HashMap,GuavaCache,Caffeine和Encahche,这篇文章主要来和大家聊聊java利用这些技术分别实现本地缓存的方... 目录本地缓存实现方式HashMapConcurrentHashMapGuava CacheCaffe

Spring Security介绍及配置实现代码

《SpringSecurity介绍及配置实现代码》SpringSecurity是一个功能强大的Java安全框架,它提供了全面的安全认证(Authentication)和授权(Authorizatio... 目录简介Spring Security配置配置实现代码简介Spring Security是一个功能强

电脑蓝牙连不上怎么办? 5 招教你轻松修复Mac蓝牙连接问题的技巧

《电脑蓝牙连不上怎么办?5招教你轻松修复Mac蓝牙连接问题的技巧》蓝牙连接问题是一些Mac用户经常遇到的常见问题之一,在本文章中,我们将提供一些有用的提示和技巧,帮助您解决可能出现的蓝牙连接问... 蓝牙作为一种流行的无线技术,已经成为我们连接各种设备的重要工具。在 MAC 上,你可以根据自己的需求,轻松地

JSR-107缓存规范介绍

《JSR-107缓存规范介绍》JSR是JavaSpecificationRequests的缩写,意思是Java规范提案,下面给大家介绍JSR-107缓存规范的相关知识,感兴趣的朋友一起看看吧... 目录1.什么是jsR-1072.应用调用缓存图示3.JSR-107规范使用4.Spring 缓存机制缓存是每一