|
|
|
|
|
Usb Mass Storage Rationale USB Mass Storage The USB Mass Storage Rationale is the why behind the what that is USB Mass Storage. This rationale was a merely verbal tradition first made available in writing and from a neutral point of view by Wikipedia. USB divides the self-description of all devices into a sparsely populated three byte space named: b...Class ...SubClass ...Protocol. The x 08 XX XX space is Mass Storage. The x 08 XX 50 space is the generic USB Mass Storage space, also known as BBB. First to ship into that space was the x 08 06 50 Iomega Zip 100 of November 1998. Microsoft now recommends the x 08 06 50 space for all removable and detachable flash, at least up to 32 GiB/disc. Back in 1998, USB first defined the x 08 XX (00|01) CBI/CB space. Experience in that space rapidly motivated the design of the superseding BBB standard, conceived in the summer of 1998, reduced to practice by autumn, and published in the following autumn of 1999. Alphabet soup? The BBB, CBI, and CB acronyms refer to the USB "transfer type" chosen to transport the command, data, and status that make up each mass storage transaction (read, write, or other). - CBI transports command, data, and status by Control, Bulk, and Interrupt pipes. CBI/CB means bInterfaceProtocol x00 or x01, CB/I means bInterfaceProtocol x01 or x00.
- BBB transports command, data, and status by Bulk, Bulk, and Bulk pipes, only and always. USB never got around to defining BBB formally, having chosen instead to publish the document defining BBB but labeled BOT = Bulk Only Transport.
- CB actually does not transport passed status, instead choosing to transport only failed status by refusing the next try to transport a command.
Choosing BBB over CBI/CB transport fundamentally delivers improved USB thruput by sharply reducing implicit latencies: - Transport by Control in USB 1 FS implied a min latency, in Wintel UHCI, of one CDB per three frames (i.e. per three milliseconds), whoops.
- Transport by Interrupt in USB 1 FS implied a minimum latency of a thousand microseconds, and a typical latency of more, whoops. Transport by Interrupt also requires an Interrupt pipe, less commonly available than two Bulk pipes.
- Neglecting to transport all status provoked many hosts to poll for status with op x03 "REQUEST SENSE", easily adding as much as three thousand microseconds of latency.
Specifically in practice, choosing BBB raised max theoretical thruput to 19 * 64 = 1216 bytes/ms, up maybe 5X from the floppy-like maximums seen with CBI/CB. Generic in what sense? Microsoft Windows since XP/ 2K/ ME connects generically to x 08 (06|05|02) 50 Mass Storage devices. People who make other kinds of USB Mass Storage devices have to ask their customers to add software else pay Microsoft to connect. People say Mac and Linux connect generically to more Mass Storage, like maybe the entire standard space that was x 08 (06|05|04|03|02|01) (50|01|00) However, USB has since officially obsoleted and restricted the x 08 XX (01|00) "CB/CBI" space to USB 1 FS FDD. Why is "September 31, 1999" the date of the BBB title page? That's a joke. That date does not exist, except as an alias of October 1, 1999. Why enumerate x 00 01 50 rather than x 00 01 02? USB defines the Mass Storage bInterfaceProtocol values x 00 01 50, not x 00 01 02. Why not x02? Because the x50 = ASCII 'P' stands for "Pat", one of authors, who signed for the group, unusual in an otherwise faceless industry. The first x 08 XX 50 devices shipped in autumn of 1998, ten months before the merely public standard appeared. At the time, more people thought the BBB standard would be defined incompatibly with the early proprietary devices and given the code x02. Pat chose x50 as an alternative to the xFF reserved to mean proprietary forever, a number found far separated from x00, x01, x02, a number familiar to those of the P people who keep ASCII and Unicode memorised. The July 1999 meeting of USB changed the final standard to agree with the shipped product and to continue use of the x50 code. Why enumerate only six flavours of SCSI? Why does the bInterfaceSubClass enumeration of SCSI standards stop at x06? Some BBB people saw that enumeration as a CBI/CB mistake, redundant (and therefore potentially in disagreement) with the more significant op x12 "INQUIRY" data, such as byte 0 mask x1F PDT ("peripheral device type"). The x06 Transparent SCSI code means look to SCSI "INQUIRY" for SCSI Inquiry data, not to USB. Nobody's bother to define any new codes, since. What are the true names of the bCSWStatus values? The standard says Passed, Failed, and Phase Error. The English inside the standard can be more incisively summarised as: Passed, Autosenseable, and Other. write a wikipedia article on that distinction! What were the obsolete uses of the reserved bits? Command queueing. (Somebody say more!) Meta-discussion See References - "USB Mass Storage BOT" is a link that often rots, lately found buried at "USB" -> Developers -> Documents -> Class Specs -> Approved -> Mass Storage -> "Mass Storage Bulk Only 1.0".
|
 |
| |
|
|