独数 / 硬件 / U盘工作原理概要

   

U盘工作原理概要

2006-11-20  独数

一、U盘基本工作原理

通用串行总线(Universal serial Bus)是一种快速灵活的接口,

当一个USB设备插入主机时,由于USB设备硬件本身的原因,它会使USB总线的数据信号线的电平发生变化,而主机会经常扫描USB总线。当发现电平有变化时,它即知道有设备插入。

USB设备刚插入主机时,USB设备它本身会初始化,并认为地址是0。也就是没有分配地址,这有点象刚进校的大学生没有学号一样。

正如有一个陌生人闯入时我们会问“你是什么人”一样,当一个USB设备插入主机时,,它也会问:“你是什么设备”。并接着会问,你使用什么通信协议等等。当这一些信息都被主机知道后,主机与USB设备之间就可以根据它们之间的约定进行通信。

USB的这些信息是通过描述符实现的,USB描述符主要包括:设备描述符,配置描述符,

接口描述符,端点描述符等。当一个U盘括入主机时,你立即会发现你的资源管理器里多了一个可移动磁盘,在Win2000下你还可以进一步从主机上知道它是爱国者或是朗科的。这里就有两个问题,首先主机为什么知道插入的是移动磁盘,而不是键盘或打印机等等呢?另外在Win2000下为什么还知道是哪个公司生产的呢?其实这很简单,当USB设备插入主机时,主机首先就会要求对方把它的设备描述符传回来,这些设备描述符中就包含了设备类型及制造商信息。又如传输所采用的协议是由接口描述符确定,而传输的方式则包含在端点描述符中。

USB设备分很多类:显示类,通信设备类,音频设备类,人机接口类,海量存储类.特定类的设备又可分为若干子类,每一个设备可以有一个或多个配置,配置用于定义设备的功能。配置是接口的集合,接口是指设备中哪些硬件与USB交换信息。每个与USB交换信息的硬件是一个端点。因些,接口是端点的集合。

U盘应属于海量存储类。

USB海量存储设备又包括通用海量存储子类,CDROM,Tape等,U盘实际上属于海量存储类中通用海量存储子类。通用海量存储设备实现上是基于块/扇区存储的设备。

USB组织定义了海量存储设备类的规范,这个类规范包括4个独立的子类规范。主要是指USB总线上的传输方法与存储介质的操作命令。

海量存储设备只支持一个接口,即数据接口,此接口有三个端点Bulk input ,Bulk output,中断端点

这种设备的接口采用SCSI-2的直接存取设备协议,USB设备上的介质使用与SCSI-2以相同的逻辑块方式寻址

 

 

                                                                                          

二、 Bulk-Only传输协议

       当一个U盘插入主机以后,主机会要求USB设备传回它们的描述符,当主机得到这些描述符后,即完成了设备的配置。识别出USB设备是一个支持Bulk-Only传输协议的海量存储设备。这时应可进行Bulk-Only传输方式。在此方式下USB与设备之间的数据传输都是通过Bulk-InBulk-Out来实现的。

 

 

 

 

 

 

 

在这种传输方式下,有三种类型数据在USB和设备传送,它们是命令块包(CBW),命令执行状态包(CSW)和普通数据包。CBW是主机发往设备的命令。格式如下:

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 


其中dCBWSignature的值为43425355h,表示当前发送的是一个CBW

DCBWTag:以后再讲。

DCBWDataTransferLength:表示这次CBW要传送数据长度。

BmCBWFlags:表示本次CBW是读数据还是写数所

BBWCBLength:表示命令的长度。

CBWCB:表示本次命令内容。也即是SCSI命令。

当设备从主机收到CBW块以后,它会把SCSI命令从CBW中分离出来,然后根据要求执行,执行的结果又以CSW的形式发给主机。

CSW的格式如下:

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 


其中dCSWSignature的值为53425355h,表示当前发送的是一个CSW

DCSWTag:必须和CBWdCBWTag一样。

DCSWDataResidue:还要传送的数据。

BCSWStatue:命令执行状态,命令正确执行时,为0

 

 

 

 

三、 SCSI命令集

      

Bulk-Only的命令块包(CBW),有一段CBECB内容,它就是SCSI命令块描述符。其内容如下

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 


Operation Code:SCSI命令操作代码。

Logical Block Address:逻辑块地址,对U盘而言应是扇区。前面已经讲过:通用海量存储设备是一个基于块/扇区存储的设备,因此在SCSI中要提供这个参数是很显然的。

transfer length:为要传送的扇区数

SCSI中直接存取类型的存储介质的传输命令有很多,如:

INQUIRY:其操作码为12H

Test Unit Ready:其操作码为00H

Format Unit:其操作码为04H

.......

这里以INQUIRY命令为例:

INQUIRY命令描述符如下:

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 


INQUIRY的结果是

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 


至于其他SCSI命令,请用户查阅相关文档。

 

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。如发现有害或侵权内容,请点击这里 或 拨打24小时举报电话:4000070609 与我们联系。

    来自: 独数 > 《硬件》

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多
    喜欢该文的人也喜欢 更多

    ×
    ×

    ¥.00

    微信或支付宝扫码支付:

    《个图VIP服务协议》

    全部>>