Talk:USB mass storage device class/Archive 1

New wishes for an editor to volunteer near here
From offline: "Edifying. Now, I know what BBB is, and that BOT and BBB are interchangeable, a point that" had "completely escaped me ..."

Please do now proceed to answer:

Q: What were the uses of the obsolete bits?

A (draft two):

Command queueing.

The obsolete bCSWStatus value originally let the device say it had discarded a CBW, rather than acting on it.

The obsolete bmCBWFlags bit originally let the host ask the device to discard every CBW queued after a CBW that failed. The idea was, set the bit, queue a lot of traffic, hope it passes. If it all passes, no worries. But if anything does fail, then the host and the device resynchronise by the device discarding all CBW with the bit set until finally the host tries a CBW with the bit clear. Ordinarily, that first following CBW with the bit clear would be an auto sense CBW, sent by the host in response to the failure.

Merge from USB mass storage rationale
See also USB Mass Storage Rationale, which claims it should be merged with USB Mass Storage.


 * Made this merge now. Nixdorf 06:46, 2005 Apr 22 (UTC)

Copy of discussions from USB mass storage rationale
Hey wow, this page still exists, though the original authors seemingly have stalled out. [This page didn't obviously still exist because the links into this wiki are case sensitive (!).]

Another, perhaps equally abortive, try at structuring this info in a way that fits into wikipedia is: Mass Storage. However, beware, that's not the same as Mass storage, so presumably someone capable will rename it to some other more appropriate name.

---

Intended Audience
Ignorant people suddenly tasked with implementing either the host half or the device half of USB Mass Storage, for example having to discover the unwritten truth that bCSWStatus = x01 means autosenseable.

Alternate Table of Contents
From Alan Stern we have the suggestion:


 * Generic USB, including the notions of device classes, descriptors, and interfaces (doesn't need to be very extensive since we can refer to the article on USB);


 * Generic USB Storage, including the concepts of transport and protocol, maybe also Command/Data/Status phases;


 * Generic SCSI, including the concepts that are relevant for USB Storage (so Success-Failure-Error would be a subtopic here, as would AutoSense, Residue, READ(6) vs. READ(10), etc.);


 * USB Mass Storage protocols (= SubClass), with subtopics for Transparent SCSI, UFI, and any others you want;


 * USB Mass Storage transports (= Protocol), with subtopics for BBB, CBI, and CB;


 * Miscellaneous.

Links
Linux usb-storage has advice on composing this page, in such places as:


 * "2nd from: Alan Stern"
 * "1st from: Alan Stern"


 * "1st from Pete Zaitcev"

[To be deleted!]

Meta-discussion
Please help us restyle the article, in accord with such guidance for newbie Wikipedians as:


 * neutral point of view
 * your first article
 * tutorial

Please consider contributing and cross-link relevant articles that do not yet exist, such as:


 * Generic USB Storage
 * Transparent SCSI
 * Pass or Fail or Other
 * Auto Sense

I began this article as parts of my blog plavarre "SCSI pass thru".

VfD (Vote for Deletion)
Undecided

This article was proposed for deletion January 2005. The discussion is archived at Votes for deletion/USB Mass Storage Rationale. Joyous 02:36, Jan 28, 2005 (UTC)

Con

This article should be deleted. The page is the result of using Wikipedia as a sandbox for committe discussion and not encyclopedic. The facts are presented as a protocol from a committe and has no value to the reader of an encyclopedia. If anything is to be merged into the USB mass storage device class article, it will have to be rewritten from scratch anyway. Nixdorf 06:38, 2005 Apr 22 (UTC)

I think the Nixdorf paragraph above came from a context which argued that the Rationale article should be deleted - not an argument to delete [USB mass storage device class | USB Mass Storage device class].

Pro

Newbies arrive feeling the pain of not understanding this topic from time to time. Where better than an Encyclopedia to tell them to go? The committees involved in specifying the USB Mass Storage device class have no direct interest in helping the newbie: their participation is largely paid by companies with no interest in creating more competition. Some of the people who know this stuff are happy to help the newbies, but they have no place to do so, and little to zero experience of Wikipedia's neutral point of view.

We're not using Wikipedia as a "sandbox for committee discussion" - we're using Wikipedia as a sandbox for discussion that the committee is likewise disinclined to host. We have people asking questions, and people willing to answer. What we're missing is someone with the skills of an editor - someone to suggest an appropriately encyclopedic structure for this available and often sought, but never yet published, information.

Free blogging exists elsewhere on the web - hosting the discussion here is not important. The discussion came here because this looks like a good place to create the answer, that's all. Rather than posting answers to be told, please delete them, we were hoping to connect somehow with someone helpful who knows much of the art Editing Encyclopedic Articles.

Copy of Q & A from USB mass storage rationale

 * There was a merger tag here proposing a merge with USB mass storage device class, but that has now been done - the following relates to that merger tag.

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. [Somebody write a wikipedia article on that distinction!]

What were the obsolete uses of the reserved bits?
Command queueing. (Somebody say more!)

weird meta-text
"The USB mass storage rationale is an interpretation of how the USB mass storage device class should be properly implemented in devices and operating systems. This rationale was a merely verbal tradition first made available in writing and from a neutral point of view by Wikipedia, where Wikipedia was used as a sandbox by the developers of the rationale."


 * Huh??? What does wikipedia have to do with USB classes? - Omegatron 02:11, Jun 20, 2005 (UTC)