Patent ID: 8402180

Claim:
A method of multi-packet data transfer on a Universal Serial Bus (USB), comprising: receiving a setup request from a USB host to read data from an endpoint in a USB device; determining a maximum data packet size for the endpoint, wherein the maximum data packet size is less than an amount of data to be read from the endpoint; determining a number of packets needed for the data transfer based on the amount of data to be read by the USB host and the maximum data packet size; receiving a first token packet from the USB host, wherein the first token packet requests a first data packet; responsive to the first token packet, transferring the first data packet to the USB host using a USB device controller, where the transferring occurs without interrupting a Central Processing Unit (CPU), the transferring comprising: providing a control signal to a memory arbiter to access the data to be read from a buffer of the endpoint; accessing the data based on a start address provided by the CPU; and providing the first data packet based on the accessed data; during processing of the setup request by the USB device controller, receiving and accepting a second token packet from the USB host requesting a second data packet transfer, wherein receiving the second token packet occurs without interrupting the CPU and prevents transmission of NAK packets; and after transferring the number of packets needed for the data transfer, generating an interrupt for the CPU.