USB has four transfer types depending on the data. They are called Control, Bulk, Interrupt, and Isochronous types.
USB devices have two transfer mode types: bulk is used for mass storage devices like an external USB hard drive, and isochronous is used for real-time devices like a USB webcam or capture card.
Maximum packet size of a bulk endpoint depends on the bus speed of the device. For full speed, high speed, and SuperSpeed; the maximum packet sizes are 64, 512, and 1024 bytes respectively.
USB Full speed has a speed of 12 MBit/second = 1,5 MByte/s. But within these 12 MBit also a lot of extra data is transmitted which is not payload, like , endpoint address, CRC5, CRC16, Acknowledge, SOF + EOF packets, etc.. Additionally the bus manager reserves 10% of a frame for Control Transfers.
Bulk Transfers. Bulk Transfers are used for data which are not of the type Control, Interrupt, or Isochronous. Reliable exchange of data is ensured at the hardware level using error detection. Data are transferred in the same manner as in Interrupt Transfers, but have no defined polling rate.
For low-speed devices up to 8 bytes. For full-speed devices, up to 64 bytes. For high-speed, high-bandwidth devices, the app can send or receive more than maximum packet size up to 3072 bytes per microframe. Interrupt endpoints on SuperSpeed devices are capable of transmitting even more number of bytes.
Most USB 2 users report that they can only reach about 30MB/sec between the computer and a USB device, even though the USB 2 specification claims to support 480Mb/sec (or 60MB/sec) transfers. However, in practice the maximum transfer limit will usually be constrained by the USB 2 device itself.
Each USB transfer is one packet, which can be up to 64 bytes if using bulk type. If you want to send more than 64 bytes, you have to use multiple packets.