传统蓝牙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

相关文章

Spring Security 基于表达式的权限控制

前言 spring security 3.0已经可以使用spring el表达式来控制授权,允许在表达式中使用复杂的布尔逻辑来控制访问的权限。 常见的表达式 Spring Security可用表达式对象的基类是SecurityExpressionRoot。 表达式描述hasRole([role])用户拥有制定的角色时返回true (Spring security默认会带有ROLE_前缀),去

性能测试介绍

性能测试是一种测试方法,旨在评估系统、应用程序或组件在现实场景中的性能表现和可靠性。它通常用于衡量系统在不同负载条件下的响应时间、吞吐量、资源利用率、稳定性和可扩展性等关键指标。 为什么要进行性能测试 通过性能测试,可以确定系统是否能够满足预期的性能要求,找出性能瓶颈和潜在的问题,并进行优化和调整。 发现性能瓶颈:性能测试可以帮助发现系统的性能瓶颈,即系统在高负载或高并发情况下可能出现的问题

水位雨量在线监测系统概述及应用介绍

在当今社会,随着科技的飞速发展,各种智能监测系统已成为保障公共安全、促进资源管理和环境保护的重要工具。其中,水位雨量在线监测系统作为自然灾害预警、水资源管理及水利工程运行的关键技术,其重要性不言而喻。 一、水位雨量在线监测系统的基本原理 水位雨量在线监测系统主要由数据采集单元、数据传输网络、数据处理中心及用户终端四大部分构成,形成了一个完整的闭环系统。 数据采集单元:这是系统的“眼睛”,

Hadoop数据压缩使用介绍

一、压缩原则 (1)运算密集型的Job,少用压缩 (2)IO密集型的Job,多用压缩 二、压缩算法比较 三、压缩位置选择 四、压缩参数配置 1)为了支持多种压缩/解压缩算法,Hadoop引入了编码/解码器 2)要在Hadoop中启用压缩,可以配置如下参数

图神经网络模型介绍(1)

我们将图神经网络分为基于谱域的模型和基于空域的模型,并按照发展顺序详解每个类别中的重要模型。 1.1基于谱域的图神经网络         谱域上的图卷积在图学习迈向深度学习的发展历程中起到了关键的作用。本节主要介绍三个具有代表性的谱域图神经网络:谱图卷积网络、切比雪夫网络和图卷积网络。 (1)谱图卷积网络 卷积定理:函数卷积的傅里叶变换是函数傅里叶变换的乘积,即F{f*g}

C++——stack、queue的实现及deque的介绍

目录 1.stack与queue的实现 1.1stack的实现  1.2 queue的实现 2.重温vector、list、stack、queue的介绍 2.1 STL标准库中stack和queue的底层结构  3.deque的简单介绍 3.1为什么选择deque作为stack和queue的底层默认容器  3.2 STL中对stack与queue的模拟实现 ①stack模拟实现

Mysql BLOB类型介绍

BLOB类型的字段用于存储二进制数据 在MySQL中,BLOB类型,包括:TinyBlob、Blob、MediumBlob、LongBlob,这几个类型之间的唯一区别是在存储的大小不同。 TinyBlob 最大 255 Blob 最大 65K MediumBlob 最大 16M LongBlob 最大 4G

FreeRTOS-基本介绍和移植STM32

FreeRTOS-基本介绍和STM32移植 一、裸机开发和操作系统开发介绍二、任务调度和任务状态介绍2.1 任务调度2.1.1 抢占式调度2.1.2 时间片调度 2.2 任务状态 三、FreeRTOS源码和移植STM323.1 FreeRTOS源码3.2 FreeRTOS移植STM323.2.1 代码移植3.2.2 时钟中断配置 一、裸机开发和操作系统开发介绍 裸机:前后台系

nginx介绍及常用功能

什么是nginx nginx跟Apache一样,是一个web服务器(网站服务器),通过HTTP协议提供各种网络服务。 Apache:重量级的,不支持高并发的服务器。在Apache上运行数以万计的并发访问,会导致服务器消耗大量内存。操作系统对其进行进程或线程间的切换也消耗了大量的CPU资源,导致HTTP请求的平均响应速度降低。这些都决定了Apache不可能成为高性能WEB服务器  nginx:

控制反转 的种类

之前对控制反转的定义和解释都不是很清晰。最近翻书发现在《Pro Spring 5》(免费电子版在文章最后)有一段非常不错的解释。记录一下,有道翻译贴出来方便查看。如有请直接跳过中文,看后面的原文。 控制反转的类型 控制反转的类型您可能想知道为什么有两种类型的IoC,以及为什么这些类型被进一步划分为不同的实现。这个问题似乎没有明确的答案;当然,不同的类型提供了一定程度的灵活性,但