zoukankan      html  css  js  c++  java
  • USB的四种传输类型与端点

    1、事务

    在介绍USB传输类型之前,请允许我先简答介绍一下USB事务。

    事务一般由令牌包、数据包(可选)、握手包组成。

    • 令牌包:用来启动一个事务,总是由主机发送。
    • 数据包:可以从主机到设备,也可以由设备到主机,方向由令牌包决定。
    • 握手包:通常情况,数据的接收者发送握手包(ACK或者NAK)。

    USB协议规定了四种传输类型:控制传输、批量传输、同步传输、中断传输。下面简答介绍一下这四种传输类型及其注意事项。

    2、控制传输

    2.1. 控制传输分为三个过程:建立过程、数据过程(可选)、状态过程。

    建立过程:

    a. 主机发送令牌包:SETUP

    b. 主机发送数据包:DATA0

    c. 设备返回握手包:ACK或不应答,注意:设备不能返回NAK或STALL,即设备必须接收建立事务的数据。

    数据过程(可选):

    一个数据过程可以包含多个数据事务,但所有数据事务必须是同一方向的。若数据方向发生了改变,则认为进入状态过程。数据过程的第一个数据包必须为DATA1,然后每次正确传输一个数据包后就在DATA0和DATA1之间交替。

    状态过程:

    状态过程只使用DATA1包,并且传输方向与数据过程相反。

    2.2. 控制传输的应用场合:主要应用于设备的枚举过程和对数据准确性要求较高的场合。

    3、同步传输

    • 同步传输的应用场合:主要用在数据量大,对实时性要求较高的场合。如视频设备、音频设备等。

    4、批量传输

    • 批量传输使用批量传输事务,一次批量传输事务分为三个阶段:令牌包阶段、数据包阶段、握手包阶段。
    • 批量传输分为批量读和批量写,批量读使用批量输入事务,批量写使用批量输出事务。注意:不论输入还是输出都是以主机为参考的。
    • 批量传输的应用场合:主要用在数据量大、对数据实时性要求不高的场合,例如USB打印机、扫描仪、大容量存储设备等等。

    批量输出流程:

    1) 主机发送OUT令牌包。

        说明:令牌包中包含设备地址、端点号。

    2) 设备处理令牌包。

    • 令牌包正确:设备等待接收数据包。
    • 令牌包错误:设备既不接收、处理数据包,也不返回握手包,让主机等待超时。

    注:令牌包的正确与否包括设备地址和端点号是否匹配。

    3) 主机发送数据包,然后切换到接收模式,等待接收设备返回的握手包。

        说明:数据包中包含一个DATA(具体是什么类型的DATA,取决于数据切换位)。

    4) 设备处理数据包。

    • 数据包正确,并有足够的空间保存数据:设备返回ACK握手包或NYET握手包(只有告诉模式才有NYET握手包,它表示本次数据接收成功,但是没有能力接收下一次传输)。
    • 数据包正确,但是没有足够的空间保存数据:设备返回NAK握手包。主机收到NAK,延时一段时间后,再重新进行批量输出事务。
    • 数据包正确,但端点处于挂起状态:设备返回一个STALL握手包。
    • 数据包错误:设备不返回任何握手包,让主机等待超时。

    批量输入流程:

    1) 主机发送IN令牌包,然后切换到接收数据状态,等待设备返回数据。

        说明:令牌包中包含设备地址、端点号。

    2) 设备处理令牌包。

    • 令牌包正确,且有数据需要返回:设备将一个数据包放到总线上。
    • 令牌包正确,但没有数据需要返回:设备返回NAK握手包。主机收到NAK,延时一段时间后,再重新进行批量输入事务。
    • 令牌包正确,但端点处于挂起状态:设备返回一个STALL握手包。
    • 令牌包错误:设备不做任何响应,让主机等待超时。

    3) 主机接收并处理数据包。

    • 数据包正确:主机发送一个ACK握手包。
    • 数据包错误:主机不做任何响应,让设备等待超时。

    注:USB协议规定,不允许主机使用NAK握手包来拒绝接收数据包。

    PING事务:

    • PING事务只有令牌包和握手包。
    • PING事务是USB2.0高速模式特有的,全速模式和低速模式没有。
    • PING事务作用:主机探测设备是否有空间接收数据。

    PING流程:

    1. 主机发送PING令牌包。

    2. 设备返回状态。

    • 设备有空间接收数据:设备返回ACK握手包。
    • 设备没有空间接收数据:设备返回NAK握手包。
    • 设备端点挂起:设备返回STALL握手包。

    5、中断传输

    • 中断传输是一种保证查询频率的传输。
    • 中断端点在端点描述符中报告它的查询间隔,主机会保证在不小于这个时间间隔的范围内安排一次传输。
    • 中断传输可以用来不断检测某个状态,当条件满足后,再使用批量传输来传送大量的数据。
    • 中断传输和批量传输的结构基本上一样(除了对端点查询策略)。
    • 中断传输的应用场合:主要用在数据量小,但对时间要求严格的场合。如人机接口设备(HID)中的鼠标、键盘、轨迹球等。

    6、端点

    • 一个具体的端点只能工作在一种传输模式下。通常我们把工作在什么模式下的端点,叫做什么端点。如控制端点、批量端点、同步端点、中断端点。
    • 端点0是设备的默认控制端点,在设备上电后就存在并可以使用,在Set Config之前所有的传输都是通过端点0传输的。
    • 端点描述符中规定了端点所能支持的最大包长。
      • 控制传输:高速模式的最大包长固定为64个字节;全速模式可在8、16、32、64字节中选择;低速模式的最大包长固定为8个字节。
      • 批量传输:高速模式固定为512个字节;全速模式最大包长可在8、16、32、64字节中选择;低速模式不支持批量传输。
      • 同步传输:高速模式的最大包长上限为1024个字节;全速模式的最大包长上限为1023个字节;低速模式不支持同步传输。
      • 中断传输:告诉模式的最大包长上限为1024个字节;全速模式最大包长上限为64个字节;低速模式最大最大包长上限为8个字节。
  • 相关阅读:
    第八章 多线程编程
    Linked List Cycle II
    Swap Nodes in Pairs
    Container With Most Water
    Best Time to Buy and Sell Stock III
    Best Time to Buy and Sell Stock II
    Linked List Cycle
    4Sum
    3Sum
    Integer to Roman
  • 原文地址:https://www.cnblogs.com/risunlee/p/5210759.html
Copyright © 2011-2022 走看看