ST STM32L4x6 Reference Manual page 1633

Table of Contents

Advertisement

RM0351
handshake, the packet count for the endpoint is decremented by one, until the packet
count is zero. The packet count is not decremented on a timeout.
5.
For zero length packets (indicated by an internal zero length flag), the core sends out a
zero-length packet for the IN token and decrements the packet count field.
6.
If there are no data in the FIFO for a received IN token and the packet count field for
that endpoint is zero, the core generates an "IN token received when Tx FIFO is empty"
(ITTXFE) Interrupt for the endpoint, provided that the endpoint NAK bit is not set. The
core responds with a NAK handshake for non-isochronous endpoints on the USB.
7.
The core internally rewinds the FIFO pointers and no timeout interrupt is generated.
8.
When the transfer size is 0 and the packet count is 0, the transfer complete (XFRC)
interrupt for the endpoint is generated and the endpoint enable is cleared.
Application programming sequence:
1.
Program the OTG_DIEPTSIZx register with the transfer size and corresponding packet
count.
2.
Program the OTG_DIEPCTLx register with the endpoint characteristics and set the
CNAK and EPENA (Endpoint Enable) bits.
3.
When transmitting non-zero length data packet, the application must poll the
OTG
to determine whether there is enough space in the data FIFO. The application can
optionally use TXFE (in OTG_DIEPINTx) before writing the data.
Generic periodic IN data transfers
This section describes a typical periodic IN data transfer.
Application requirements:
1.
Application requirements 1, 2, 3, and 4 of
page 1632
requirement 2.
2.
The application can only schedule data transfers one frame at a time.
DTXFSTSx register (where x is the FIFO number associated with that endpoint)
_
also apply to periodic IN data transfers, except for a slight modification of
The application can only transmit multiples of maximum-packet-size data packets
or multiples of maximum-packet-size packets, plus a short packet at the end. To
transmit a few maximum-packet-size packets and a short packet at the end of the
transfer, the following conditions must be met:
transfer size[EPNUM] = x × MPSIZ[EPNUM] + sp
(where x is an integer ≥ 0, and 0 ≤ sp < MPSIZ[EPNUM])
If (sp > 0), packet count[EPNUM] = x + 1
Otherwise, packet count[EPNUM] = x;
MCNT[EPNUM] = packet count[EPNUM]
The application cannot transmit a zero-length data packet at the end of a transfer.
It can transmit a single zero-length data packet by itself. To transmit a single zero-
length data packet:
transfer size[EPNUM] = 0
packet count[EPNUM] = 1
MCNT[EPNUM] = packet count[EPNUM]
(MCNT – 1) × MPSIZ ≤ XFERSIZ ≤ MCNT × MPSIZ
PKTCNT = MCNT (in OTG_DIEPTSIZx)
DocID024597 Rev 3
USB on-the-go full-speed (OTG_FS)
Generic non-periodic IN data transfers on
1633/1693
1644

Advertisement

Table of Contents
loading
Need help?

Need help?

Do you have a question about the STM32L4x6 and is the answer not in the manual?

Questions and answers

Subscribe to Our Youtube Channel

Table of Contents

Save PDF