In SCSI, the command descriptor block (CDB) is a structure used for sending commands between computers and peripheral devices. This is often particularly used as a standard for transferring data between computers and storage devices.
In the initial SCSI-1 specification, the CDB can be a total of 6, 10, 12, or 16 bytes. Later versions of the SCSI standard such as iSCSI allow for variable-length CDBs. The CDB consists of a one-byte operation code followed by some command-specific parameters. The parameters need not be a full byte long, and the parameter length varies from one command to another. The available commands, with links to articles describing the detailed structure of many of them, are listed in the article List of SCSI commands.
Typical CDB structures, for the 6- and 16-byte SCSI Request Sense Command, opcode 3, are:
Bit Byte |
7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
|---|---|---|---|---|---|---|---|---|
| 0 | Operation code = 03h | |||||||
| 1 | LUN | Reserved | ||||||
| 2 | Reserved | |||||||
| 3 | Reserved | |||||||
| 4 | Allocation length | |||||||
| 5 | Control | |||||||
Bit Byte |
7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
|---|---|---|---|---|---|---|---|---|
| 0 | Operation code = 03h | |||||||
| 1 | LUN | Service Action | ||||||
| 2 | Logical Block (MSB) | |||||||
| 3 | ||||||||
| 4 | ||||||||
| 5 | Logical Block (LSB) | |||||||
| 6 | Addition CBP information | |||||||
| 7 | Addition CBP information | |||||||
| 8 | Addition CBP information | |||||||
| 9 | Addition CBP information | |||||||
| 10 | Allocation length (MSB) | |||||||
| 11 | ||||||||
| 12 | ||||||||
| 13 | Allocation length (LSB) | |||||||
| 14 | Misc. CDB data | |||||||
| 15 | Control | |||||||
An example with different allocation of bits to parameters is the 6-byte SCSI Mode Sense Command:
Bit Byte |
7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
|---|---|---|---|---|---|---|---|---|
| 0 | Operation code = 1Ah | |||||||
| 1 | LUN | Reserved | DBD | Reserved | ||||
| 2 | PC | Page code | ||||||
| 3 | Reserved | |||||||
| 4 | Allocation length | |||||||
| 5 | Control | |||||||
The generic form of the 12-byte CDB is:
Bit Byte |
7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
|---|---|---|---|---|---|---|---|---|
| 0 | Operation code | |||||||
| 1 | miscellaneous CDB information | SERVICE ACTION (if required) | ||||||
| 2 | Logical Block (MSB) | |||||||
| 3 | ||||||||
| 4 | ||||||||
| 5 | ||||||||
| 6 | TRANSFER LENGTH (if required) | |||||||
| 7 | PARAMETER LIST LENGTH (if required) | |||||||
| 8 | ALLOCATION LENGTH (if required) | |||||||
| 9 | ||||||||
| 10 | miscellaneous CDB information | |||||||
| 11 | CONTROL | |||||||