U盘设计硕士论文.docx
《U盘设计硕士论文.docx》由会员分享,可在线阅读,更多相关《U盘设计硕士论文.docx(61页珍藏版)》请在冰豆网上搜索。
U盘设计硕士论文
U盘设计硕士论文
及相关资料
版本
生成日期
生成人
复审人
密级
状态
第一章绪论
1.1PC接口简介
PC中的接口有两类:
串行接口和并行接口。
计算机内部总线,如CPU与存储器之间匀采用并行接口,这样速度快;但外设却以串行接口比较占优势。
传统的打印机接口为并行接口。
SCSI标准的全名是小型设备通用接口标准,其传输速率为10M,早期的扫描仪一般使用此接口,硬盘与主机的联接也使用这种接口。
串行接口出现最早,使用最广的RS232接口,但其速度太慢,现在已经逐渐被淘汰。
USB接口和IEEE1394接口是两种速度比较高的串行接口,还有局域网中的以太网接口,它们具有较广阔的发展前景和应用潜力。
USB适用于低档外设与主机之间的高速数据传输,USB1.1可以达到1.5Mbps或12Mbps的传输率,而1394更是可达100/200/400Mbps。
USB2.0将速度定位在480Mbps,而IEEE1394也推出了1394b1.3.1版草案,速度从800Mbps起步,最高可达3.2Gbps。
局域网中用得最多的是以太网接口,速度可达100Mbps,当使用光纤传输时,速度可达1000Mbps。
1.2USB接口分析
通用串行总线(UniversalSerialBusUSB),是一种快速、灵活的总线接口。
与其它通信接口比较,USB接口的最大特点是易于使用,这也是USB的主要设计目标。
作为一种高速总线接口,USB适用于多种设备,如数码相机、MP3播放机、高速数据采集设备等。
易于使用还表现在USB接口支持热插拔,并且所有的配置过程都由系统自动完成,无需用户干预。
USB接口支持1.5Mb/s(低速)、12Mb/s(全速)和高达480Mb/s(USB2.0规范)的数据传输速率,扣除用于总线状态、控制和错误监测等的数据传输,USB的最大理论传输速率仍达1.2Mb/s或9.6Mb/s,远高于一般的串行总线接口。
USB接口芯片价格低廉,一个支持USB1.1规范的USB接口芯片价格大多在人民币(2004年)15~30元之间,这也大大促进USB设备的开发与应用。
1.3USB器件的选择
在进行一个USB设备开发之前,首先要根据具体使用要求选择合适的USB控制器。
目前,市场上供应的USB控制器主要有两种:
带USB接口的单片机(MCU)或纯粹的USB接口芯片。
带USB接口的单片机从应用上又可以分成两类,一类是从底层设计专用于USB控制的单片机另一类是增加了USB接口的普通单片机,如Cypress公司的EZ-USB(基于8051),选择这类USB控制器的最大好处在于开发者对系统结构和指令集非常熟悉,开发工具简单,但对于简单或低成本系统。
但价格因素也是在实际选择过程中需要考虑的因素。
纯粹的USB接口芯片仅处理USB通信,必须有一个外部微处理器来进行协议处理和数据交换。
典型产品有Philips公司的PDIUSBD11(I2C接口)、PDIUSBD12(并行接口),NS公司的USBN9603/9604(并行接口),NetChip公司的NET2888等。
USB接口芯片的主要特点是价格便宜、接口方便、可靠性高,尤其适合于产品的改型设计(硬件上仅需对并行总线和中断进行改动,软件则需要增加微处理器的USB中断处理和数据交换程序、PC机的USB接口通信程序,无需对原有产品系统结构作很大的改动)。
1.4MassStorage协议与FAT16文件系统
USB组织定义了海量存储设备类(MassStorageClass)的规范,这个类规范包括四个独立的子类规范,即:
1.USBMassStorageClassControl/Bulk/Interrupt(CBI)Transport2.USBMassStorageClassBulk-OnlyTransport3.USBMassStorageClassATACommandBlock4.USBMassStorageClassUFICommandSpecification。
前两个子规范定义了数据/命令/状态在USB上的传输方法。
Bulk-Only传输规范仅仅使用Bulk端点传送数据/命令/状态,CBI传输规范则使用Control/Bulk/Interrupt三种类型的端点进行数据/命令/状态传送。
后两个子规范则定义了存储介质的操作命令。
ATA命令规范用于硬盘,UFI命令规范是针对USB移动存储。
MicrosoftWindows中提供对MassStorage协议的支持,因此USB移动设备只需要遵循MassStorage协议来组织数据和处理命令,即可实现与PC机交换数据。
而Flash的存储单元组织形式采用FAT16文件系统,这样,就可以直接在Windows的浏览器中通过可移动磁盘来交换数据了,Windows负责对FAT16文件系统的管理,USB设备不需要干预FAT16文件系统操作的具体细节。
第二章USB总线结构
2.1总线拓扑结
USB总线的物理连接是一种有层次性的星型结构,集线器(HUB)是每个星型结构的中心。
PC机就是主机和根HUB,用户可以将外设或附加的HUB与之相连,这些附加的HUB可以连接另外的外设以及下层HUB。
USB支持最多5个HUB层以及127个外设。
从下图描述了总线的这种物理拓扑结构。
图2.1USB总线拓扑结构
2.2USB设备
USB设备包括HUB和功能设备,而功能设备又可以细分为定位设备、字符设备等等。
为了进一步叙述,这里给出端点(endpoint)和管道(pipe)的概念。
端点:
每一个USB设备在主机看来就是一个端点的集合,主机只能通过端点与设备进行通讯,以使用设备的功能。
每一个端点实际上就是一个一定大小的数据缓冲区,这些端点在设备出厂时就已经定义好了。
在USB系统中,每一个端点都有唯一的地址,这是由设备地址和端点号给出的。
每个端点都有一定的特性。
其中包括:
传输方式、总线访问频率、带宽、端点号、数据包的最大容量等等。
除端点0外,其它端点必须在设备配置后才能生效。
端点0通常为控制端点,用于设备初始化参数等,端点1、2等一般用作数据端点,存放主机与设备间往来的数据。
管道:
一个USB管道是驱动程序的一个数据缓冲区与一个外设端点的连接,它代表了一种在两者之间移动数据的能力。
一旦设备被配置,管道就存在了。
管道由两种类型,数据流管道(其中的数据没有USB定义的结构)与消息管道(其中的数据必须由USB定义的结构)。
管道只是一个逻辑上的概念。
所有的设备必须支持端点0以作为设备的控制管道。
通过控制管道可以获取完全描述USB设备的信息,包括:
设备类型、电源管理、配置、端点描述等等。
只要设备连接到USB上并上电,端点0就可以被访问,与之对应的控制管道就存在了。
一个USB设备可以分为三个层。
最底层是总线接口,用来发送与接收包。
中间层处理总线接口与不同的端点之间的数据流通。
一个端点是数据最终的使用者或提供者,它可以看作是数据源或是数据接收端。
最上层就是USB设备所提供的功能,比如鼠标或键盘等。
图2.2USB设备层次结构
2.2.1USBHUB
HUB在USB结构中是一个关键,它提供了附加的USB节点,这些节点被称为端口。
HUB可以检测出每一个下行端口的状态,并且可以给下端的设备提供电源。
从下图描述了一个典型的HUB结构。
图2.3USBHUB
2.2.2即插即用
USB设备可以即插即用,但在可以使用之前,必须对设备进行配置。
一旦设备连接到某个USB的节点上,USB就会产生一系列的操作,来完成对设备的配置,这种操作被称为总线枚举过程:
1.设备所连接的HUB检测出端口上由设备连接,通过状态变化管道向主机报告;
2.主机通过询问HUB以获得确切的信息;
3.主机这时知道设备连接到那个端口上,于是向这个端口发出复位命令;
4.HUB发出的复位信号结束后,端口被打开,HUB向设备提供100mA的电源,这时设备上电,所有的寄存器复位,并且以缺省地址0以及端点0响应命令;
5.主机通过缺省地址与端点0进行通讯,赋予设备一个唯一的地址,并且读取设备的配置信息;
6.最后主机对设备进行配置,该设备就可以使用了。
当该设备被移走时,HUB依然要报告主机,并且关闭端口。
一旦主机接收到设备移走的报告,就会改写当前结构信息。
2.2.3设备电源
USB设备的电源可以由USB总线供给,也可以自备电源。
一个USB设备可以具有这两种供电方式,但同一时刻只能由一种方式供电。
这两种供电方式是可以切换的。
2.2.4设备的挂起
为了节电,当设备在指定的时间内没有总线传输,USB设备自动进入挂起状态。
如果设备所接的HUB的端口被禁止了,设备也将进入挂起状态(称之为选择挂起)。
当然主机也可以进入挂起状态。
USB设备当总线活动时,就会离开挂起状态。
一个设备也可以通过电信号来远程唤醒进入挂起状态的主机。
这个能力是可选的,如果一个设备具有这个能力,主机有能力禁止或允许使用这种能力。
2.3USB主机
USB主机在USB系统中处于中心地位,并且对USB及其连接的设备有着特殊的责任。
主机控制着所有对USB的访问,一个外设只有主机允许才有访问总线的权利。
主机同时也检测着USB的结构。
USB主机包括三层:
设备驱动程序,USB系统软件,USB主控制器(主机的总线接口)。
另外,还有两个软件接口:
USB驱动(USBD)接口,主机控制驱动(HCD)接口。
图2.4主机的层次结构
2.4USB数据流
图2.5USB数据流过程
从逻辑上讲,USB数据的传输是通过管道进行的。
USB系统软件通过缺省管道(与端点0相对应)管道设备,设备驱动程序通过其它的管道来管理设备的功能接口。
实际的数据传输过程是这样的:
设备驱动程序通过对USBD接口(USBdriverinterface)的调用发出输入输出请求(IRP,I/ORequestPacket);USB驱动程序接到请求后,调用HCD接口(hostcontrollerdriverinterface),将IRP转化为USB的传输(transfer),一个IRP可以包含一个或多个USB传输;然后HCD将USB传输分解为总线操作(transaction),由主控制器以包(packet)的形式发出。
需要注意的是:
所有的数据传输都是由主机开始的,任何外设都无权开始一个传输。
IRP是由操作系统定义的,而USB传输与总线操作是USB规范定义的。
为了进一步说明USB传输,这里引出帧(frame)的概念。
帧:
USB总线将1ms定义为一帧,每帧以一个SOF包为开始,在这1ms里USB进行一系列的总线操作。
引入帧的概念主要是为了支持与时间有关的总线操作。
为了满足不同外设和用户的要求,USB提供了四种传输方式:
控制传输;同步传输;中断传输;批传输。
它们在数据格式、传输方向、数据包容量限制、总线访问限制等方面有着各自不同的特征:
控制传输(ControlTransfer)
1.通常用于配置、命令、状态等情形;
2.其中的设置操作(setup)和状态操作(status)的数据包具有USB定义的结构,因此控制传输只能通过消息管道进行;
3.支持双向传输;
4.对与高速设备,允许数据包最大容量为8,16,32或64字节,对于低速设备只有8字节一种选择;
5.端点不能指定总线访问的频率和占用总线的时间,USB系统软件会做出限制;
6.具有数据传输保证,在必要时可以重试。
同步传输(IsochronousTransfer)
1.是一种周期的、连续的传输方式,通常用于与时间有密切关系的信息的传输;
2.数据没有USB定义的结构(数据流管道);
3.单向传输,如果一个外设需要双向传输,则必须使用另一个端点;
4.只能用于高速设备,数据包的最大容量可以从0到1023个字节;
5.具有带宽保证,并且保持数据传输的速率恒定(每个同步管道每帧传输一个数据包);
6.没有数据重发机制,要求具有一定的容错性;
7.与中断方式一起,占用总线的时间不得超过一帧的90%。
中断传输(InterruptTransfer)
1.用于非周期的、自然发生的、数据量很小的信息的传输,如键盘、鼠标等。
2.数据没有USB定义的结构(数据流管道);
3.只有输入这一种传输方式(即外设到主机);
4.对于高速设备,允许数据包最大容量为小于或等于64字节,对于低速设备只能小于或等于8字节;
5.具有最大服务周期保证,即在规定时间内保证有一次数据传输;
6.与同步方式一起,占用总线的时间不得超过一帧的90%;
7.具有数据传输保证,在不要时可以重试。
批传输(BulkTransfer)
1.用于大量的、对时间没有要求的数据传输;
2.数据没有USB定义的结构(数据流管道);
3.单向传输,如果一个外设需要双向传输,则必须使用另一个端点;
4.只能用于高速设备,允许数据包最大容量为8,16,32或64字节;
5.没有带宽的保证,只要有总线空闲,就允许传输数据(优先级小于控制传输);
6.具有数据传输保证,在必要时可以重试,以保证数据的准确性。
图2.6USB数据传输
2.5USB的端点
端点是USB中一个独特的概念,它是一个可以与USBHost交换数据的硬件单元。
USB
Host与USB设备之间都是通过端点来传输数据的,端点是桥梁和纽带,不同的端点其传输数据的能力不同,适于不同的应用场合。
PDIUSBD12的端点适用于不同类型的设备,例如图像打印机、海量存储器和通信设备。
端点可通过SetMode命令配置为4种不同的模式,分别为:
1.模式0Non-ISO模式:
非同步传输
2.模式1ISO-OUT模式:
同步输出传输
3.模式2ISO-IN模式:
同步输入传输
4.模式3ISO-IO模式:
同步输入输出传输
这几种模式下可得到的端点情况如下表2.1:
表2.1端点模式
端点2(主端点)是进行吞吐大量数据的主要端点。
主端点执行主机的特性以减轻传输大数据的任务,包括:
1.双缓冲。
允许USB与本地CPU之间的并行读写操作,增加了数据的吞吐量。
缓冲区切换是自动处理的,导致了透明的缓冲区操作。
2.支持DMA(直接存储器访问)操作,可以和对其他端点的正常I/O操作交进行。
3.DMA操作中的自动指针处理,在跨过缓冲区边界时不需要本地CPU的干预。
4.可配置为同步传输或非同步(批量和中断)传输。
第三章协议
3.1MassStorage协议
USB协议能够在启动或是当设备插入系统时对设备进行备置,这就是USB设备为什么可以执插拨的原因。
USB设备被分成以下几类:
显示器(Monitors)、通讯设备(Communicationdevices)、音频设备(Audio)、人机输入(Humaninput)、海量存储(Massstorage)。
特定类(class)的设备又可划分成子类(subclass),划分子类的后软件就可以搜索总线并选择所有它可以支持的设备。
每个设备可以有一个或多个配置(Configuration),配置用于定义设备的功能。
如果某个设备有几种不同的功能,则每个功能都需要一个配置。
配置(configuration)是接口(interface)的集合。
接口指定设备中的哪些硬件与USB交换数据。
每一个与USB交换数据的硬件就叫做一个端点(endpoint)。
因此,接口是端点的集合。
USB的设备类别定义(USBDeviceClassDefinitions)定义特定类或子类中的设备需要提供的缺省配置、接口和端点。
描述符(descriptor)描述设备、配置、接口或端点的一般信息,下图为USB描述符的层次结构。
图3.1USB描述符层次结构
USB(Host)唯一通过描述符了解设备的有关信息,根据这些信息建立起通信,在这些描述符中,规定了设备所使用的协议、端点情况等。
因此,正确地提供描述符,是USB设备正常工作的先决条件。
USB海量存储设备(USBMassStorageClass)包括GeneralMassStorageSubclass、CD-ROM、Tape、SolidState。
MassStorageClass只需要支持一个接口,即数据(Data)接口,选择缺省配置时此接口即被激活。
数据接口允许与设备之间进行数据传输,它提供三个端点:
BulkInput端点、BulkOutput端点和中断端点。
通用海量存储设备(GeneralMassStorageDevice)是随机存取、基于块/扇区存储的设备。
它只能存储和取回来自CPU的数据。
这种设备的接口遵循SCSI-2标准的直接存取存储设备(DirectAccessStorageDevice)协议。
USB设置上的介质使用与SCSI-2设备相同的逻辑块(logicalblocks)方式寻址。
下面介绍基于BulkOnly(批量传输)模式的MassStorage设备的描述符:
每个USB设备都必须有一个设备描述符。
图3.2设备(Device)描述符
MassStroage设备的设备类型和子类代码均在接口描述符中设置,这里置0。
其中iSerialNumber可为零,即不指定SerialNumber。
配置描述符如下图:
图3.3配置(Configuration)描述符
这里配置所支持的接口数应为1。
即设置至少支持一个接口,这里为Bulk-OnlyData接口,此接口使用三个端点:
控制端点(默认)、Bulk-In和Bulk-Out。
其中bInterfaceSubClass指定所使用的工业标准命令块,bInterfaceProtocol为所使用的传输协议。
图3.4bInterfaceSubClass处的工业标准命令块代码
图3.5MassStorage传输协议
接口描述符如下图:
图3.6接口(Interface)描述符
由于控制端点为每个设备都使用的缺省端点,因此不需要定义,只需定义Bulk-In和Bulk-Out两个端点,其端点描述符如下:
图3.7Bulk-In端点描述符
图3.8Bulk-Out端点描述符
3.2Bulk-Only传输协议
设备插入到USB后,USB即对设备进行搜索,并要求设备提供相应的描述符。
在USBHost得到上述描述符后,即完成了设备的配置,识别出为Bulk-Only的MassStorage设备,然后即进入Bulk-Only传输方式。
在此方式下,USB与设备间的所有数据均通过Bulk-In和Bulk-Out来进行传输,不再通过控制端点传输任何数据。
在这种传输方式下,有三种类型的数据在USB和设备之间传送,CBW、CSW和普通数据。
CBW(CommandBlockWrapper,即命令块包)是从USBHost发送到设备的命令,命令格式遵从接口中的bInterfaceSubClass所指定的命令块,这里为SCSI传输命令集。
USB设备需要将SCSI命令从CBW中提取出来,执行相应的命令。
完成以后,向Host发出反映当前命令执行状态的CSW(CommandStatusWrapper,即命令状态包),Host根据CSW来决定是否继续发送下一个CBW或是数据。
Host要求USB设备执行的命令可能为发送数据,则此时需要将特定数据传送出去,完毕后发出CSW,以使Host进行下一步的操作。
USB设备所执行的操作可用下图描述:
图3.9USB设备所执行的操作(状态图)
USBHost按照下面的格式向设备端发送CBW,
图3.10CBW
其中dCBWSignature的值为43425355h(LSB),表示当前发送的是一个CBW;dCBWTag的内容需要原样作为dCSWTag再发送给Host;dCBWDataTransferLength为本次CBW需要传输的数据长度,bmCBWFlags反映数据传输的方向,0表示来自Host,1表示发至Host;bCBWLUN一般为零,但当设备有多个逻辑单元时,用此位指定本次命令是发给谁的;bCBWCBLength为本次命令字的长度;CBWCB即为真正的传输命令集的命令。
设备得到一个CBW后,解析出CBWCD中所代表的命令,然后按照SCSI命令集中的定义来执行相应的操作,或是需要接收下一个Bulk-Out发来的数据,或是需要向Host传送数据,完成以后需要向USBHost发送CSW,反映命令执行的状态。
USB也是通过此来了解设备的工作情况的。
USB设备按照下面的格式向主机端发送CSW,
图3.11CSW
其中dCSWSignature的值为53425355h(LSB),表示当前发送的是一个CSW;dCSWTag的内容为dCBWTag的内容,dCSWDataResidue为还需要传送的数据,此数据根据dCBWDataTransferLength减去本次已经传送的数据得到。
Host端根据此值决定下一次CBW的内容,如果没有完成则继续;如果命令正确执行,则bCSWStatus返回0。
设备按这个规则组装好CSW后,通过Bulk-In端点将其发送给主机。
3.3SCSI指令集
Bulk-Only的CBW中的CBWCB中的内容即为如下格式的命令块描述符(CommandBlockDescriptor)。
SCSI-2有三种字长的命令,6位、10位和12位,MicrosoftWindows环境下支持12位字长的命令。
图3.12命令块描述符(CommandBlockDescriptor)
OperationCode是操作代码,表示特定的命令。
高3位为GroupCode,共有8种组合,即8个组,低5五位为CommandCode,可以有32种命令。
LogicolunitNumber是为了兼容SCSI-1而设的。
Logicalblockaddress为高位在前,低位在后的逻辑块地址,即扇区地址。
Transferlength为需要从逻辑块地址处开始传输的扇区数(比如在Read和Write命令中);Parameterlistlength为需要传输的数据长度(比如在ModeSense命令中);Allocationlength为初始程序为返回数据所分配的最大字节数,此值可以为零,表示不需要传送数据。
SCSI指令集的DirectAccess类型存储介质的传输命令有许多,所幸运的是MassStorage协议只用到了其中的一些。
下面黑体部分即为需要USB设备作出响应的请求,一般是要求向Host发送一些有关设备的数据:
表3.1SCSI指令集
对于不同的命令,其命令块描述符略有不同,其要求的返回内容也有所不同,根据相应的文档,可以对每种请求作出适当的回应。
下面以INQUIRY请求为例,给出该命令块的命令块描述符和其返回内容的数据格式,其它命令块格式和返回内容请参考Informationtechnology-SCSIPrimaryCommands-2(SPC-2)。
图3.13INQUIRY命令块描述符
图3.14INQUIRY命令返回数据格式
Host会依次发出INQUIRY、READCAPACITY、UFIMO