简单了解USB通信协议

目录

一、拓扑结构

二、逻辑部件

三、电气特性

四、插入检测机制

五、描述符

六、枚举过程

七、传输数据的层次结构

八、包

1.包的类型:

2.包的组成:

3.数据包类型的pid切换机制( data pid toggle )

九、事务

十、传输

1.控制传输:

2.批量传输:

3.同步传输:

4.中断传输:


一、拓扑结构

        在一个USB通信系统中,只能有一个主机存在,USB通信只存在于主机和设备之间 ,每次通信都必须由主机发起 ,而设备和设备之间无法通信 。如图1,USB系统是一个分层的星型拓扑结构,可以使用hub来扩展设备。

图1

二、逻辑部件

      如图2, 在设备端的通信传输最终呈现在端点上, 端点在物理上就是一块特殊的内存区域 ,它特殊就特殊在:既可以被CPU访问(也就是通过写程序用地址访问),也 可以被USB硬件引擎访问( 因此称之为 硬件缓冲区)。 最底层通信管道就是在设备的端点和主机应用程序的缓存之间进行。

图2

三、电气特性

     使用差分线传输, 差分线上的信号不是原始数据,是经过了NRZI编码的 (关于NRZI编码此处不展开了,很简单的编码,网上也有非常多的资料) ,并且还加了位填充 (防止长时间电平不变化不利于信号接收的同步)

四、插入检测机制

        主机端,差分线D+、D-都做了弱下拉处理。设备端,会在D+或D-上进行上拉处理,具体的,全速和高速设备对D+上拉,低速设备对D-上拉。因此 主机通过判断差分线的电平来进行插入检测,任意一根线的电平被拉高说明有设备插入 。

五、描述符

        描述符就是设备记录自己的信息, 在程序中以结构体作为容器进行存储 。对USB1.1来说,有 设备描述符、配置描述符 、接口描述符、端点描述符、字符串描述符。具体细节不展开

六、枚举过程

        枚举使用控制传输,这里只罗列一下大概的内容:

1.设备插入后,主机对设备复位。 设备复位后地址变为0,主机使用地址0与其通信 ,获取设备描述符的前8个字节,主机就此得知端点0的最大包长度

2.主机再次对设备复位,给设备分配一个地址。此后访问该设备使用分配的地址而不是地址0

3.主机再次获取设备描述符,需要获取设备描述符的全部字节

4.主机获取配置描述符,然后根据配置描述符中描述的配置集合总长度,获取配置集合

以上过程参考图3

图3

七、传输数据的层次结构

参考图4,

1.结构从上到下为Transfer(传输) Transaction(事务) Packet(包)

2.一次传输可以包含一个或多个事务 ( 控制传输包含三个过程,建立过程和状态过程分别是一个事务,中间的数据过程可能包含多个事务 ;其他三种传输,批量传输、同步传输、中断传输,一次传输只包含一个事务), 一个事务一般包含两个或三个包 (令牌包、数据包、握手包, 同步传输中的事务没有握手包 )

图4

八、包

        包是传输的最基本单元

1.包的类型:

        分为令牌包、数据包、握手包,SOF包(表示帧首)属于令牌包

2.包的组成:

参考图5,

(1)由四个部分组成:SOP, SYNC, Packet Content, EOP;其中SOP SYNC EOP为总线信号

**注意这里的SOP是包起始信号(start of packet),和SOF包是两回事(start of frame) **

图5

(2)包的内容即以上Packet Content的展开

一个包可能总共包含五个域,其中 PID域指示了当前包的类型 ,如图6, 不同类型的包其包内容包含1到5个域之间 ,此处具体不展开

图6

3.数据包类型的pid切换机制( data pid toggle )

        数据包有4种pid:DATA0、DATA1、DATA2、DATAM。在传输数据包的过程中,如果发送或者接收成功,发生数据包类型的pid切换,这是一个传输检错机制 ,此处不展开

九、事务

1.事务由两个或三个包组成:

        令牌包、数据包、握手包

2.同步传输中的事务没有握手包

3.批量传输、同步传输、中断传输的一次传输就是一个事务组成;控制传输由三个过程(stage)组成:建立过程和状态过程各自为一个事务,数据过程则可能包含多个事务

十、传输

四种类型的传输:控制传输、批量传输、同步传输、中断传输

1.控制传输:

        每个USB设备都必须有控制端点,支持控制传输来进行命令和状态的传输。USB主机驱动将通过控制传输与USB设备的控制端点通信,完成USB设备的枚举和配置

2.批量传输:

        适合大数据量传输但对实时性没有严格要求的应用,如U盘

3.同步传输:

        不做握手,速度快,数据易丢失。适合对实时性要求高但可以容忍少量数据错误的应用,如音频、视频

4.中断传输:

        适合数据量小、需要周期性通信的应用,如鼠标、键盘

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://xiahunao.cn/news/2803209.html

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

统计图玫瑰图绘制方法

统计图玫瑰图绘制方法 常用的统计图有条形图、柱形图、折线图、曲线图、饼图、环形图、扇形图。 前几类图比较容易绘制,饼图环形图绘制较难。 还有一种玫瑰图的绘制也较难,今提供玫瑰图的绘制方法供参考。 本方法采用C语言的最基本功能: &am…

C++ 学习之Set容器

C++ Set容器构造和赋值 在C++中,std::set是一个用于存储唯一元素的有序集合容器。下面介绍一下std::set容器的构造和赋值操作: 构造 std::set 默认构造函数: std::set<int> mySet; // 创建一个空的set使用初始化列表构造: std::set<int> mySet

测试开源C#人脸识别模块DlibDotNet

百度“C# 换脸”找到参考文献4&#xff0c;发现其中使用DlibDotNet检测并识别人脸&#xff08;之前主要用的是ViewFaceCore&#xff09;&#xff0c;DlibDotNet是Dlib的.net封装版本&#xff0c;后者为开源C工具包&#xff0c;支持机器学习算法、图像处理等算法以支撑各类高级应…

Camtasia Studio2024官方版电脑屏幕录制及视频编辑软件功能使用全面介绍

Camtasia Studio——屏幕录制与视频编辑的全能之选 Camtasia Studio是一款集屏幕录制和视频编辑于一体的强大软件&#xff0c;它凭借直观的操作界面和丰富的功能&#xff0c;成为了许多教育工作者、内容创作者以及视频编辑爱好者的首选工具。 Camtasia2024win-安装包下载如下:…

树-王道-复试

树 1.度&#xff1a; 树中孩子节点个数&#xff0c;所有结点的度最大值为 树的度 2.有序树&#xff1a; 逻辑上看&#xff0c;树中结点的各子树从左至右是有次序的&#xff0c;不能互换。 **3.**树的根节点没有前驱&#xff0c;其他节点只有一个前驱 **4.**所有节点可有零个或…

电路设计(26)——速度表的multisim仿真

1.设计要求 设计一款电路&#xff0c;能够实时显示当前速度。 用输入信号模拟行驶的汽车&#xff0c;信号频率的1hz代表汽车速度的1m/s。最后速度显示&#xff0c;以km/h为单位。 2.电路设计 当输入信号频率为40HZ时&#xff0c;显示的速度应该为144KM/h&#xff0c;仿真结果为…

3D模型库免费下载有什么好处?

对于设计师来说&#xff0c;高质量的免费的3D模型库是必不可少的资源&#xff0c;能帮他们能够获取到各种类型的3D模型&#xff0c;从而提高工作效率&#xff0c;更好的完成作品。那么3D模型库免费下载对设计师有什么好处? 1.降低门槛&#xff1a;对于初学者或预算有限的设计师…

第3.5章:StarRocks数据导入——Broker Load

注&#xff1a;本篇文章阐述的是StarRocks-3.2版本的Broker Load导入机制 一、概述 Broker Load导入方式支持从HDFS类的外部存储系统&#xff08;例如&#xff1a;HDFS、阿里OSS、腾讯COS、华为云OBS等&#xff09;&#xff0c;支持Parquet、ORC、CSV、及 JSON 四种文件格式&a…

git 使用总结

文章目录 git merge 和 git rebasegit mergegit rebase总结 git merge 和 git rebase git merge git merge 最终效果说明&#xff1a; 假设有一个仓库情况如下&#xff0c;现需要进行 merge&#xff1a; merge 操作流程&#xff1a; merge 的回退操作&#xff1a; git reba…

LabVIEW高效核磁测井仪器多线程优化

LabVIEW高效核磁测井仪器多线程优化 为提高核磁测井仪器的测试效率与性能&#xff0c;开发了基于LabVIEW的多线程优化模型。该研究针对传统的核磁测井仪器软件&#xff0c;在多任务调度测试和并行技术需求上存在的效率不高和资源利用率低的问题&#xff0c;提出了一个多线程优…

Python3基础之import和from import的用法和区别

一、模块和包 1、模块 一个 python 的文件就叫做模块&#xff08;module&#xff09;&#xff0c;如 xxx.py。模块就是一组功能的集合体&#xff0c;我们的程序可以导入模块来复用模块里的功能。 2、包 一个包含有__init__.py 文件的目录或文件夹就叫做包(package)。在 pych…

【51单片机】初学者必会项目——按键控制LED流水灯模式(定时器&中断系统的应用)(10)

前言 大家好吖&#xff0c;欢迎来到 YY 滴单片机系列 &#xff0c;热烈欢迎&#xff01; 本章主要内容面向接触过单片机的老铁 主要内容含&#xff1a; 欢迎订阅 YY滴C专栏&#xff01;更多干货持续更新&#xff01;以下是传送门&#xff01; YY的《C》专栏YY的《C11》专栏YY的…

盘点全网好用的ai伪原创工具

在信息内容发展的今天&#xff0c;写作在我们每个人的生活当中息息相关。可能写作对于有的人来说很简单&#xff0c;但对于有些人来说可能也会很难&#xff0c;幸运的是&#xff0c;我们在这个技术发达的今天&#xff0c;对于很多难题都是可以迎刃而解的&#xff0c;即使对于那…

nginx服务基础用法(概念、安装、热升级)

目录 一、I/O模型概述 1、I/O概念 1.1 计算机的I/O 1.2 Linux的I/O 2、零拷贝技术 3、同步/异步&#xff08;消息反馈机制&#xff09; 4、阻塞/非阻塞 5、网络I/O模型 5.1 阻塞型 I/O 模型&#xff08;blocking IO&#xff09; 5.2 非阻塞型 I/O 模型 (nonblocking …

win系统下安装mysql5.7并配置环境变量、设置root用户和服务启动的详细操作教程

本篇文章主要讲解&#xff1a;win系统下安装mysql5.7并配置环境变量、设置root用户和服务启动的详细操作教程 日期&#xff1a;2024年2月22日 作者&#xff1a;任聪聪 一、mysql5.7版本的下载 官方下载地址&#xff1a;https://downloads.mysql.com/archives/community/ 步骤…

Spring框架@Autowired注解进行字段时,使用父类类型接收子类变量,可以注入成功吗?(@Autowired源码跟踪)

一、 前言 平常我们在使用spring框架开发项目过程中&#xff0c;会使用Autowired注解进行属性依赖注入&#xff0c;一般我们都是声明接口类型来接收接口实现变量&#xff0c;那么使用父类类型接收子类变量&#xff0c;可以注入成功吗&#xff1f;答案是肯定可以的&#xff01;…

linux下执行文件包含^M,将window文件格式内容转为linux格式

查看文件内容 cat -v jvm_options 报错信息 ./bin/install-plugin.sh: /bigdata/opt/s/seatunnelsgg/apache-seatunnel-2.3.4/mvnw: /bin/sh^M: bad interpreter: No such file or directory install connector : connector-selectdb-cloud安装工具 yum install -y dos2uni…

一文了解LM317T的引脚介绍、参数解读

LM317T是一种线性稳压器件&#xff0c;它具有稳定输出电压的特性。LM317T可以通过调整其输出电阻来确保输出电压的稳定性&#xff0c;因此被广泛应用于各种电子设备中。 LM317T引脚图介绍 LM317T共有3个引脚&#xff0c;分别是&#xff1a; 输入引脚&#xff08;输入电压V_in&…

本地配置多个git账户及ll设置

本地配置多个git账户 清除全局配置将命令行&#xff0c;切换到ssh目录生成GitLab和Gitee的公钥、私钥去对应的代码仓库添加 SSH Keys添加私钥ll设置 管理密钥验证仓库配置关于gitgitee.com: Permission denied (publickey) 清除全局配置 此步骤可以不做&#xff0c;经测试不影…

测试环境搭建整套大数据系统(六:搭建sqoop)

一&#xff1a;下载安装包 https://archive.apache.org/dist/sqoop/ 二&#xff1a;解压修改配置。 tar -zxvf sqoop-1.4.7.bin__hadoop-2.6.0.tar.gz -C /opt cd /opt mv sqoop-1.4.7.bin__hadoop-2.6.0/ sqoop-1.4.7修改环境变量 vi /etc/profile#SQOOP_HOME export SQOOP_…