Hi, The AT91 USB driver is sending an empty packet at the end of a data transfer (transfer from device to host) if the last fragment of the packet is exactly equal to the endpoint size. Is this part of the USB specification? In my case, this is triggering a reset from the host (both Linux or Win). Not sending the empty packet fixes the problem. The transfer is 512 bytes sent in two USB data packet.
As anyone experienced such an issue? Christophe ------------------------------- if (BITS_ARE_CLEARED (pCSR, AT91_UDP_CSR_TXPKTRDY)) { /* Ready to transmit ? */ if (*ppend > *ppbegin) { /* Something to send */ space = (cyg_uint32) * ppend - (cyg_uint32) * ppbegin; if (space == endpoint_size) { *ppend = *ppbegin; /* Send zero-packet */ } *ppbegin = write_fifo_uint8 (pFDR, *ppbegin, (cyg_uint8 *) ((cyg_uint32) * ppbegin + MIN (space, endpoint_size))); SET_BITS (pCSR, AT91_UDP_CSR_TXPKTRDY); if (*ppend == *ppbegin) { /* Last packet ? */ *ppend = *ppbegin - 1; /* The packet isn't sent yet */ } } else { if (*ppend + 1 == *ppbegin) { *ppend = *ppbegin; /* Flag for DSR */ return true; } else { *ppend = *ppbegin - 1; /* Flag for zero-packet */ SET_BITS (pCSR, AT91_UDP_CSR_TXPKTRDY); /* Send no data */ } } } ------------------------------- -- Before posting, please read the FAQ: http://ecos.sourceware.org/fom/ecos and search the list archive: http://ecos.sourceware.org/ml/ecos-discuss