2、USB传输类型

2、USB传输类型

上次说了USB有四种传输类型,这次对具体的传输做一个分析。

2.1、USB控制传输

这个是所有的USB设备都会用到的传输了,在枚举过程中使用的就是控制传输。
控制传输分为三个过程。其中,每一个过程都是Transaction.用一次枚举过程中的数据来举例.

2.1.1、建立过程

首先上面说过,每个Transaction都由2-3个包组成.分别是令牌包,数据包,应答包.
在建立过程中,令牌包使用的是SETUP包.且数据包在该过程中只能使用DATA0包,设备只能使用ACK应答(出错不应答).如下图所示.
2、USB传输类型对照传输图,

2.1.2、数据过程(可选)和状态过程

在一个控制传输中或许没有数据过程,但如果有,可以包含一个或者多个Transaction.
在数据过程中,所有的Transaction必须是同一个传输方向.且数据过程中的第一个数据包必须是DATA1,之后每次正确传输一个数据包后就会在DATA0和DATA1之间交替.

  • 控制读传输
    在读传输中,数据过程中的所有数据事务必须是输入的
  • 控制写传输
    在写传输中,数据过程中的所有数据事务必须是输出的

且一旦数据传输方向发生改变,则规定进入了状态过程,这个时候状态过程以一个与数据事务方向相反的数据事务结尾.
如果没有数据事务发生,则以IN数据事务(0 data)结束.如下图所示.
2、USB传输类型

2.2、USB大容量传输

这个和控制传输差不多,且比控制传输要简单的多.
在批量传输中,可以有1个或多个事务组成.且每个事务有三个阶段,令牌阶段,数据阶段和握手包阶段.
如图所示,红框的可以不用看.

  • NYET用于高速设备中,表示本次数据接收成功,但是没有能力接收下一次的数据.
  • PING是USB2.0高速模式下特有的,用于检测设备端是否还有剩余空间
    2、USB传输类型在平时无数据时,总线在空闲态,当需要传输一次事务的时候,主机发送一个令牌包,可以是OUT或者IN或者PING(高速).如果出错则回复NAK或者STALL.
    然后根据发送的令牌包的不同,设备接收或者发送数据.
    在结束后,如果是输出事务,则设备接收到数据后设备返回一个ACK包.
    如果是输入事务,主机接收设备返回的数据正确,主机返回一个ACK包.
    如果发送的数据过多,则将数据分包处理,即多个传输事务组成一次大容量传输.如下.
    2、USB传输类型

2.3、USB同步传输

2、USB传输类型这个就很简单了,主机发送IN或者OUT的令牌包,后面跟随一个数据包.因为对数据的100%正确要求不高,所以并没有增加应答机制.

2.4、USB中断传输

2、USB传输类型中断传输即每隔一定时间发起一次传输.且这里的中断和硬件的中断并不一样,这里的中断是主机每隔一段时间安排一次传输.且传输的数据量通常不大,但对时间要求严格.
他的传输过程和大容量传输基本是一样的,只是少了PING和NYET两种包.

备注

在ST官方的培训资料里找到了如下表.
2、USB传输类型