
Chapter 8. Access to Endpoint Buffers Page 8-15
PING
PING is the “flip side” of IBN; it’s used for high speed (480 Mbits/sec) BULK OUT transfers.
When operating at full speed (USB 1.1 spec), every host OUT transfer consists of the OUT PID
and the endpoint data, even if the endpoint is NAKing (not ready). While the endpoint is not ready,
the host repeatedly sends all the OUT data; if it’s repeatedly NAK’d, bus bandwidth is wasted.
USB 2.0 introduced a new mechanism, called PING, that makes better use of bus bandwidth for
“unready” BULK OUT endpoints.
At high speed (USB 2.0 spec), the host can “ping” a BULK OUT endpoint to determine if it is ready
to accept data, holding off the OUT data transfer until it can actually be accepted. The host sends
a PING token, and the FX2 responds with:
• An ACK to indicate that there is space in the OUT endpoint buffer
• A NAK to indicate “not ready, try later”.
The PING interrupts indicate that an FX2 BULK OUT endpoint returned a NAK in response to a
PING.
PING only applies at high speed (480 Mbits/sec).
Unlike the IBN bits, which are combined into a single IBN interrupt for all endpoints, each BULK
OUT endpoint has a separate interrupt (EP0PING, EP1PING, EP2PING, ...., EP8PING). Interrupt-
enables for the individual interrupts are in the NAKIE register; the interrupt-requests are in the
NAKIRQ register.
The interrupt service routine for the PING interrupts should perform the following steps, in the
order shown:
1. Clear the INT2 interrupt request.
2. Take the action for the requesting endpoint.
3. Clear the appropriate EPxPING bit for the endpoint.
8.6.3.2 EPIE, EPIRQ
These registers are used to manage interrupts from the FX2 endpoints. In general, an interrupt
request is asserted whenever the following occurs:
• An IN endpoint buffer becomes available for the CPU to load.
• An OUT endpoint has new data for the CPU to read.
Komentarze do niniejszej Instrukcji