USB on-the-go high-speed (OTG_HS)
Examples
This section describes and depicts some fundamental transfer types and scenarios.
●
Slave mode bulk OUT transaction
Figure 397
and describes the events involved in the process.
Figure 397. Slave mode bulk OUT transaction
Host
After a SetConfiguration/SetInterface command, the application initializes all OUT endpoints
by setting CNAK = 1 and EPENA = 1 (in OTG_HS_DOEPCTLx), and setting a suitable
XFRSIZ and PKTCNT in the OTG_HS_DOEPTSIZx register.
1.
Host attempts to send data (OUT token) to an endpoint.
2.
When the core receives the OUT token on the USB, it stores the packet in the RxFIFO
because space is available there.
3.
After writing the complete packet in the RxFIFO, the core then asserts the RXFLVL
interrupt (in OTG_HS_GINTSTS).
4.
On receiving the PKTCNT number of USB packets, the core internally sets the NAK bit
for this endpoint to prevent it from receiving any more packets.
5.
The application processes the interrupt and reads the data from the RxFIFO.
6.
When the application has read all the data (equivalent to XFRSIZ), the core generates
an XFRC interrupt (in OTG_HS_DOEPINTx).
7.
The application processes the interrupt and uses the setting of the XFRC interrupt bit
(in OTG_HS_DOEPINTx) to determine that the intended transfer is complete.
1301/1422
depicts the reception of a single Bulk OUT Data packet from the USB to the AHB
USB
Device
2
3
512 bytes
xact _1
5
7
Doc ID 018909 Rev 4
Application
init_ out_ ep
1
wr_reg (DOEPTSIZx)
wr_reg(D OEPCTLx)
4
6
RXFLVL intr
i
idle until intr
rcv_out _pkt()
idle until intr
8
RM0090
XFRSIZ = 512 bytes
PKTCNT = 1
EPENA = 1
CNAK = 1
On new xfer
or RxFIFO
not empty
ai15679
Need help?
Do you have a question about the STM32F40 Series and is the answer not in the manual?
Questions and answers