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 />

transmit a few maximum-packet-size packets and a short packet at the end of the<br />

transfer, the following conditions must be met:<br />

transfer size[EPNUM] = x × MPSIZ[EPNUM] + sp<br />

(where x is an integer ≥ 0, and 0 ≤ sp < MPSIZ[EPNUM])<br />

If (sp > 0), packet count[EPNUM] = x + 1<br />

Otherwise, packet count[EPNUM] = x;<br />

MCNT[EPNUM] = packet count[EPNUM]<br />

– The application cannot transmit a zero-length data packet at the end of a transfer.<br />

It can transmit a single zero-length data packet by itself. To transmit a single zerolength<br />

data packet:<br />

– transfer size[EPNUM] = 0<br />

packet count[EPNUM] = 1<br />

MCNT[EPNUM] = packet count[EPNUM]<br />

2. The application can only schedule data transfers one frame at a time.<br />

– (MCNT – 1) × MPSIZ ≤ XFERSIZ ≤ MCNT × MPSIZ<br />

– PKTCNT = MCNT (in OTG_HS_DIEPTSIZx)<br />

– If XFERSIZ < MCNT × MPSIZ, the last data packet of the transfer is a short<br />

packet.<br />

– Note that: MCNT is in OTG_HS_DIEPTSIZx, MPSIZ is in OTG_HS_DIEPCTLx,<br />

PKTCNT is in OTG_HS_DIEPTSIZx and XFERSIZ is in OTG_HS_DIEPTSIZx<br />

3. The complete data to be transmitted in the frame must be written into the transmit FIFO<br />

by the application, before the IN token is received. Even when 1 DWORD of the data to<br />

be transmitted per frame is missing in the transmit FIFO when the IN token is received,<br />

the core behaves as when the FIFO is empty. When the transmit FIFO is empty:<br />

– A zero data length packet would be transmitted on the USB for isochronous IN<br />

endpoints<br />

– A NAK handshake would be transmitted on the USB for interrupt IN endpoints<br />

4. For a high-bandwidth IN endpoint with three packets in a frame, the application can<br />

program the endpoint FIFO size to be 2 × max_pkt_size and have the third packet<br />

loaded in after the first packet has been transmitted on the USB.<br />

Internal data flow:<br />

1. The application must set the transfer size and packet count fields in the endpointspecific<br />

registers and enable the endpoint to transmit the data.<br />

2. The application must also write the required data to the associated transmit FIFO for<br />

the endpoint.<br />

3. Every time the application writes a packet to the transmit FIFO, the transfer size for that<br />

endpoint is decremented by the packet size. The data are fetched from application<br />

memory until the transfer size for the endpoint becomes 0.<br />

4. When an IN token is received for a periodic endpoint, the core transmits the data in the<br />

FIFO, if available. If the complete data payload (complete packet, in dedicated FIFO<br />

mode) for the frame is not present in the FIFO, then the core generates an IN token<br />

received when TxFIFO empty interrupt for the endpoint.<br />

– A zero-length data packet is transmitted on the USB for isochronous IN endpoints<br />

– A NAK handshake is transmitted on the USB for interrupt IN endpoints<br />

5. The packet count for the endpoint is decremented by 1 under the following conditions:<br />

Doc ID 018909 Rev 3 1302/1416

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

Saved successfully!

Ooh no, something went wrong!