USB协议详解

USB协议详解本博客整理自网络,仅供学习参考,如有侵权,联系删除。邮箱:rom100@163.com一个transfer(传输)由一个或多个transaction(事务)构成,一个transaction(事务)由一个或多个packet(包)构成,一个packet(包)由一个或多个sync(域)构成。1.传输数据通信USB的数据通讯首先是基于传输(transfer)的,传输的类型有:中断传输、批量传输…

大家好,又见面了,我是你们的朋友全栈君。

本博客整理自网络,仅供学习参考,如有侵权,联系删除。邮箱:rom100@163.com

一个transfer(传输)由一个或多个transaction(事务)构成,一个transaction(事务)由一个或多个packet(包)构成,一个packet(包)由一个或多个sync(域)构成。

1.传输数据通信

USB的数据通讯首先是基于传输(transfer)的,传输的类型有:中断传输、批量传输、同步传输、控制传输。

2.事务数据通讯

一次传输由一个或多个事务(transaction)构成,事务可以分为:in事务、out事务、setup事务。

3.包数据通讯

一个事务由一个或多个包(packet)构成,包可分为:令牌包(setup)、数据包(data)、握手包(ack)、特殊包。

4.域数据通讯

一个包由多个域构成,域可分为:同步域(sync)、标识域(pid)、地址域(addr)、端点域(endp)、帧号域(fram)、数据域(data)、校验域(crc)。

USB传输

传输分为四种类型:批量传输、等时(同步)传输、中断传输、控制传输。

1、批量(大容量数据)传输(Bulk Transfers): 非周期性,突发 
大容量数据的通信,数据可以占用任意带宽,并容忍延迟 。如USB打印机、扫描仪、大容量储存设备等。

批量输出事务:
(1)主机先发出一个OUT令牌包(包含设备地址,端点号)。
(2)然后再发送一个DATA包,这时地址和端点匹配的设备就会收下这个数据包,主机切换到接收模式,等待设备返回握手包。
(3)设备解码令牌包,数据包都准确无误,并且有足够的缓冲区来保存数据后就会使用ACK/NYET握手包来应答主机(只有高速模式才有NYET握手包,他表示本次数据成功接收,但是没有能力接收下一次传输),如果没有足够的缓冲区来保存数据,就返回NAC,告诉主机目前没有缓冲区可用,主机会在稍后时间重新该批量传输事务。如果设备检查到数据正确,但端点处于挂起状态,返回STALL。如果检测到有错误(如校验错误,位填充错误),则不做任何响应,让主机等待超时。
批量输入事务:
(1)主机首先发送一个IN令牌包(包含设备地址,端点号)。
(2)主机切换到接收数据状态等待设备返回数据。如果设备检测到错误,不做任何响应,主机等待超时。如果此时有地址和端点匹配的设备,并且没有检测到错误,则该设备作出反应:设备有数据需要返回,就将一个数据包放在总线上;如果没有数据需要返回,设备返回NAK响应主机;如果该端点处于挂起状态,设备返回STALL。如果主机收到设备发送的数据包并解码正确后,使用ACK握手包应答设备。如果主机检测到错误,则不做任何响应,设备会检测到超时。注意:USB协议规定,不允许主机使用NAK来拒绝接收数据包。主机收到NAK,知道设备暂时没有数据返回,主机会在稍后时间重新该批量输入事务。

USB协议详解

USB协议详解

2、中断传输(Interrupt Transfers): 周期性,低频率。
允许有限延迟的通信 如人机接口设备(HID)中的鼠标、键盘、轨迹球等。
中断传输是一种保证查询频率的传输。中断端点在端点描述符中要报告它的查询间隔,主机会保证在小于这个时间间隔的范围内安排一次传输。

USB协议详解

3、等时(同步)传输(Isochronous Transfers): 周期性 。
持续性的传输,用于传输与时效相关的信息,并且在数据中保存时间戳的信息 ,如音频视频设备。

等时(同步)传输用在数据量大、对实时性要求高的场合,如音频设备,视频设备等,这些设备对数据的延迟很敏感。对于音频或视频设备数据的100%正确性要求不高,少量的数据错误是可以容忍的,主要是保证数据不能停顿,所以等时传输是不保证数据100%正确的。当数据错误时,不再重传操作。因此等时传输没有应答包,数据是否正确,由数据的CRC校验来确认。
 

USB协议详解

4、控制传输(Control Transfers): 非周期性,突发。
用于命令和状态的传输

控制传输可分为三个过程:(1)建立过程 (2)数据过程(可选) (3)状态过程
特性:  
每个USB设备都必须有控制端点,支持控制传输来进行命令和状态的传输。USB主机驱动将通过控制传输与USB设备的控制端点通信,完成USB设备的枚举和配置 。
方向:  
控制传输是双向的传输,必须有IN和OUT两个方向上的特定端点号的控制端点来完成两个方向上的控制传输 。

USB事物

USB协议详解
 

USB包

包的组成:

USB协议详解

包的内容:

USB协议详解

1、PID:

USB协议详解

这里只用(PID0~4),PID4~7是PID0~4的取反,用来校验PID
PID1~0:01 令牌包、11 数据包、10 握手包、00 特殊包

USB协议详解

2、地址:

USB协议详解

3、帧号:

USB协议详解

4、数据:

USB协议详解

5、CRC:

USB协议详解

Packet分四大类: 命令 (Token) 、Packet 帧首 (Start of Frame) 、Packet 数据 (Data) 、Packet 握手 (Handshake) Packet

不同类型包,以上的组成部件有所不同

1、四种Packet类型之令牌包(Token Packet):
令牌包用来启动一次USB传输。
输出(OUT)令牌包:用来通知设备将要输出一个数据包
输入(IN)令牌包:用来通知设备返回一个数据包
建立(SETUP)令牌包:只用在控制传输中,和输出令牌包作用一样,也是通知设备将要输出一个数据包,两者区别在于:
SETUP令牌包后只使用DATA0数据包,且只能发送到设备的控制端点,并且设备必须要接收,而OUT令牌包没有这些限制
USB协议详解
例子:

USB协议详解

2、四种Packet类型之SOF Packet
帧起始包:在每帧(或微帧)开始时发送,以广播的形式发送,所有USB全速设备和高速设备都可以接收到SOF包。

 

USB协议详解

例子:

USB协议详解

0xA5:1010 0101:对应上面PID表可知是帧起始包
3、四种Packet类型之Data Packet

USB协议详解

例子:

USB协议详解

4、四种Packet类型之Handshake Packet 

USB协议详解

例子:

USB协议详解

USB 设备枚举及描述符介绍 
当一个USB设备插入主机后,会有以下活动: 
USB协议详解

 在USB设备的逻辑组织中,包含设备、配置、接口和端点4个层次。设备通常有一个或多个配置,配置通常有一个或多个接口,接口通常有零个或多个端点。  USB协议详解

USB协议详解

USB协议详解

 USB协议详解

 USB协议详解

例程分析

我们插上鼠标后后出现如下的信息,我们先来分析第一个传输:

USB协议详解

我们看到第一个是控制传输,它包含了4个事物,分别是:1个setup事务,3个in事务,1个out事务,我们先打开setup事务:

USB协议详解

 

我们看到这个事务里包含了3个包

第一个包是令牌包,它由主控制器发送给目标设备的0号端口,用于设置目标设备的地址和端口号,我们看到后面两个包都缺省了地址与端口号。在usb系统中,所有的通信都是由主机发出相应的令牌所引起的。

第二个是数据包,由主控器发送给目标设备,其中数据的内容表示:

80:表示要求设备向主机发送信息

06:表示GET_DESCRIPTOR,即设备向主机发送设备描述符

00与01:Word-sized field that varies according to request

00与40:Word-sized field that varies according to request; typically used to pass an index or offset

00:Number of bytes to transfer if there is a:Data stage

总结一下第二个包就是向默认地址0 发送GET_DESCRIPTOR 指令包,请求设备发送设备描述符

第三个是应答包:设备接收到主机发送的数据后会给出应答

接着我们看第一个in事务

 

USB协议详解

我们看到这个事务里也有三个包

第一个是in包:由主机发送给设备,表示要设备向主机发送上面请求的设备描述符

第二个是数据包:由设备发送给主机,当然是发送设备描述符,我们来分析一下:

12:表示接下来要求主机向设备发送信息

01:CLEAR_FEATURE、

第三个是应答包,由主机发送给设备

接着我们来看第二个in事务

 

USB协议详解

这个事务里依旧是3个包

第一个是in包:由主机发送给设备,表示需要输入

第二个是数据包:由设备发送给主机,我们来解析一下:

6D:表示要求主机发给设备数据

04:Reserved for future use

第三个是主机给设备的应答包

最后来看out事务

USB协议详解

第一个是out包:由主机发给设备

第二个是数据包:由主机发给设备,无数据

第三个包是设备给主机的应答包

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/148225.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • 互斥锁、自旋锁、读写锁、悲观锁、乐观锁的应用场景[通俗易懂]

    互斥锁、自旋锁、读写锁、悲观锁、乐观锁的应用场景[通俗易懂]最常用的就是互斥锁,当然还有很多种不同的锁,比如自旋锁、读写锁、乐观锁等,不同种类的锁自然适用于不同的场景。如果选择了错误的锁,那么在一些高并发的场景下,可能会降低系统的性能,这样用户体验就会非常差了。所以,为了选择合适的锁,我们不仅需要清楚知道加锁的成本开销有多大,还需要分析业务场景中访问的共享资源的方式,再来还要考虑并发访问共享资源时的冲突概率。

  • linux 实现不同网段网络互通[通俗易懂]

    linux 实现不同网段网络互通[通俗易懂]实现:网络:10.10.100.0/24网络:172.16.100.0/24网络:192.168.10.0/24server1:10.10.100.128/24server2:172.16.100.132/24server3:192.168.10.131/24server4:10.10.100.129/24172.16.100.133/24192.168.10.132/24在linux中实现网络互通实现不通网段的网络互通需要借助net-tools所以首先在每个设备上需要安装

  • js保留两位小数四舍五入_js保留两位小数不四舍五入

    js保留两位小数四舍五入_js保留两位小数不四舍五入首先我们来看2个方法:1、tofixed方法toFixed()方法可把Number四舍五入为指定小数位数的数字。但是其四舍五入的规则与数学中的规则不同,使用的是银行家舍入规则。银行家舍入:所谓银行家舍入法,其实质是一种四舍六入五取偶(又称四舍六入五留双)法。具体规则如下:简单来说就是:四舍六入五考虑,五后非零就进一,五后为零看奇偶,五前为偶应舍去,五前为奇要进一。如…

    2022年10月31日
  • pytest重试_手机qq插件加载失败

    pytest重试_手机qq插件加载失败安装:pip3installpytest-rerunfailures重新运行所有失败用例要重新运行所有测试失败的用例,请使用–reruns命令行选项,并指定要运行测试的最大次数:$py

  • k8s 资源管理_k8s资源限制

    k8s 资源管理_k8s资源限制1. namespace2. pod3. label4. deployment5. service

  • JVM 内存模型概述

    JVM 内存模型概述Java虚拟机在执行Java程序的过程中会把它所管理的内存划分为若干个不同的数据区域,这些数据区域都有各自的用途,以及创建和销毁的时间,并且它们可以分为两种类型:线程共享的方法区和堆,线程私有的虚拟机栈、本地方法栈和程序计数器。在此基础上,我们探讨了在虚拟机中对象的创建和对象的访问定位等问题,并分析了Java虚拟机规范中异常产生的情况。

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号