当前位置 博文首页 > dadalaohua的博客:【USB笔记】 USB2.0 包格式 握手包Handshake

    dadalaohua的博客:【USB笔记】 USB2.0 包格式 握手包Handshake

    作者:[db:作者] 时间:2021-07-27 17:46

    USB笔记 USB2.0 包格式Packet Formats 握手包Handshake Packets

    说明

    介绍的是USB 2.0协议中包格式(Packet Formats)的握手包(Handshake Packets)。

    介绍

    握手包(Handshake packets)里只有一个PID。握手包用于报告数据事务(data transaction)的状态,并可以返回表示成功接收数据、命令接受或拒绝、流控制(flow control)和停止条件(halt conditions)的值。只有支持流控制的事务类型(transaction types)才能返回握手。握手总是在事务的握手阶段(handshake phase)返回,并且可能在数据阶段(data phase)返回,而不是返回数据。握手包在包字段(packet field)的一个字节后由EOP进行分隔。如果一个包被解码为有效的握手,但在一个字节后没有以EOP结束,那么它必须被认为是无效的,并且被接收器忽略。

    握手包(Handshake packets)的包格式(Packet Formats)如图所示:

    Handshake packet

    有四种类型的握手包ACK, NAK, STALL, NYET,和一种特殊的握手包ERR。

    下面进行具体介绍。

    ACK

    ACK表示主机或设备已正确接收到数据。

    TypeValue
    PID TypeHandshake
    PID NameACK
    PID<3:0>0010B
    PID value<7:0>0xD2
    Transfer types used incontrol, bulk, interrupt
    Transaction TypeSETUP, OUT, IN, PING
    Sourcehost, device
    Bus Speedhigh, full, low
    DescriptionReceiver accepts error-free data packet

    ACK表示接收到的数据包(data packet)在数据字段(data field)上没有位填充(bit stuff)或CRC错误,并且数据PID已正确接收。当序列位(sequence bits)匹配并且接收器可以接受数据时,或者当序列位不匹配并且发送器和接收器必须彼此重新同步(resynchronize)时,可以发出ACK。ACK握手仅适用于已传输数据并且期望握手的事务。主机可以对IN事务返回ACK,设备可以对OUT、SETUP或PING事务返回ACK。

    下面看下ACK在Bulk Transaction, Control Transfers和Interrupt Transactions中的位置

    1. Bulk Transaction
      Bulk Transaction Format
    2. Control SETUP Transaction
      Control Transfers
    3. Interrupt Transaction

    Interrupt Transaction

    ACK示例

    这里展示下ACK在SETUP, OUT, IN, PING Transaction的示例

    1. SETUP
      SETUP ACK

    2. OUT

    OUT ACK

    1. IN

    IN ACK

    1. PING

    PING ACK

    NAK

    NAK表示设备正忙或没有要返回的数据。

    TypeValue
    PID TypeHandshake
    PID NameNAK
    PID<3:0>1010B
    PID value<7:0>0x5A
    Transfer types used incontrol, bulk, interrupt
    Transaction TypeOUT, IN, PING
    Sourcedevice
    Bus Speedhigh, full, low
    DescriptionReceiving device cannot accept data or transmitting device cannot send data

    NAK表示设备不能接收来自主机(OUT)的数据,或者设备没有要传输到主机(IN)的数据。NAK只能由IN事务的数据阶段(data phase)或者OUT或PING事务的握手阶段(handshake phase)的设备返回。NAK用于实现流控制(flow control),以表示设备暂时不能发送或接收数据,但最终将能够发送或接收数据,而不需要主机干预。主机永远不能发出NAK。 等时事务(Isochronous Transactions)不使用NAK,因为它们没有用于返回NAK的握手包。 如果设备或主机未收到传输的等时数据,则数据就会丢失。

    NAK在Bulk Transaction, Control Transfers和Interrupt Transactions中的位置可以参照ACK章节的图示。

    NAK示例

    这里展示下NAK在OUT, IN, PING Transaction的示例

    1. OUT

    OUT NAK

    1. IN

    IN NAK

    1. PING

    PING NAK

    STALL

    STALL表示控制请求不受支持、控制请求失败或端点失败。

    TypeValue
    PID TypeHandshake
    PID NameSTALL
    PID<3:0>1110B
    PID value<7:0>0x1E
    Transfer types used incontrol, bulk, interrupt
    Transaction TypeOUT, IN, PING
    Sourcedevice
    Bus Speedhigh, full, low
    DescriptionEndpoint is halted or a control pipe request is not supported

    STALL由设备在响应IN令牌(IN token)或OUT的数据阶段(data phase)后,或响应PING事务(PING transaction)时返回。

    例如下图的Bulk Transaction在IN,OUT,PING Transaction的STALL响应:
    Bulk Transaction Format
    STALL表示设备无法发送或接收数据,或者不支持控制管道(control pipe)请求。在返回STALL后,设备的状态(对于除默认端点以外的任何端点)未定义。主机在任何情况下都不允许返回STALL。

    设备在以下两种情况下使用STALL握手。

    第一种情况,称为“功能停止(functional stall)”,即设置了与端点关联的停止特性(Halt feature)。STALL作为端点的停止特性(Halt feature)被设置时的响应,这意味着端点根本无法发送或接收数据。 功能停止的一种特殊情况是“命令停止(commanded stall)”。当主机明确设置端点的停止特性时,就会发生命令停止。一旦设备的端点被停止,设备必须继续返回STALL,直到通过主机干预清除了引起停止的条件。
    批量和中断端点(Bulk and interrupt endpoints )必须支持功能停止(functional stall)。
    控制管道也可以支持功能停止(functional stall),但是不建议这样做。 这是一种退化的情况,因为控制管道上的功能停止(functional stall)表明它已失去与主机进行通信的能力。 如果控制管道确实支持功能停止(functional stall),则它必须具有停止特性(Halt feature),主机可以设置或清除该功能。
    等时事务(Isochronous transactions)不使用STALL,因为它们没有用于返回STALL的握手包。增强型超高速控制端点不使用功能停止(functional stall)。 在接收到功能停止(functional stall)时,主机会丢弃所有对设备的待处理请求,并且在主机发送成功的控制请求以清除设备上的停止特性(Halt feature)之前,不会恢复通信。

    第二种情况,称为“协议停止(protocol stall)”。协议停止对于控制管道(control pipes)是唯一的。协议停止与功能停止(functional stall)的含义和持续时间上不同。协议停止在控制传输的数据或状态阶段(Data or Status stage)返回,并且STALL条件在下一个控制传输(Setup)开始时终止。
    控制传输的控制管道具有返回STALL握手的能力。如果设备无法完成命令,它就会在控制传输的数据或状态阶段(Data or Status stages )返回一个STALL。与功能停止(functional stall)的情况不同,协议停止(protocol stall)并不表示设备出错。协议停止(protocol stall)的情况会持续到接收到下一个SETUP事务(SETUP transaction)为止,在收到SETUP事务之前,设备将响应管道上的任何IN或OUT事务返回STALL。一般来说,协议停止(protocol stall)表示设备不理解请求或其参数,因此提供了一种扩展USB请求的机制。
    例如,如果主机发送Set Configuration请求将设备配置设置为2,而设备只支持配置1,则设备返回STALL。要清除这种类型的stall,主机将发送另一个Setup包以开始新的控制传输(control transfer)。

    STALL示例

    IN STALL

    NYET

    NYET表示设备接收了一个无错误的数据包,但还没有准备好接受另一个数据包,或者集线器还没有完成分割事务(split-transaction)。

    TypeValue
    PID TypeHandshake
    PID NameNYET
    PID<3:0>0110B
    PID value<7:0>0x96
    Transfer types used incontrol write, bulk OUT, split transactions
    Transaction TypeOUT
    Sourcedevice
    Bus Speedhigh
    DescriptionNo response yet from receiver

    NYET是一种在高速(high-speed)中才有的握手,只在以下两种情况下返回。

    一种情况是,它作为PING协议的一部分由高速端点(high-speed endpoint)返回。
    高速批量和控制传输支持NYET。在接收到一个数据包之后,端点可以返回一个NYET握手,表示该端点接收了数据,但是还没有准备好接收另一个数据包。当主机认为端点可能已准备就绪时,主机可以发送PING令牌包(PING token packet),如果端点已经准备好接收下一个数据包,那么端点将返回ACK,或者如果端点未准备就绪,则返回NAK或STALL。主机和低速或全速设备从不发送NYET。

    另一种是,当集线器(hub)在全/低速事务(full-/low-speed transaction)中尚未完成或无法处理分割事务(split-transaction)时,可以返回NYET以响应分割事务(split-transaction)。

    NYET示例

    NYET

    ERR

    ERR用于报告从高速集线器返回的分割事务中的低速或全速错误。

    TypeValue
    PID TypeSpecial Handshake
    PID NameERR
    PID<3:0>1100B
    PID value<7:0>0x3C
    Transfer types used inall
    Sourcehub
    Bus Speedhigh
    DescriptionSplit Transaction Error Handshake (reuses PRE value)

    ERR是一种在高速(high-speed)中才有的握手,将其返回以允许高速集线器(high-speed hub)在全/低速总线(full-/low-speed bus)上报告错误。它仅由高速集线器作为分割事务协议(split transaction protocol)的一部分返回。

    附录

    Universal Serial Bus Specification Revision 2.0

    1. Bulk Transactions
      Bulk Transaction Format

    2. Control SETUP Transaction
      Control SETUP Transaction

    3. Interrupt Transaction
      Interrupt Transaction

    参考资料

    Universal Serial Bus Specification Revision 2.0

    USB Complete, 5th Edition


    本文链接:https://blog.csdn.net/u012028275/article/details/112427189

    cs