USB设备的从动端分析与应用设计——固件程序设计.doc

上传人:星星 文档编号:1038409 上传时间:2024-03-28 格式:DOC 页数:49 大小:1.62MB
下载 相关 举报
USB设备的从动端分析与应用设计——固件程序设计.doc_第1页
第1页 / 共49页
USB设备的从动端分析与应用设计——固件程序设计.doc_第2页
第2页 / 共49页
USB设备的从动端分析与应用设计——固件程序设计.doc_第3页
第3页 / 共49页
USB设备的从动端分析与应用设计——固件程序设计.doc_第4页
第4页 / 共49页
USB设备的从动端分析与应用设计——固件程序设计.doc_第5页
第5页 / 共49页
点击查看更多>>
资源描述

1、摘 要 USB(Universal Serial Bus通用串行总线)是计算机领域中一种全新的工业标准,其技术和产品正在迅猛的发展中。因此,研究USB总线的体系架构和开发技术很有必要。本文在实验室现有硬件和软件基础上,研究了USB的接口规范和软硬件开发方法,并应用于实际,设计出了用USB实现的温度采集系统。 本文围绕设计目标,在简要叙述USB1.1总线协议的基础上,主要论述了两个方面的内容:固件程序的开发和DS1620的使用方法。设备以AT89S52单片机作为控制器,Philips公司的PDIUSBD12作USB收发器,用DALLAS公司的DS1620进行温度采集,采用中断数据传输方式实现数据

2、传输。关 键 词USB;WDM; PDIUSBD12;温度采集; DS1620 ABSTRACTUSB(Universal Serial Bus) is a completely new industry standard in the field of computer. Its technology and product are tremendously developing. Therefore, It is necessary to research the frame and developing technology of USB. Based on the hardware a

3、nd software that our laboratory is having, this paper researches the interface standard and software-hardware developing methods of USB, apply it into the actual environment, and designed the temperature collection system.Centering on the designing object, outlining the USB 1.1 protocol, this paper

4、mainly expound two aspects of content: the developing of firmware program and employment of DS1620. Using AT89S52 as control appliance, PDIUSBD12 of Philips Corp. as USB receiving-transmitting appliance, the device collect temperature with DS1620 of DALLAS Corp., and adopt interrupt data transmittin

5、g to realize data transition. Key wordsUSB;WDM; PDIUSBD12;temperature collection; DS1620USB设备的从动端分析与应用设计固件程序设计目 录摘 要iABSTRACTii前 言1一、 本文研究的主要内容1二、 USB发展情况1三、 USB的设计目标2四、 USB的性能特点2四、 USB系统组成3(一) USB的互连3(二) USB设备4(三) USB主机5第一章 USB数据传输协议6一、 USB电气特征及电平信号6二、 USB数据流模型7(一) USB主机/设备分层模型7(二) 端点8(三) 管道9(三) 传输

6、类型9三、 USB协议层11(一) 字段格式11(二) 包格式14(三) 事务格式15第二章 USB驱动程序概述17一、 WDM驱动程序模型简介17二、 USB主机驱动程序体系结构19(一) 主机控制器驱动程序(HCD)19(二) USB总线驱动程序(USBD)20第三章 USB设备简介22一、 硬件结构22(一) 带USB接口的单片机23二、 PDIUSBD12通用USB收发器24(一) PDIUSBD12的性能特点24(二) PDIUSBD12的功能框图24(三) D12引脚配置及说明26三、 D12 USB固件编程概要26(一) 各端点在固件中的使用26(二) USB设备枚举的数据传输过

7、程28第四章 DS1620数字式温度传感器30一、 特性30二、 DS1620的3线通信模式30第五章 固件程序设计32一、 设计思路32二、 固件编程的实现概括和流程图34(一) 硬件提取层EPPHAL.C35(二)PDIUSBD12命令接口D12CI.C35(三) 中断服务程序ISR.C35(四) 协议层CHAP_9.C,PROTODMA.C39(五) 标准设备请求处理CHAP_9.C39(六) 厂商请求处理PROTODMA.C41(七) 主循环MAINLOOP.C42结 论43致 谢44参考文献45 USB从动端分析与设计固件程序设计前 言一、 本文研究的主要内容 USB总线在各个领域中

8、迅速得到应用,以取代老式的RS-232以及EPP并口等总线,研究USB总线有重要的实用价值。 然而,接口的简单意味着协议的复杂,怎样在现有的实验条件下快速的使用USB总线开发应用设备便成了我们的研究目标。 在仔细分析了现有设备和源代码的基础上,我们设计实现了一个采用USB总线实现的温度采集设备, 在下位机我们使用了DS1620数字式温度传感器,并在上位机设计了客户服务程序,DS1620定时对室温进行采集,可以实时监视室内温度。关键的一点是,其接口使用了USB进行实现,可以适应未来机器多使用USB总线的需求。 由于本系统对数据传输的速度没有太过苛刻的要求,因此我们使用了USB总线的控制传输方式。

9、二、 USB发展情况 USB全称为Universal Serial Bus(通用串行总线),是1994年底由IBM、Intel、Compaq、DEC、Microsoft、NEC和Northern Telecom共同开发的PC外设接口标准,由于其具有使用方便及成本低廉等优点,迅速得到业界的强力支持,目前己经成为主流的总线标准,2001年USB设备出货量已超过3亿台。 USB广泛应用于传统PC外设,如鼠标、键盘、显示器等,移动存储设备如移动硬盘、闪存盘等,以及新兴的消费类电子,如MP3播放器、数码相机、移动电话等。同时其应用范围也在不断扩大,工业自动化仪器仪表正在成为USB应用的热点之一。 USB

10、最初推出的是1.X版本,其总线传输速度较低,为12Mbps,1998年推出了USB2.0,将数据传输速度提高到了480Mbps,在保持了USBI .1的优点的基础上,保证了向下兼容性,可以完全支持各种USB 1.x的产品。USB2.O满足了高端应用对总线带宽的需求,从2002年下半年起,采用USB2.O的设备开始大规模出现,预计2004年USB2.O整体出货量将超过3亿台,超过USB1.1的出货量。 随着USB设备的迅速增加,设备与设备之间的直接数据传输变得越来越迫切,USB OTG(ON THE GO)技术应运而生了,它于2001年12月底制定,赋予了设备双重身份,即既可以作为主机,又可以作

11、为设备,其实质是在设备中增加了一个嵌入式计算机来执行主机任务。这一技术使USB设备摆脱了对PC的依赖,大大扩展了USB的应用范围,并结合USB2.0高速传输技术,严重威胁到IEEE1394的市场。三、 USB的设计目标 USB的设计有三大目标: (1)计算机与电话之间的连接:对声音音频和压缩视频等实时数据给予充分支持,可以广泛地连接计算机和电话,这一应用目标到目前为完全实现。 (2)易用性:强调即插即用、总线供电等特性,以方便用户使用。 (3)端口扩充:提供快速、双向、统一且价格低廉的串行接口,可以满足PC机发展的现在和未来的需要。 从中我们可以看出,USB标准的制定从市场出发,立足于满足用户

12、的实际应用需求,尽管它的性能指标并不突出,但正是这一点使得它获得了极大的成功。四、 USB的性能特点(1) 终端用户的易用性: 为连接电缆和连接头提供了单一模型; 电气特性与用户无关; 自我检测外设,自动地进行设备驱动设置; 可动态连接,动态重置外设。 (2) 广泛的应用性: 适应不同设备,提供低速传输(1.5Mbps)和全速传输(12Mbps ); 支持对多个设备的同时操作; 可同时操作127个物理设备; 在主机和设备之间可以传输多个数据和信息流; 支持多功能的设备; 利用低层协议,提高了总线利用率。 (3) 同步传输带宽: 确定的带宽和低延迟适合电话系统和音频的应用; 同步工作可以利用整个

13、总线带宽。 (4) 灵活性: 可以选择一系列大小的数据包,允许对设备缓冲器大小进行选择; 通过指定数据缓冲区大小和执行时间,支持各种数据传输率; 通过协议对数据流进行缓冲处理。 (5) 健壮性: 出错处理/差错恢复机制在协议中使用; 对用户的感觉而言,热插拔是完全实时的; 可以对有缺陷设备进行认定。 (6) 与PC产业的一致性: 协议的易实现性和完整性; 与PC机的即插即用的体系结构的一致; 对现存操作系统接口的良好衔接。 (7) 成本低廉 以低廉的价格提供1.5兆比特率的子通道设施; 将外设和主机硬件进行了最优化的集成; 促进了低价格的外设的发展; 廉价的电缆和连接头; 运用了商业技术。四、

14、 USB系统组成一个USB系统被定义为三个部分:USB的互连、USB设备和USB主机。(一) USB的互连 USB的互连是指USB设备与主机之间进行连接和通信的操作,主要包括以下几方面: 总线的拓扑结构:指明了USB设备与主机之间的连接方式; 数据流模式:描述了数据在系统中通过USB从产生到使用方的流动方式; USB的调度:USB提供多个设备共享的连接,对USB设备必须进行调度以分配带宽。图1(a) USB物理连接逻辑设备 主机逻辑设备 逻辑设备逻辑设备 逻辑设备图1(b) USB逻辑连接USB物理互连方式如图1(a) 所示,是一种星形级连结构。集线器(Hub)位于每级星形的中心。这种集线器级

15、连的方式使得外设的扩展很容易(USB协议规定最多允许5级集线器进行级连;USB逻辑互连方式如图1(b)所示,各个设备好象是与主机直接相连的,它们之间的通信不用关心物理连接方式。 数据流模式对于USB设备的实现是最关键的,我们将在下一章对其单独进行描述。USB的调度是针对多个设备互连的,不属于功能设备开发者需要关心的内容,在此不作描述。(二) USB设备 USB设备包括USB集线器和功能设备(Function)两大类。它们都必须有标准的USB接口,符合USB协议,支持标准的USB操作(如配置,复位等)。它们的描述信息也必须具有USB协议定义的标准格式。集线器为USB总线提供扩展和连接;功能设备是

16、具有一定特殊应用功能的设备,它能发送数据到主机,也可以接收来自主机的数据和控制信息。(三) USB主机USB主机是USB系统的核心。在一个USB系统中只有一台主机。主机的USB接口称为USB控制器,通过它主机和外围USB设备进行通信。在主机中还集成了一个根集线器(Root Hub)用于直接与外设相连或与一般USB Hub级连。主机所具有的功能包括:检测USB设备的插入和拔出;管理主机与设备之间的数据流,对设备进行必要的控制;收集各种状态信息;对插入的设备供电。第一章 USB数据传输协议一、 USB电气特征及电平信号 USB采用四线电缆,由电源线(Vbus )、地线(GND)和两根数据线(D和D

17、)组成,如图1-1所示。数据线传输差模信号,以降低噪声干扰。可以看出,任何时刻USB总线上最多只能有一位数据在传输,所以USB是一种完全按照时序进行控制和数据传输的总线。图1-1 USB电缆结构USB具有差分NRZI(不归零倒置)代码格式。在这种NRZI波形中,d (n-1)位和d (n)位之间如果有状态变化(称为过渡),就被解码为一个二进制b(n) =0的数据位,没有过渡就被解码为一个二进制b (n) =1的数据位,如图1-2所示。图12 NRZI数据编码 为了确保信号发送的准确性,当在USB上发送一个包时,传输设备就要进行位插入操作。所谓位插入操作是指在数据被编码前,在数据流中每六个连续的

18、 1后插入一个0,从而强迫NRZI码发生变化,位插入操作由传输端强制执行,任何数据都将被执行位插入操作,如图1-3所示。接收端必须能对NRZI数据进行解码,识别插入位并去掉它们。 图13 位插入数据编码序列 原始数据 位插入数据 同步块 数据包NRZI编码后的数据位插入 在全速传输中,数据K态表示差分1,数据J态表示差分O,而在低速传输中则正好相反。二、 USB数据流模型 本数据流模型完全引自参考文献,以下不再标注。(一) USB主机/设备分层模型 数据流发生在主机和USB设备之间,我们以常用的分层模型介绍USB系统的数据流,如图14所示。它能使不同层次的实现者只关心USB相关层次的特定功能细

19、节,而不必掌握从硬件结构到软件系统的所有细节,因此,不同层次的实现者其开发工作量将会有极大的不同。 主机分客户软件层,USB系统软件层和USB主机控制器。设备分USB总线接口层,USB设备层和功能层。USB系统软件是指在某一操作系统上支持USB的软件,它独立于USB设备和客户软件;USB主机控制器是主机方的USB接口,它是软硬件的总和。从图14上我们可以看出,USB总线接口层提供主机和设备之间物理的连接,而从逻辑上看,USB设备层与USB系统软件层对应,它们完成USB设备一些基本的、共有的工作;功能层和客户软件层通信,它们实现单个USB设备特有的功能。在编程时,客户软件通过USB系统软件提供的

20、编程接口操作对应的设备,而不是直接通过操作内存或I/O口来实现,这一点是USB和PCI总线的显著差异。所有USB设备只有在被主机承认并配置后才可进入系统工作,它们实现的功能不同,但对主机都提供一个同样的接口。 在系统软件层和USB设备层之间有一条缺省管道,主机与设备的端点O通信,用于实现一些USB设备的基本控制功能。在客户软件层和功能层有多组通信管道,它们实现USB设备的特定通信功能。我们所述的这些通信都是从逻辑上分析的,实际的信号的物理流程如图14所示,以信号从主机流向设备为例:客户软件经USBD传输给系统软件的数据是不具有USB通信格式的数据。系统软件对这些数据分帧,实现带宽分配策略,然后

21、交给USB主机控制器。主机控制器对数据按USB格式打包,实现传输事务,再经串行接口引擎(SIE)后将数据最终转化为符合USB电气特征的差分码从USB电缆发往设备。数据到达设备后是一个逆过程,在设备层中将数据解码,发往不同端点的数据包被分开并正确排列,帧结构被拆除,数据成为非USB格式的,最后数据送往各端点,完成通讯。在主机方我们还发现有HCD和USBD两个接口层。HCD的全称为主机控制驱动(Host Control Driver),它是对主机控制器硬件的一个抽象,提供和USB系统软件之间的软件接口。不同种PC的主机控制器硬件实现并不一样,但有了HCD,USB系统软件就可以不必理会各种HCD具有

22、何种资源,数据如何打包等问题。尤其是HCD隐藏了怎样实现根集线器的细节,这有利于USBD的简化。(二) 端点端点在硬件上就是一个有一定深度的先入先出堆栈(FIFO)。主机和设备的通信最终作用于设备上的各个端点。每一个USB设备都有一组互相独立的端点。每一个设备都有一个由主机分配的唯一的地址,而各个设备上的端点都有由设备确定的端点号(Endpoint Number)和通信方向。每个端点只支持单向通信:它要么是输入(Input)端点,数据流方向从设备到主机;要么是输出(Output)端点,数据流方向从主机到设备。设备地址、端点号和通信方向三者结合起来就唯一确定了一个端点。在设备配置时,它必须报告主

23、机它的各个端点的特性,包括端点号,通信方向,端点支持的最大包大小,带宽要求以及支持的通信方式等。其中端点支持的最大包大小称为数据有效负载,是个重要的概念。端点O比较特殊,它实际是由输入和输出两个端点组成。每个设备都必须有端点0,主机和它建立缺省控制管道,用于设备枚举和实现对设备的一些基本的控制功能。除了端点0,其余的端点在设备配置之前是不能和主机通信的。只有设备在它的配置描述符中向主机报告了这些端点及其特性,并由主机确认后,这些端点才被激活。(三) 管道 管道(Pipe)是设备上端点和主机上的客户软件的连接。因此,每条管道和端点的特性有直接关系,它只能支持一种通信方式。客户软件通常通过向主机的

24、操作系统发I/O请求包(IRP)来要求和某一条管道进行数据传输,而后它进行等待,直到系统通知它传输成功或失败。USB协议规定了流管道(Stream Pipe)和消息管道(Message Pipe)两种管道,其中消息管道有定义的结构。缺省控制管道属于消息管道。1 流管道流管道中的数据是流的形式,也就是该数据的内容不具有USB要求的结构。数据从流管道一端流进的顺序与它们从流管道另一端流出时的顺序是一样的,流管道中的信息流总是单方向的,或者流进,或者流出。流管道支持同步传输,中断传输和批传输,这些在稍后将作进一步解释。2 消息管道 消息管道与端点的关系同流管道不同,它的数据格式由USB协议规定。首先

25、,主机向USB设备发出一个请求;接着,就是数据的传输;最后,是一个状态阶段。为了能够容纳请求/数据/状态的变化,消息管道要求数据有一个格式(该格式将在第三节中详细介绍),此格式保证了命令能够被可靠地传输和确认。消息管道需要双方向的信息流,所以有两个相同号码的端点,一个用于输入,一个用于输出。两个号码必须相同。缺省控制管道就是一个消息管道。消息管道仅支持控制传输。(三) 传输类型 USB定义了4种传输类型:控制传输、批传输、等时传输和中断传输。由于我们的应用只涉及控制传输,故只对这种传输类型作进一步的描述。 控制传输用于支持在客户软件和它的应用之间传输设置信息、命令信息、状态信息等。它由以下三个

26、事务组成: 建立事务:建立联系,把请求信息从主机传到它的应用设备; 零个或多个数据传输事务:按照上一事务中指明的方向传输数据;状态事务:将传输状态信息从应用设备传回到主机。图14 USB主机/设备数据流通信模型 USB设备必须实现缺省控制管道,并将它设置成一个消息管道。这个管道由USB系统软件使用。USB设备的确认信息、状态信息以及控制信息由该管道传输。 USB设备框架定义了标准的,设备级的或由销售商提供的请求,这些请求可操作设备的状态。USB设备框架又定义了一些描述符(Descriptor),用于存放USB设备的各种信息。控制机制提供访问设备描述器和请求操作设备的机制,所以使用控制传输的数据

27、必须具有USB定义的数据格式。 应用层和相应的客户软件不能为控制传输指定总线访问频率和带宽。这由USB系统软件从全局优化角度加以决定。但不管有没有控制传输发生,系统软件至少需要将10%的带宽留给控制传输。 控制传输使用的是消息管道上的双向信息流。所以,一旦一个控制管道被建立之后,这个管道就使用具有某个端点号的两个端点,一个输入,一个输出。控制传输的数据格式将在第三节中作详细描述。 USB规定了控制传输所能接收或发送的最大数据净负荷区长度。高速设备定义的最大数据净负荷区长度为8、16、32或64字节,控制传输端点必须支持规定的最大长度中的一个,设备在自己的设置信息中报告该端点允许的最大净负荷区长

28、度;低速设备的数据净负荷区的长度只能是8字节。这个规定是针对这些数据包中的数据净负荷区的,不包括包中的协议要求的额外信息。 当端点做了以下两件事时,控制传输的数据阶段可被认为结束: 已传了由建立阶段指定的数据量。 传了一个数据包,它的长度为O或它的数据区长度小于最大长度。三、 USB协议层USB协议层描述了USB主机与USB设备交互时的语法和协议,从中定义了字段、包、事务和传输的结构,以及由字段到包、由包到事务、由事务到传输所组成的组织层次关系。本节中我们将从底向上展示USB的数据结构。(一) 字段格式 数据位被发送到总线的时候,首先是最低有效位(LSB),跟着是下一个最低有效位,最后是最高有

29、效位(MSB)。在本文以下描述中,数据均以下列形式给出:包中单个的位和字段从左到右的顺序就是它们通过总线的顺序。1 . 同步字段任何包都是从同步(SYNC)字段开始的,同步字段是产生最大的过渡密度的编码序列。同步字段作为空闲状态出现在总线上,后面跟着以NRZI编码的二进制串“KJKJKJKK”。通过被定义为8位长的二进制串,输入电路以本地时钟对齐输入数据。同步字段里的最后两位是同步字段结束的记号,并且标志了包标识符(PID)的开始。2 包标识符字段 所有包的同步字段后都紧跟着包标识符(PID)。如图15所示,包标识符由4位的包类型字段和其后的4位的校验字段构成。包标识符指出了包的类型。包标识符

30、的4位的校验字段可以保证包标识符译码的可靠性,这样包的余项也就能被正确地解释。包标识符的校验字段是通过对包类型字段的二进制的求反码产生的,如果4个PID检验位不是它们的各自的包标识符位的补,则说明存在PID错。 图15 包标识符格式包标识符被分为4个编码组:标记,数据,握手和专用。如表11所示,包标识符传输的前2位(PID)指出了其属于哪个组。设备通过对包标识符译码来确定包的类型。3 地址字段 设备端口使用2个字段;设备地址字段和端口字段。设备对地址和端口字段都需要进行译码。任何一个字段不匹配,此标记都必须被忽略。另外,对未初始化的端口的访问将使得标记被忽略。设备地址(ADDR)字段通过其地址

31、指定设备,如图16所示,ADDR指定了总共128个地址。由定义可知,每个ADDR值都定义了单一的设备。设备在刚一复位(Reset)和加电(Powerup)的时候,其地址默认值为零,并且必须由主机在枚举过程(Enumeration Process)中编程。设备地址零被用作为缺省地址,不可被分配作任何别的用途。如图17所示,在设备拥有多个端口的时候通过附加的4位端口(ENDP)字段对端口进行寻址。除了端口地址0之外,端口个数是由设备决定的。所有的设备都必须在端口O提供一个控制管道(缺省控制管道)。对于低速设备,每个设备最多提供3个管道:在端口0的控制管道加上2个附加管道(或是2个控制管道,或是1个

32、控制管道和1个中断端口,或是2个中断端口)。全速设备可以支持最多可达16个的任何类型的端口。图16 地址字段图17 端口字段表1-1 PID 类型PID 类型PID 名PID3:0描述标记Token输出(OUT)输入(IN)帧开始(SOF)建立(SETUP)0001B1001B0101B1101B在主机到功能部件的事务中有地址+端口号在功能部件到主机的事务中有地址+端口号帧开始标记和帧号在主机到功能部件建立一个控制管道的事务中有地址+端口号数据DATA数据0(DATA0)数据1(DATA1)0011B1011B偶数据包PID奇数据包PID握手Handshake确认(ACK)不确认(NAK)停止

33、(STALL)0010B1010B1110B接收器收到无措数据包;接收设备部不能接收数据,或发送设备不能发送数据;端口挂起,或一个控制管道请求不被支持。专用Special前同步(PRE)1100B主机发送的前同步字。打开到低速设备的下行总线通信。4 帧号字段帧号字段是一个11位的字段,主机每过一帧就将其内容加一。帧号字段达到其最大值7FFH时归零,且它仅每个帧最初时刻在SOF标记中被发送,可以用来统计数据传输情况。 5 数据字段 包含数据字段的数据包大小随着传输类型而变化,但所包含的数据必须是整数个字节。图18为多字节显示格式。每个字节的范围内的数据位移出时都是最低位(LSB)在前。图18 数

34、据字段格式6 循环冗余校验循环冗余校验(CRC)被用来在标记和数据包中保护所有的非PID字段。(二) 包格式1 标记包 图19显示了标记包的字段格式。标记由PID,ADDR和ENDP构成,其中PID指定了包是输入,输出还是建立类型,输入PID定义了从设备到主机的数据事务,输出和建立PID定义了从主机到设备的数据事务;对于输出和建立事务,地址和端口字段唯一地确定了接下来将收到数据包的端口,对于输入事务的,这些字段唯一地确定了哪个端口应该传输数据包。只有主机能发出标记包。图19 标记包格式 如图19所示,标记包包括了覆盖地址和端口字段的5位CRC。CRC并不覆盖PID,因为它有自己的校验字段。标记

35、和帧开始(SOF)包是由3个字节的包字段数据后面的包结束(EOP,End of Packet)界定的。如果包被译码为合法标记或SOF,但却没有在3个字节之后以EOP终止,则它被认为是无效的,并被接收器忽略。 2 帧开始(SOF)包主机以每毫秒一次的额定速率发出帧开始(SOF)包。如图110中所示,SOF包是由指示包类型的PID和其后的11位的帧号字段构成。图110 帧开始包 3 数据包 如图111所示,数据包由PID,包括至少O个字节数据的数据区和CRC构成。有两种类型的数据包,根据不同的PID:DATA0和DATA1来识别。两种数据包PID是为了支持数据切换同步而定义的。数据必须以整数的字节

36、数发出。数据CRC仅通过对包中的数据字段计算而得到,而不包括PID,它有自己的校验字段。图111 数据包格式4 握手包 如图112所示,握手包仅由PID构成,用来报告数据事务的状态,以及在数据事务中表示数据成功接收,命令的接收或拒绝,流控制和停止条件。只有支持流控制的事务类型才能返回握手信号。握手总是在事务的握手阶段中被返回,也可在数据阶段代替数据被返回。握手包由1个字节的包字段后的EOP确定界限。图112 握手包(三) 事务格式 事务格式根据端口类型而变化。有4种端口类型:批处理(Bulk)、控制(Control)、中断(Interrupt)和同步(Isochronous)。本文仅描述应用所

37、涉及到的控制端口类型。 一个典型的控制传输需要3种不同的事务:建立、数据和状态事务。图115显示了三种不同的控制传输事务序列,控制读和写相似,由建立、数据和状态事务组成。在某些情况下,也可以有无数据事务阶段的控制传输,它仅由建立和状态阶段构成。图115 控制传输事务序列 建立事务用于向功能部件的控制端口传输信息。图116说明了建立事务的格式。建立包总是在建立事务的数据阶段上使用DATA0 PID。收到建立包的设备必须接收建立数据并用ACK应答,如果数据被损坏,则丢弃数据且不返回握手。 控制传输的数据事务发生在建立事务阶段之后,由一个以上的输入或输出事务构成。所有的数据事务阶段里的事务都必须有相

38、同的方向(即全部输入或者全部输出)。在数据阶段中要发送的数据的数量和其方向在建立事务里被指定。如果数据的数量超过了先前确定的数据包大小,数据在支持最大的包大小的多个事务中被发送(输入或者输出)。任何剩下的数据都作为剩余在最后的事务中被发送。状态事务是控制传输的最后一个事务阶段,报告整个控制传输的结果是成功还是失败。如果成功,则状态事务中返回零长度数据包(即只有PID和CRC校验位);如果失败,则对于控制写,设备在数据包阶段就返回NAK或者STALL,此时主机不再返回交换包;对于控制读,主机依然发送一个零长度数据包,设备返回NAK或者STALL。状态事务的方向是以相对前面的事务阶段的数据流方向来

39、确定的,并且总是使用DATA1 PID。图116 建立事务结构第二章 USB驱动程序概述本章首先简要介绍了USB驱动程序的Win32程序模型(WDM),然后介绍了USB主机体系结构,最后详细介绍了本设计的驱动程序及应用程序的编写。一、 WDM驱动程序模型简介 随着Windows98和Windows20OO成为主流操作系统,windows驱动程序模型(WDM)取代了原先的VxD技术,成为设备驱动程序的主流模式。WDM提供灵活的方式,简化了驱动程序的开发,并能够对USB、IEEE 1394、PCI等新硬件标准提供充分支持,并增强了驱动程序的可靠性和可维护性。 WDM有两种运行模式,即内核(Kern

40、el)模式和用户(User)模式。在内核模式下,程序的运行不受操作系统的任何限制,对I/O设备有完全的访问权,能够访问任何虚地址和控制虚拟内存硬件;在用户模式下,操作系统提供某种机制,可以限制程序的各种I/O操作,硬件也可以防止特权指令的执行,并进行内存和I/O空间检查(关于这两种模式的运行过程涉及到操作系统核心和微处理器构架,是一个大得多的话题,在此不作讨论)。 WDM驱动程序模型分两个方面,除了核心模式描述设备驱动程序的标准结构外,WDM还为常见类型的设备实现了一个模块化的、分层次类型的总线驱动程序和类驱动程序。总线驱动程序实现了支持USB、IEEE1394协议等。类驱动程序是为实现标准W

41、indows功能提供条件。WDM对标准类接口的支持减少了Windows 98和Windows NT所需的设备驱动程序的数量和复杂性。 以往在Windows98和Windows NT两个平台上分别运行时需要为同一个设备编写两个截然不同的驱动程序,但WDM是跨平台的,因而只需要编写一个WDM驱动程序就可以了。 WDM驱动程序是分层的,即不同层上的驱动程序有着不同的优先级,这使得I/0请求进程更加明了,而Windows 9x下的VxD则没有此结构(如图2l所示)。 WDM引入了功能设备对象FDO(Functional Device Object)与物理设备对象PDO(Physical Device

42、Object)两个新类来描述硬件,一个PDO对应一个实际硬件。一个硬件只允许有一个PDO,却可以拥有多个FDO,在驱动程序中直接操作的不是硬件而是相应的PDO与FDO。在用户态和内核态通信方面,系统为每一个用户请求打包形成一个IRP结构,将其发送至驱动程序,并通过识别IRP中的PDO来区别是发送给哪一个设备的。另外,在驱动程序的加载方面,WDM不通过驱动程序名称识别,而是通过一个128位的全局唯一标识符GUID来实现驱动程序的识别。FIDOFDOFIDOPDO上层过滤器驱动程序功能驱动程序下层过滤器驱动程序总线驱动程序IRP图21 WDM中设备对象和驱动程序的层次结构 在WDM驱动程序的工作方

43、式和其他模式的驱动程序模型有很多差别。在WDM驱动程序中,即插即用(PnP)管理器告知何时向操作系统添加或删除一个设备。它使用操作系统安装的INF文件查找新设备的正确驱动程序,并按照驱动程序的要求创建设备对象堆栈,而其它模式驱动程序必须发现它自己的设备,使用专门的安装程序安装;另外在细节上也存在很多区别,其它模式驱动程序参数一般由注册表提供,在DriverEntry里调用读注册表的函数,然后根据注册表再调用CreateDevice创建设备,但是WDM一般不是这样,在加载的时候PnP管理器调用AddDevice入口点创建设备,一般在DriverEntry里创建的是一个与设备或者对象毫无关系的虚拟

44、设备,用于管理与Win32的通讯;另外整个设备驱动树也发生了改变,从而使安装程序发生了很大的改变。WDM本身的PnP管理器被抽象地提升到了ROOT的地位,负责所有的总线驱动程序的加载。总线驱动程序则负责遍历所有位于总线上的设备,并且为每个设备创建相应的设备对象。 一个完整的驱动程序要完成以下工作:初始化、创建与删除设备、处理应用层程序的打开和关闭句柄的请求、处理应用层程序的输入/输出请求、串行化对设备的访问、访问硬件、调用其他驱动程序、取消I/O请求、超时I/O请求、处理可热插拔设备的加入和删除事件、电源管理和WMI。二、 USB主机驱动程序体系结构 作为一种符合WDM的驱动程序,USB总线驱动程序软件堆栈内的层间通信也使用IRP(l/O请求包)的机制。但实际的USB驱动程序使用URB(USB请求块)结构向其硬件设备发送请求。USB驱动程序高度依赖其总线驱动程序(USBD.SYS),而不直接使用硬件抽象层(HAL)函数与硬件通信,这是USB驱动程序的显著特点,它提高了系统的可靠性和可维护性。 US

展开阅读全文
相关资源
相关搜索
资源标签

当前位置:首页 > 学术论文 > 毕业设计

版权声明:以上文章中所选用的图片及文字来源于网络以及用户投稿,由于未联系到知识产权人或未发现有关知识产权的登记,如有知识产权人并不愿意我们使用,如有侵权请立即联系:2622162128@qq.com ,我们立即下架或删除。

Copyright© 2022-2024 www.wodocx.com ,All Rights Reserved |陕ICP备19002583号-1 

陕公网安备 61072602000132号     违法和不良信息举报:0916-4228922