201
7799D–AVR–11/10
ATmega8U2/16U2/32U2
21.10 Remote Wake-up
The Remote Wake-up (or upstream resume) request is the only operation allowed to be sent by
the device on its own initiative. Anyway, to do that, the device should first have received a
DEVICE_REMOTE_WAKEUP request from the host.
First, the USB controller must have detected the “suspend” state of the line: the remote
wake-up can only be sent if the SUSPI bit is set.
The firmware has then the ability to set RMWKUP to send the “upstream resume” stream.
This will automatically be done by the controller after 5ms of inactivity on the USB line.
When the controller starts to send the “upstream resume”, the UPRSMI flag is set and
interrupt is triggered (if enabled). If SUSPI was set, SUSPI is cleared by hardware.
RMWKUP is automatically cleared by hardware at the end of the “upstream resume”.
After that, if the controller detects a good “End Of Resume” signal from the host, an EORSMI
interrupt is triggered (if enabled).
21.11 STALL request
For each endpoint, the STALL management is performed using 2 bits:
– STALLRQ (enable stall request)
– STALLRQC (disable stall request)
– STALLEDI (stall sent interrupt)
To send a STALL handshake at the next request, the STALLRQ request bit has to be set. All fol-
lowing requests will be handshak’ed with a STALL until the STALLRQC bit is set.
Setting STALLRQC automatically clears the STALLRQ bit. The STALLRQC bit is also immedi-
ately cleared by hardware after being set by software. Thus, the firmware will never read this bit
as set.
Each time the STALL handshake is sent, the STALLEDI flag is set by the USB controller and the
EPINTx interrupt will be triggered (if enabled).
The incoming packets will be discarded (RXOUTI and RWAL will not be set).
The host will then send a command to reset the STALL: the firmware just has to set the STALL-
RQC bit and to reset the endpoint.
21.11.1
Special consideration for Control Endpoints
A SETUP request is always ACK’ed.
If a STALL request is set for a Control Endpoint and if a SETUP request occurs, the SETUP
request has to be ACK’ed and the STALLRQ request and STALLEDI sent flags are automati-
cally reset (RXSETUPI set, TXIN cleared, STALLED cleared, TXINI cleared...).
This management simplifies the enumeration process management. If a command is not sup-
ported or contains an error, the firmware set the STALL request flag and can return to the main
task, waiting for the next SETUP request.
This function is compliant with the Chapter 8 test that sends extra status for a
GET_DESCRIPTOR. The firmware sets the STALL request just after receiving the status. All
extra status will be automatically STALL’ed until the next SETUP request.