Bulk-Only Transport
Bulk-Only Transport (BOT) is a USB mass-storage transport that serializes command, optional data and status transfers over bulk endpoints.
A normal command sequence begins with a 31-byte Command Block Wrapper (CBW) and ends with a 13-byte Command Status Wrapper (CSW). Another CBW requires a received CSW for the preceding sequence or reset recovery. BOT does not support bidirectional data within one command. [1]
BOT Reset Recovery first issues the class-specific Bulk-Only Mass Storage Reset, then clears HALT on Bulk-In, then Bulk-Out. It is not the same operation as a USB device reset. The class reset alone preserves endpoint STALL conditions and data toggles. [1]
In Linux v6.12, a command-failed CSW takes the automatic-sense path, while a phase error returns a transport error for recovery. The driver also accommodates specific tag, signature and residue quirks, so driver acceptance is not proof of standards conformance. [2]
For command-passed or command-failed status, dCSWDataResidue subtracts relevant bytes sent for Data-In, or bytes processed for Data-Out, from dCBWDataTransferLength. Bus transfers may include padding or bytes the device does not process. The host ignores residue for phase-error status. [1]
Zero residue and command-passed status alone cannot establish durability: volatile caches and end-to-end flush/FUA handling still matter. [3]
Relations
- related
- USB mass storage, UASP, SCSI
Limitations
- No command queuing through overlapping CBWs on the same BOT interface. [1]
Citations
- USB-IF: Mass Storage Bulk-Only Transport revision 1.0, sections 3.3-3.5, 5 and 6
- Linux v6.12: Bulk-Only status, residue quirks and automatic sense handling
- Linux v6.12: explicit volatile write-back cache control