usb通信程序开发设计本科论文Word下载.docx

上传人:b****2 文档编号:4274560 上传时间:2023-05-03 格式:DOCX 页数:58 大小:2.03MB
下载 相关 举报
usb通信程序开发设计本科论文Word下载.docx_第1页
第1页 / 共58页
usb通信程序开发设计本科论文Word下载.docx_第2页
第2页 / 共58页
usb通信程序开发设计本科论文Word下载.docx_第3页
第3页 / 共58页
usb通信程序开发设计本科论文Word下载.docx_第4页
第4页 / 共58页
usb通信程序开发设计本科论文Word下载.docx_第5页
第5页 / 共58页
usb通信程序开发设计本科论文Word下载.docx_第6页
第6页 / 共58页
usb通信程序开发设计本科论文Word下载.docx_第7页
第7页 / 共58页
usb通信程序开发设计本科论文Word下载.docx_第8页
第8页 / 共58页
usb通信程序开发设计本科论文Word下载.docx_第9页
第9页 / 共58页
usb通信程序开发设计本科论文Word下载.docx_第10页
第10页 / 共58页
usb通信程序开发设计本科论文Word下载.docx_第11页
第11页 / 共58页
usb通信程序开发设计本科论文Word下载.docx_第12页
第12页 / 共58页
usb通信程序开发设计本科论文Word下载.docx_第13页
第13页 / 共58页
usb通信程序开发设计本科论文Word下载.docx_第14页
第14页 / 共58页
usb通信程序开发设计本科论文Word下载.docx_第15页
第15页 / 共58页
usb通信程序开发设计本科论文Word下载.docx_第16页
第16页 / 共58页
usb通信程序开发设计本科论文Word下载.docx_第17页
第17页 / 共58页
usb通信程序开发设计本科论文Word下载.docx_第18页
第18页 / 共58页
usb通信程序开发设计本科论文Word下载.docx_第19页
第19页 / 共58页
usb通信程序开发设计本科论文Word下载.docx_第20页
第20页 / 共58页
亲,该文档总共58页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

usb通信程序开发设计本科论文Word下载.docx

《usb通信程序开发设计本科论文Word下载.docx》由会员分享,可在线阅读,更多相关《usb通信程序开发设计本科论文Word下载.docx(58页珍藏版)》请在冰点文库上搜索。

usb通信程序开发设计本科论文Word下载.docx

但价格因素也是在实际选择过程中需要考虑的因素。

纯粹的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.用于非周期的、自然发生的、数据量很小的信息的传输,如键盘、鼠标等。

3.只有输入这一种传输方式(即外设到主机);

4.对于高速设备,允许数据包最大容量为小于或等于64字节,对于低速设备只能小于或等于8字节;

5.具有最大服务周期保证,即在规定时间内保证有一次数据传输;

6.与同步方式一起,占用总线的时间不得超过一帧的90%;

7.具有数据传输保证,在不要时可以重试。

批传输(BulkTransfer)

1.用于大量的、对时间没有要求的数据传输;

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设备按照下面的格式向主机端发送CBW,

图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指令集的DirectAccesss类型存储介质的传输命令有许多,所幸运的是MassStorage协议只用到了其中的一些。

下面黑体部分即为需要USB设备作出响应的请求,一般是要求向Host发送一些有关设备的数据:

表3.1SCSI指令集

对于不同的命令,其命令块描述符略有不同,其要求的返回内容也有所不同,根据相应的文档,可以对每种请求作出适当的回应。

下面以INQUIRY请求为例,给出该命令块的命令块描述符和其返回内容的数据格式,其它命令块格式和返回内容请参考Informationtechnology-SCSIPrimaryCommands-2(SPC-2)。

图3.13INQUIRY命令块描述符

图3.14INQUIRY命令返回数据格式

Host会依次发出INQUIRY、READCAPACITY、UFIMODESENSE请求,如果上述请求的返回结果都正确,则Host会发出READ命令,读取文件系统0簇0扇区的MBR数据,进入文件系统识别阶段。

对于PREVENT-ALLOWMEDIUMREMOVAL和TESTUNITREADY命令,只需直接返回CSW即可,对于后者,由于Fl

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 总结汇报 > 学习总结

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2