I'm running my LPC1758 as a USB device and sending data to the host over a bulk IN endpoint and an interrupt IN endpoint. In both cases the length of the data I'm sending is equal to the maximum packet size of the endpoint.
The user manual states that:
If the last buffer length completes on a MaxPacketSize packet boundary, the device software must program the next DD with DMA_buffer_length field 0, so that an empty packet is sent by the device to mark the end of the USB transfer for the host.
The weird thing is on the bulk endpoint these empty DMA descriptors will have their status set to retired, the interrupt endpoint doesn't retire them.
I've managed to fudge the code together to get everything working, just wondered if anyone understood why this is happening?