Section 20 USB Function Module
Rev. 4.00 Sep. 14, 2005 Page 770 of 982
REJ09B0023-0400
Data Stage (Control-IN): The application first analyzes command data from the host in the setup
stage, and determines the subsequent data stage direction. If the result of command data analysis is
that the data stage is in-transfer, one packet of data to be sent to the host is written to the FIFO. If
there is more data to be sent, this data is written to the FIFO after the data written first has been
sent to the host (USBIFR0/EP0iTS = 1).
The end of the data stage is identified when the host transmits an OUT token and the status stage
is entered.
USB function
Application
IN token reception
Data transmission to host
Set EP0i transmission
complete flag
(USBIFR0/EP0i TS = 1)
From setup stage
Write data to USBEP0i
data register (USBEPDR0i)
Write 1 to EP0i packet
enable bit
(USBTRG/EP0i PKTE = 1)
Clear EP0i transmission
complete flag
(USBIFR0/EP0i TS = 0)
Write 1 to EP0i packet
enable bit
(USBTRG/EP0i PKTE = 1)
Write data to USBEP0i
data register (USBEPDR0i)
1 written
to USBTRG/EP0s
RDFN?
Valid data
in EP0i FIFO?
NACK
NACK
No
No
Yes
Yes
ACK
Interrupt request
Figure 20.6 Data Stage (Control-IN) Operation
Note: If the size of the data transmitted by the function is smaller than the data size requested by
the host, the function indicates the end of the data stage by returning to the host a packet
shorter than the maximum packet size. If the size of the data transmitted by the function is
an integral multiple of the maximum packet size, the function indicates the end of the data
stage by transmitting a zero-length packet.