zoukankan      html  css  js  c++  java
  • USB Mass Storage Class – Bulk Only Transport

    6.4 Device Error Handling

    The device may not be able to fully satisfy the host's request. 
    At the point when the device discovers that it cannot
    fully satisfy the request, there may be a Data-In or Data-Out transfer
    in progress on the bus, and the host may have other pending requests. 

    The device may cause the host to terminate such transfers by STALLing
    the appropriate pipe.The response of a device to a CBW that
    is not meaningful is not specified.

    Please note that whether or not a STALL handshake actually
    appears on the bus depends on whether or not there is a transfer
    in progress at the point in time when the device is ready to STALL the pipe.

    6.5 Host Error Handling

    If the host receives a CSW which is not valid,
    then the host shall perform a Reset Recovery. 

    If the host receives a CSW which is not meaningful,
    then the host may perform a Reset Recovery.

    6.6 Error Classes

    In every transaction between the host and the device,
    there are four possible classes of errors. 
    These classes are not always independent of each other
    and may occur at any time during the transaction.

    6.6.1 CBW Not Valid

    If the CBW is not valid, the device shall STALL the Bulk-In pipe. 
    Also, the device shall either STALL the Bulk-Out pipe, 
    or the device shall accept and discard any Bulk-Out data. 
    The device shall maintain this state until a Reset Recovery.

    6.6.2 Internal Device Error
    The device may detect an internal error for
    which it has no reliable means of recovery other than a reset. 
    The device shall respond to such conditions by:
    either STALLing any data transfer in progress and returning a Phase Error status (bCSWStatus = 02h).
    or STALLing all further requests on the Bulk-In and the Bulk-Out pipes until a Reset Recovery.

    6.6.3 Host/Device Disagreements

    After recognizing that a CBW is valid and meaningful, ( != 6.6.1 CBW Not Valid )
    and in the absence of internal errors, ( != 6.6.2 Internal Device Error )

    the device may detect a condition where it cannot meet
    the host’s expectation for data transfer, 
    as indicated by the Direction bit of the bmCBWFlags field
    and the dCBWDataTransferLength field of the CBW. 

    In some of these cases, the device may require a reset to recover. 
    In these cases, the device shall return Phase Error status (bCSWStatus = 02h). 
    Details on which cases result in Phase Error vs. non-Phase Error status
    are given in 6.7 The Thirteen Cases.

    6.6.4 Command Failure

    After recognizing that a CBW is valid and meaningful, 
    the device may still fail in its attempt to satisfy the command. 
    The device shall report this condition by
    returning a Command Failed status (bCSWStatus = 01h).


    6.7 The Thirteen Cases

    This section describes the thirteen possible cases of host expectations
    and device intent in the absence of overriding error conditions. 

    Table 6.1 – Host/Device Data Transfer Matrix graphically displays these thirteen cases.

    Important notes about the thirteen cases.

    · Cases (1), (6) and (12) represent the majority of host and device transactions. 
    They indicate those conditions where the host and device agree as to the direction 
    and amount of data to be transferred. These cases are also referred to as “the thin diagonal.”

    · Any host or device behavior not specifically outlined in the following sections 
    shall be considered outside this specification and the results are indeterminate.

    6.7.1 Hn - Host expects no data transfers : Case (1), (2), (3)

    These cases occur when dCBWDataTransferLength is zero. This indicates that 
    the host is not expecting to send or receive any data to or from the device.

    The specific host requirements are:

    1. The host shall send a valid and meaningful CBW.
    2. The host shall attempt to receive a CSW.
    3. On a STALL condition receiving the CSW, then:
    ( 6.6.1 CBW Not Valid ) or ( 6.6.2 Internal Device Error )

       · The host shall clear the Bulk-In pipe.
       · The host shall attempt to receive the CSW again.
    4. When the CSW is valid and meaningful, then:

    · [Case (1)] The bCSWStatus = 00h or 01h, and the dCSWDataResidue is 0.
      ( 6.6.4 Command Failure )
      send next a valid and meaningful CBW.

    · [Case (2) or (3)] If bCSWStatus = 02h, then:
      ( 6.6.3 Host/Device Disagreements )


    The host shall Ignore the value of the dCSWDataResidue.
    The host shall Perform a Reset Recovery.

    The specific device requirements are:

    1. The device shall receive a CBW.
    2. When the CBW is not valid and meaningful 6.6.1 CBW Not Valid )
    · else The device shall attempt the command.

    [Case (1)]
    If the device had no data to send or receive, then:
    The device shall set bCSWStatus to 00h or 01h.
    The device shall set the dCSWDataResidue to 0.

    · [Case (2) or (3)]   ( 6.6.3 Host/Device Disagreements )
    If the device did have data to send or receive, then:
    The device shall set bCSWStatus to 02h. ( may STALL the Bulk-In pipe )

    3. The device shall return a valid and meaningful CSW.
    · The device may STALL the Bulk-In pipe if bCSWStatus is not 00h or 01h.

    6.7.2 Hi - Host expects to receive data from the device : Case 4, 5, ,6, 7, 8

    These cases occur when dCBWDataTransferLength is non zero
    and the Direction bit is 1 (Data-In). This indicates that
    the host is expecting to receive data from the device.

    The specific host requirements are:

    1. The host shall send a valid and meaningful CBW.

    2. The host shall attempt to receive data from the device.
    3. On a STALL condition receiving data, then: ( data xfer end, Hi != Di )
       The host shall accept the data received.
       The host shall clear the Bulk-In pipe. ( to receive a CSW )

    4. The host shall attempt to receive a CSW.
    5. On a STALL condition receiving the CSW, then:
       The host shall clear the Bulk-In pipe.
       The host shall again attempt to receive the CSW.

    6. When the CSW is valid and meaningful, then:

    · [Case (4), (5), or (6)]
    If bCSWStatus = 00h or 01h, then:
    The host shall determine the amount of relevant data received
    from the difference between dCBWDataTransferLength
    and the value of dCSWDataResidue.

    · [Case (7) or (8)]
    If bCSWStatus = 02h, then:
    The host shall ignore the value of the dCSWDataResidue.
    The host shall perform a Reset Recovery.

    The specific device requirements are:

    1. The device shall receive a CBW.
    2. When the CBW is valid and meaningful, then:
    · The device shall attempt the command.

    · [Case (6)]
    If the device intends to send dCBWDataTransferLength, then:
    The device shall send dCBWDataTransferLength bytes of data.
    The device shall set bCSWStatus to 00h or 01h.
    The device shall set dCSWDataResidue to zero.

    · [Case (4) or (5) ] Hi > Dn, Hi > Di
    If the device intends to send less data than the host indicated, then:
    The device shall send the intended data.
    The device may send fill data to pad up to a total of dCBWDataTransferLength.

    If the device actually transfers less data than the host indicated, then:
    The device may end the transfer with a short packet.
    The device shall STALL the Bulk-In pipe.
    The device shall set bCSWStatus to 00h or 01h.
    The device shall set dCSWDataResidue to the difference
    between dCBWDataTransferLength and the actual amount of relevant data sent.

    · [Case (7) or (8)]
    If the device either intends to send more data than the host indicated
    or intends to receive data from the host, then:

    The device may send data up to a total of dCBWDataTransferLength.
    If the device actually transfers less data than the host indicated, then:
    The device may end the transfer with a short packet.
    The device shall STALL the Bulk-In pipe.

    If the device actually transfers dCBWDataTransferLength then:
    The device may STALL the Bulk-In pipe.
    The device shall set bCSWStatus to 02h.
    3. The device shall return a valid and meaningful CSW.


    6.7.3 Ho - Host expects to send data to the device, Case 9, 10, 11, 12, 13


    These cases occur when dCBWDataTransferLength is non zero
    and the Direction bit is 0 (Data-Out).
    This indicates that the host is expecting to send data to the device.


    The general requirement of these cases is:

    · The host shall not send zero length packets.


    The specific host requirements are:

    1. The host shall send a valid and meaningful CBW.
    2. The host shall send data to the device.
    · The host shall send a short packet only at the end of the data transfer.

    3. On a STALL condition sending data, then: ( Ho > Do ), ( Ho > Dn )
    · The host shall clear the Bulk-Out pipe.

    4. The host shall attempt to receive a CSW.
    5. On a STALL condition receiving the CSW, then:
    · The host shall clear the Bulk-In pipe.
    · The host shall again attempt to receive the CSW.

    6. When the CSW is valid and meaningful, then:

    · [Case (9), (11), or (12)]
    If bCSWStatus = 00h or 01h, then:
    The host shall determine the amount of data
    that was processed from the difference of
    dCBWDataTransferLength and the value of dCSWDataResidue.

    · [Case (10) or (13)]
    If bCSWStatus = 02h, then:
    The host shall ignore the value of the dCSWDataResidue.
    The host shall perform a Reset Recovery.


    The specific device requirements are:


    1. The device shall receive a CBW.
    2. When the CBW is valid and meaningful, then:
    · The device shall attempt the command.

    · [Case (9), (11), or (12)]
    If the device intends to process less than or
    equal to the amount of data that the host indicated, then:
    The device shall receive the intended data.
    The device shall either accept a total of dCBWDataTransferLength, (Ho = Do)
    or end the transfer prematurely by STALLing the Bulk-Out pipe. (Ho > Do), (Ho > Dn)

    The device shall set bCSWStatus to 00h or 01h.
    The device shall set dCSWDataResidue to the difference
    between dCBWDataTransferLength and the actual amount of data
    that was processed by the device.

    · [Case (10) or (13)]  (Ho <> Di), (Ho < Do)
    If the device either intends to process more data than the host indicated
    or intends to send data, then:

    The device may receive data up to a total of dCBWDataTransferLength.
    The device shall either accept a total of dCBWDataTransferLength,
    or end the transfer prematurely by STALLing the Bulk-Out pipe.
    The device shall set bCSWStatus to 02h.

    3. The device shall return a valid and meaningful CSW.
    · The device may STALL the Bulk-In pipe if bCSWStatus is not 00h or 01h.

  • 相关阅读:
    软件测试之魂:核心测试设计精解
    测试的第一重境界:围着Bug转
    理想运算放大器的性质
    MATLAB脚本显示滤波器系数
    matlab中用转义符来输入希腊字母的方法
    Linux中Matlab安装总结
    在ubuntu下阅读chm文件的四种方法(转)
    ARM是不是单片机
    日本人的英文名字
    WAV格式音乐
  • 原文地址:https://www.cnblogs.com/shangdawei/p/3164144.html
Copyright © 2011-2022 走看看