SCSI的Command Descriptor Block (CDB)格式

文章内容来源于http://en.wikipedia.org/

Bulk Transfer中CBW (Command block wraper)里会包装SCSI的CDB。

每个CDB长度可以为6, 10, 12 or 16 (根据不同的命令). 最新也可以规定是变长的。

如下图,为Request sense命令的格式

 

SCSI的Command Descriptor Block (CDB)格式_第1张图片

 

SCSI会返回Status code (状态码)判断命令执行的状态

如00 OK

  02 Check condition

  08 Busy...

 

但Bulk transfer一般不用,Bulk Transfer的CSW有自己的状态码

但在执行错误时, 也用Request sense来查询具体错误代码

 

Request Sense: 返回上一个命令的错误码

数据格式见SCSI命令格式 (OP=03) 见上图

 

返回的数据格式:

 

 

SCSI的Command Descriptor Block (CDB)格式_第2张图片

  

Response code:
70h: 当前的所有错误,固定格式
71h: 延后的所有错误,固定格式
72h: 当前错误,描述符格式
73h: 延后错误,描述符格式

ILI: Incorrect length indicator
ILI=1 请求块的长度与设备block 长度不一致

Sense Key: 错误代码
0h: No Sense没有特殊的代码,有可能是成功的,也有可能ILI=1
1h: Recovered Error已恢复的错误
2h: Not Ready设备没有准备好,此时不能访问
3h: Medium Error设备有问题
4h: Hardware Error硬件错误
5h: Illegal Request不合法的请求, 在Request时参数有可能不对
6h: Unit Attention设备被Reset
7h: Data Protect数据被保护
9h: Firmware Error
Bh:  Aborted command
Ch: Equal, 用于Search时表示正确返回
Dh: Volume Overflow
Eh:  Miscompare从磁盘读出来的数据与Cache数据不一致
Sense key, Additional sense code and Additional sense key qualifier一起组成特殊的错误码,其中00000h表示没有错误, 具体信息见
http://en.wikipedia.org/wiki/KCQ
 

如下图为Request sense的命令和返回的数据

 

 

SCSI的Command Descriptor Block (CDB)格式_第3张图片

 

Test Unit Ready: 判断一个设备(Device)是否准备好(Ready)传输数据(读或写)

 SCSI的Command Descriptor Block (CDB)格式_第4张图片

设备返回0 (Good Status) 或通过Request Sense 查询状态 (Status)

 

Inquiry用来查询一个设备的基本信息

 SCSI的Command Descriptor Block (CDB)格式_第5张图片

  

Read Capacity: 返回设备的容量

SCSI的Command Descriptor Block (CDB)格式_第6张图片

 

RelAdr: 表明LBA(logical block Address)是相对地址
PMI (Partial Medium indicator):
0: 最后一个LBA
1: 当前读到的最后一个LBA(由于某些读写延时造成)
返回的数据格式:

如读到的数据为: 00 EC DF FF 00 00 02 00

表示最后一个逻辑块号为15523839,块长512, 由此计算出该设备的容量

(15523839+1)*512/1024=7761920KB

 

你可能感兴趣的:(cache,command,search,Descriptor,磁盘)