dencorso, on 16 Jun 2014 - 10:24 AM, said:
The standard talks about 480 Mb/s, which could be 60 MB/s (or 48 MB/s in case a 8-in-10 bit encoding is perhaps used). What is the nature of the overhead on the USB 2.0 interface? I did search the web for any explanation, but came back empty-handed, so far... Then again, since now that we're discussing it, would Wonko kindly give it a try, please?
You want a theoretical explanation of a practical issue?
The data is transferred in "frames", each frame is made of three "packets" (of which the middle one or "data" one) is "optional":
http://www.beyondlog...ml#USBProtocolshttp://www.usbmadesi...co.uk/ums_6.htmhttp://www.usbmadesi...co.uk/ums_7.htm
From what I understand, the bus is "half-duplex", in an
extremely simplified way, think of the differences between a "normal" telephone conversation when compared against one over a walkie-talkie:
Quote
Hi, I am the motherboard controller, anyone connected to this bus? Over.
Hi, I am a USB Mass Storage device, are you a motherboard controller? Over.
Hi I am the motherboard controller, Roger and Over.
Ok, I am going to send you some data, Over.
Fine, I am ready to receive the data, Over.
Here is the data, Over.
Ok, got them, Roger and Over.
You ready for some more data? Over.
Sure, send'em over. Roger and Over.
Here is the data, Over.
Ok, got them, Roger and Over.
You still there or some demented user disconnected us in the meantime? Over.
I am still here, Over.
Good, I am going to send you some more data, Over.
Roger, keep'em coming. Over.
Have you got them? Over
Sure, go on. Over.
I am ready to send some more dats, you still there? Over.
....
The "Over" or "Roger and Over" pieces of conversion (excluding the actual data transmitted) correspond
loosely to the SOF (start of frame) packets (and take place every 125 microseconds):
http://www.keil.com/...__protocol.html
See also:
http://uk.farnell.co...dev_mistake.pdf
Quote
As with any electronic system, designers want the best performance possible.
Unfortunately, with USB, many designers begin their design believing they are
going to get the full 1.5, 12, or 480 Mbit/sec performance from their system – this
is a bad assumption. There are several reasons why your device will never be
able to use all of this bandwidth. First of all, the USB bus is shared among
several users. Even if you are plugged into different ports on the motherboard,
you are probably sharing the same host controller as all of the other devices on
the bus, so your device is sharing the USB bus bandwidth with all of the other
devices.
Second, USB is a packetized protocol where longer blocks of data are divided
into 512-byte packets. Each packet contains a header identifying the packet
contents, and a CRC at the end of the packet for data integrity. Each packet also
requires an ACK from the other side of the link. Start of Frame (SOF) packets
are sent every 125 uSec (microframe) to maintain timing on the bus. The net
effect of this is that the theoretical maximum bandwidth of USB is 13 bulk
packets per microframe, or 53,248,000 bytes/second. Even this limit is not
achievable with current host controllers, which can receive 10 bulk
packets/microframe or send 8 bulk packets/microframe.
AFAICT, the mentioned Turboflash (and the Windows 7 "Registry hack") are related to using not the "normal" BULK Transfer protocol but another one that has less overhead for "BIGgish" data chunks):
http://reboot.pro/to...rboflash/page-2
Wonko