More about STALL

22 Mar

More about STALL
The mass-storage class is unique in its use of the STALL handshake to end bulk transfers. In other USB classes, a sender can indicate the end of a transfer by transmitting a short packet, which is a data packet that contains zero data bytes or any quantity fewer than wMaxPacketSize. In contrast, mass-storage devices use STALL for this purpose and to respond to other error conditions.

After a bulk endpoint returns STALL, the endpoint is in the halt condition. To resume communications with the endpoint, the host must issue a Clear
Feature(ENDPOINT_HALT) control request with the endpoint’s address in the Setup transaction’s wIndex field.

(Endpoint zero can also use the STALL handshake. On receiving a Get Max LUN request, a device with a single LUN may return a STALL to indicate
that the device doesn’t support the command. The endpoint resumes normal operation on receiving a new Setup transaction.)

A mass-storage device must stall one or both bulk endpoints in these situations:

If a device sends less than the requested amount of data in the data-transport phase, the device must stall the bulk IN endpoint.

If a received CBW isn’t valid, the device must stall the bulk IN endpoint and must either stall the bulk OUT endpoint or accept and discard any received data on the endpoint.

On experiencing an internal error that requires a reset, a device must either stall the endpoint being used in any data transfer in progress and set bCSWStatus = 02h or stall the bulk IN and bulk OUT endpoints until a reset recovery.

A mass-storage device may stall a bulk endpoints in these situations:
If a device expects to send more data than the host specified in the CBW, after sending the requested quantity of data, the device may stall the bulk IN endpoint.

If a device expects to receive a different quantity of data than the host specified in the CBW, the device may stall the bulk OUT endpoint.

If a device determinines that it can’t complete a command during the data-transport phase, the device may stall the bulk IN or bulk OUT endpoint as appropriate.

The thirteen cases described below have more about the use of STALL with mass-storage commands.

Thirteen Cases for Any Situation
The mass-storage bulk-only transport specification spells out how the host and device should behave after the host sends a command in each of thirteen cases. Cases 1, 6, and 12 (in bold) are the normal cases, where the host and device each expect the same quantity and direction of data transfer in the data-transport phase. The other cases are situations where the host and device have differing expectations.

1. The host expects no data-transport phase. The device expects no data-transport phase.
2. The host expects no data-transport phase. The device expects to send data.
3. The host expects no data-transport phase. The device expects to receive data.
4. The host expects to receive data. The device expects no data-transport phase.
5. The host expects to receive data. The device expects to send less data than the host intends to receive.
6. The host expects to receive data. The device expects to send the exact amount of data the host intends to receive.
7. The host expects to receive data. The device intends to send more data than the host expects to receive.
8. The host expects to receive data. The device expects to receive data.
9. The host expects to send data. The device expects no data-transport phase.
10. The host expects to send data. The device expects to send data.
11. The host expects to send data. The device expects to receive less data than the host intends to send.
12. The host expects to send data. The device expects to receive the exact amount of data the host intends to send.
13. The host expects to send data. The device expects to receive more data than the host intends to send.

The following sections summarize the device’s behavior in each of the 13 cases.

Random Posts

No comments yet

Leave a Reply

You must be logged in to post a comment.