USB MSD设备的SCSI命令详解

需积分: 5 3 下载量 4 浏览量 更新于2024-08-03 收藏 1.19MB PDF 举报
"USB学习笔记-SCSI命令.pdf" 在深入探讨USB存储设备(Universal Serial Bus Mass Storage Device,MSD)的SCSI(Small Computer System Interface)命令之前,我们需要理解USB和SCSI之间的关系。USB是一种通用接口,允许各种设备与计算机进行高速通信,包括存储设备。SCSI则是一种标准的命令集,用于控制存储设备如硬盘、光驱等进行数据读写。当USB设备使用SCSI命令集时,我们就有了USB MSD设备。 USBMSD应用中,设备的bInterfaceSubClass设置为06h,表明它遵循SCSIPrimary Commands-2(SPC-2)规范,即支持SCSI命令。bInterfaceProtocol设置为0x50,则表示设备支持Bulk-Only Transport (BOT)协议,这是USB MSD设备通信的基础。BOT协议下,数据传输始于Command Block Wrapper (CBW),主机发送CBW到设备,设备响应以Command Status Wrapper (CSW)。 以下是MSD设备支持的一些关键SCSI命令: 1. **INQUIRY(Opcode 12h)**: INQUIRY命令用于获取设备的逻辑单元(LU)信息,如设备类型、版本、制造商信息等。根据SPC-3,设备应尽快回复INQUIRY数据,即使正在执行其他命令,且数据应立即可用,至少包含36字节的标准信息。 2. **READ CAPACITY(Opcode 25h)**: 此命令用于获取设备的容量信息,包括最后可访问逻辑块地址(LBA)和每个块的大小。设备回应4字节的LBA和4字节的块长度。如果LBA超过设备实际容量,设备应返回FFFFFFFFFFh作为最大LBA。 3. **READ(10)(Opcode 28h)**: READ(10)命令用于从设备读取数据。主机指定要读取的LBA和数据长度,设备则通过Bulk-In端点传输相应数据。这个命令是读取设备存储数据的基本方式。 除了这些基本命令,MSD设备还可能支持其他SCSI命令,如WRITE(10)、FORMAT UNIT、TEST UNIT READY等。在实际应用中,主机通过USB控制器发送这些命令,并通过BOT协议管理数据传输和状态反馈,确保设备操作的正确性和效率。 了解和掌握这些SCSI命令对于开发、调试或者优化USB MSD设备至关重要,因为它们定义了主机与存储设备之间的基本交互方式。熟悉这些命令的使用可以帮助解决设备兼容性问题、提高数据传输性能,并确保数据的可靠存储。在设计USB存储设备驱动程序或处理相关问题时,深入理解SCSI命令的运作机制是非常必要的。