09.12.2012 Views

RM0090: Reference manual - STMicroelectronics

RM0090: Reference manual - STMicroelectronics

RM0090: Reference manual - STMicroelectronics

SHOW MORE
SHOW LESS

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

<strong>RM0090</strong> USB on-the-go high-speed (OTG_HS)<br />

6. The OUT data transfer completed pattern for an OUT endpoint is written to the receive<br />

FIFO on one of the following conditions:<br />

– The transfer size is 0 and the packet count is 0<br />

– The last OUT data packet written to the receive FIFO is a short packet<br />

(0 ≤ packet size < maximum packet size)<br />

7. When either the application pops this entry (OUT data transfer completed), a transfer<br />

completed interrupt is generated for the endpoint and the endpoint enable is cleared.<br />

Application programming sequence:<br />

1. Program the OTG_HS_DOEPTSIZx register for the transfer size and the corresponding<br />

packet count.<br />

2. Program the OTG_HS_DOEPCTLx register with the endpoint characteristics, and set<br />

the EPENA and CNAK bits.<br />

– EPENA = 1 in OTG_HS_DOEPCTLx<br />

– CNAK = 1 in OTG_HS_DOEPCTLx<br />

3. Wait for the RXFLVL interrupt (in OTG_HS_GINTSTS) and empty the data packets<br />

from the receive FIFO.<br />

– This step can be repeated many times, depending on the transfer size.<br />

4. Asserting the XFRC interrupt (OTG_HS_DOEPINTx) marks a successful completion of<br />

the nonisochronous OUT data transfer.<br />

5. Read the OTG_HS_DOEPTSIZx register to determine the size of the received data<br />

payload.<br />

● Generic isochronous OUT data transfer<br />

This section describes a regular isochronous OUT data transfer.<br />

Application requirements:<br />

1. All the application requirements for nonisochronous OUT data transfers also apply to<br />

isochronous OUT data transfers.<br />

2. For isochronous OUT data transfers, the transfer size and packet count fields must<br />

always be set to the number of maximum-packet-size packets that can be received in a<br />

single frame and no more. Isochronous OUT data transfers cannot span more than 1<br />

frame.<br />

3. The application must read all isochronous OUT data packets from the receive FIFO<br />

(data and status) before the end of the periodic frame (EOPF interrupt in<br />

OTG_HS_GINTSTS).<br />

4. To receive data in the following frame, an isochronous OUT endpoint must be enabled<br />

after the EOPF (OTG_HS_GINTSTS) and before the SOF (OTG_HS_GINTSTS).<br />

Internal data flow:<br />

1. The internal data flow for isochronous OUT endpoints is the same as that for<br />

nonisochronous OUT endpoints, but for a few differences.<br />

2. When an isochronous OUT endpoint is enabled by setting the Endpoint Enable and<br />

clearing the NAK bits, the Even/Odd frame bit must also be set appropriately. The core<br />

receives data on an isochronous OUT endpoint in a particular frame only if the<br />

following condition is met:<br />

– EONUM (in OTG_HS_DOEPCTLx) = SOFFN[0] (in OTG_HS_DSTS)<br />

3. When the application completely reads an isochronous OUT data packet (data and<br />

status) from the receive FIFO, the core updates the RXDPID field in<br />

Doc ID 018909 Rev 3 1294/1416

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!