USB Transactions
13-75
USB Function Module
Successful completion of non-autodecoded control read transfers is indicated
by the host sending an OUT token followed by an empty packet and the USB
function module responding with ACK. If the data packet sent by the USB host
during the status stage of a control read request is not empty, the OUT trans-
action is accepted by the core, but OUT data is not put into the endpoint 0 RX
FIFO. If the status packet has a DATA0 PID instead of a DATA1 PID, a STALL
is returned by the core, and an interrupt is asserted.
Non-Autodecoded Control Read Transfer Error Conditions
If an error occurs that the local host cannot handle itself while handling the con-
trol read, the local host must signal STALL to the USB host for all subsequent
transactions until a new setup token to endpoint 0 occurs. This is true for both
data stage and status stage transactions. This is most conveniently done by
setting endpoint 0’s Stall_Cmd bit, which causes stalling of all the remaining
transactions of all remaining stages of a non-autodecoded control transfer, up
to the reception of the next valid SETUP command.
Error conditions are handled as for bulk/interrupt transactions. The USB func-
tion module responds to control read status stage transactions that have a bad
token or bad data by not sending a handshake packet. In both cases, the trans-
action is ignored and no general USB interrupt is generated to the local host.
13.3.5.5
Autodecoded Versus Non-Autodecoded Control Requests
Table 13–25. Autodecoded Versus Non-Autodecoded Control Requests
Request
Recipient
Status
LH Required Action
Device Behavior if
Device not Configured
GET_
STATUS
Device
Autodecoded
None
Device status is returned
(the Self_Pwr and
R_WK_OK
bits).
Interface
Non-autode-
coded
The local host must stall the
command (via the Stall_
Cmd bit) if interface number is
not correct. No feature is
defined for interface.
Command is passed to the
local host.
Endpoint
Autodecoded
None
The core automatically
stalls the command if end-
point number is different
from 0.