801
SAM9G45 [DATASHEET]
6438K–ATARM–12-Feb-13
High Speed devices must support an improved NAK mechanism for Bulk OUT and control endpoints (except setup
stage). This mechanism allows the device to tell the host whether it has sufficient endpoint space for the next OUT
transfer (see USB 2.0 spec 8.5.1 NAK Limiting via Ping Flow Control).
The NYET/ACK response to a High Speed Bulk OUT transfer and the PING response are automatically handled by
hardware in the UDPHS_EPTCTLx register (except when the user wants to force a NAK response by using the
NYET_DIS bit).
If the endpoint responds instead to the OUT/DATA transaction with an NYET handshake, this means that the end-
point accepted the data but does not have room for another data payload. The host controller must return to using
a PING token until the endpoint indicates it has space available.
Figure 38-7. NYET Example with Two Endpoint Banks
38.5.8.3
Data IN
38.5.8.4
Bulk IN or Interrupt IN
Data IN packets are sent by the device during the data or the status stage of a control transfer or during an (inter-
rupt/bulk/isochronous) IN transfer. Data buffers are sent packet by packet under the control of the application or
under the control of the DMA channel.
There are three ways for an application to transfer a buffer in several packets over the USB:
38.5.8.5
Bulk IN or Interrupt IN: Sending a Packet Under Application Control (Device to Host)
The application can write one or several banks.
A simple algorithm can be used by the application to send packets regardless of the number of banks associated to
the endpoint.
Algorithm Description for Each Packet:
The application waits for TX_PK_RDY flag to be cleared in the UDPHS_EPTSTAx register before it can perform
a write access to the DPR.
The application writes one USB packet of data in the DPR through the 64 Kbyte endpoint logical memory
window.
The application sets TX_PK_RDY flag in the UDPHS_EPTSETSTAx register.
The application is notified that it is possible to write a new packet to the DPR by the TX_PK_RDY interrupt. This
interrupt
can
be
enabled
or
masked
by
setting
the
TX_PK_RDY
bit
in
the
UDPHS_EPTCTLENB/UDPHS_EPTCTLDIS register.
t = 0
t = 125 μs
t = 250 μs
t = 375 μs
t = 500 μs
t = 625 μs
data 0 ACK
data 1 NYET
PING
ACK
data 0 NYET
PING
NACK
PING
ACK
Bank 1
Bank 0
Bank 1
Bank 0
Bank 1
Bank 0
Bank 1
Bank 0
Bank 1
Bank 0
Bank 1
Bank 0
Bank 1
E
F
E
F
E'
F
E
F
E'
F
E
F
E: empty
E': begin to empty
F: full