




已阅读5页,还剩48页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
目 录第一章 绪论 .(1)1.1 USB开发的历史背景 (1) 1.2 目前通用的各种总线和接口的大体介绍 . (2)1.3 USB总线的特点及开发意义 . (2)第二章 USB技术规范 . (5)2.1 USB的电器特性 . (5)2.2 USB的数据包格式 . (8)2.3 USB的传输类型 . (10)2.4 USB的设备架构 . (13)第三章 USB驱动程序的开发. (20)3.1 驱动程序与USB设备的通讯 (20)3.2 USB键盘驱动程序 . (24)3.2.1 程序设计的基本思想 . (25) 3.2.2 部分程序代码的说明 . (28)3.3 主机应用程序与虚拟设备的通信 . (37)3.3.1 程序设计的基本思想 . (37) 3.3.2 部分程序代码的说明 . (38)总结 . (42)致谢 . (43)参考资料 . (44)附录 (45)摘 要 关键词:usb,通用串行总线,串行接口规范摘要 本文主要介绍USB的技术规范以及驱动程序的具体开发,并通过一个USB键盘的实例来具体说明,展示了USB应用的大好前景。AbstractKeywords: usb,universal serial bus,serial interface criterion Abstract The paper mainly introduces the usbs technology criterion and how to develop a driver procedure of usb,and shows us the usbs beautiful future by explaining a usb keyboards driver procedure.第一章 绪论Usb(Universal Serial Bus通用串行总线)是目前各个厂家投资最多的方向之一,从通用的鼠标键盘,到即插即用的Usb硬盘,各种读写卡,带Usb插口的相机等等相继推出,它有着其他总线不可比拟的优势,是今后pc外设的主流产品。1.1 USB开发的历史背景随着电脑应用的拓展,pc机的外设越来越多,机箱后的插口也形形色色:并行口,串行口,键盘口,鼠标口,游戏手柄接口,音频输入输出口,视频输出口等等等等。而按常规,用户为pc增加一个新的外设却有一套复杂的操作,至少需要作以下的工作:首先打开音箱,安装新外设的接口插卡;其次,为了避免资源占用冲突,用户必须设置跳线为新的外设插卡选择合适的IRQ,DMA和I/O口地址,然后安装外设的驱动程序。上述工作的问题是:pc有限的I/O插槽无法满足日益增加的外设需要;不具备专业知识的普通用户难于选择合适的资源和完成复杂的安装工作。因此,简化外设补充方法,使之方便易行便成为各个pc厂家面临的重大研究课题。而且目前各种总线有着这样那样不足,有的是占用内存过多,有的是速度不够快,因此,在1996年召开的面向pc机硬件技术工作者会议上,Compaq,Intel和Microsoft三家厂商提出了设备插架(Device Bay)概念,Usb就是设备插架的一种规范。用户只需花费很少的时间对Usb设备进行安装和配置,就可以使用;另外,它还提供即插即用功能,用户可以在不断电的情况下直接把设备插在Usb插口上,从而使连接到pc机上外设的连接和配置变得很容易。现在USB外设得到了更新更快的发展。存储器方面,以前的4兆,8兆的OnlyDisk(优盘),还有USB接口的读写卡,现在的10G20G的USB移动式硬盘,而且可以根据需要自己给生产厂家说明生产要求,需要多大的硬盘就生产出多大的硬盘;速度方面,由于USB2.0规范的出现,数据传输越来越快,以前的电脑眼实时传输数据,还会出现一帧一帧的跳动,现在的数码相机,网上聊天摄像机等等,真正做到了实时传输;在办公用品方面,扫描仪,打印机等都出现了USB接口的产品,使得人们的工作和生活方便了许多。1.2 目前通用的各种总线和接口的大体介绍PCI总线Pci总线是Intel公司为Pentium处理器设计的一种新型标准总线,这种总线技术允许快速的内存,磁盘和视频访问。Pci总线结构的高传输速度限制了pci接口的数量,一般只能有两到三个(通常用于图形和硬盘控制器)。如果数据进行的是64位传输,系统时钟速度为33MHz,那么最大传输速度为264Mb/s,比较起Usb2.0的最大传输速度为480Mb/s来说,还是差了很多。一般pc厂家为了适应高速据传输速度和缩小接口卡的尺寸,Pci插槽与pc,isa和Eisa不再兼容。Pci总线的最大传输速度为264Mb/s,该速度只能在基于Pentium处理器的系统中使用64位软件才能达到。在一个基于80486处理器的系统中,最大数据传输速度只有132Mb/s。SCSI总线接口Scsi是一种智能型的总线子系统,可以支持多个外设同时协同操作,每个设备都有一个优先级。单个总线系统最多可以支持7个设备。既可支持高质量的接头和电缆,也支持低质量的接头和电缆。而且在快速传输和增强型外设的支持方面有很大的潜力。目前各种scsi总线中,最好的Ultra-Scsi总线支持32位数据总线,最大数据传输率为40Mb/s,可接到的最多设备数为15个。IDE接口(AT总线)Ide接口一般用于磁盘和光盘接口,它的特点是磁盘控制器做在驱动器里面,通过一个电缆直接与主板连接。这根电缆允许多个驱动器连接到系统,而不必担心总线和控制器冲突等问题。通常Ide接口还包含至少32Kb的磁盘缓存。现在典型的pc机主板上有两个Ide接口,每个接口可以连接两个硬盘或者一个硬盘和一个光驱,即最多可以接四个设备,数据传输率最大可以达到16.6Mb/s。1394接口1394接口有着很多和Usb相类似的特点,但是目前由于1394外设过于昂贵,只能用于公司或者高端用户,所以还没有成为广大pc厂家所支持并流行起来的接口。1.3 USB总线的特点及开发意义USB作为计算机结构的一种新的扩展,主要致力于计算机电话一体化和应用类消费产品。它的数据传输速率比串、并口都要高 ,USB总线具有时分复用的特点 ,多个不同速度的 USB外设可以通过集线器同时连接到同一台计算机的同一个 USB口上 ,在 USB总线带宽允许的情况下 ,多个外设可以同时工作而不相互影响。 USB传输速率适用于计算机的中低速外设 ,USB高速模式下支持实时的视频、音频和压缩的视频数据传输。现在生产的pc都配备了Usb接口,Microsoft 的Win98,NT,Wind2000,Windows XP以及Mac OS,Linux, FreeBSD等流行的操作系统都增加了对Usb的支持。Usb有如下的特点和优点:(1) 速度快。Usb1.1标准有高速和低速两种工作方式,主模式为高速模式,速率为12Mbps/s。Usb2.0把速度提高到480Mbps/s,可以在上面开发功能更多的电子产品,并且,在Usb2.0上,多个高速外设可以同时运行。(2) 设备配置和安装容易。如上所述,所有Usb设备支持即插即用,系统对其进行自动配置,彻底抛弃了过去的跳线和拨码开关配置。(3) 易于扩展。通过使用Hub,理论上可最多接127个外设。标准的Usb电缆长度为3m(低速为5m)。通过Hub或者中继器可使外设距离达到30m。可以使用多种连接方式进行扩展,图11是一个典型的外设配置方案。主机设备 设备根HUB复合设备 HUBHUB设备设备设备HUB图11(4) 能够采用总线供电。Usb总线能提供最大电压5V,最大电流500mA。这样就另外为某些低电压电流的Usb外设提供额外电源。(5) 使用灵活。Usb共有四种传输模式,控制传输,同步传输,中断传输和批量传输(这些内容的细节在第二章有详细的介绍),以适应不同的需要。基于以上的这些优于其他总线的特点,开发Usb是势在必行的方向,也是本论文所要研究的意义。但是,随之问题也就来了,尽管操作系统为Usb设备提供了用户需要的驱动程序,在一般情况下,设备一插到pc上就可以使用了,这是最好不过的事情。但是,事实上并不是如此,现在已经有上千种不同的设备,而且每天还有许多不同的设备在问世,操作系统不可能为所有的设备提供全部的驱动程序;而且,即使提供了通用的驱动程序,能够驱动Usb设备进行工作,那也可能是针对某一类设备提供的通用驱动程序,许多个别设备的优点在这种通用的驱动程序驱动下,不能发挥出来;另外,作为我们消费者而言,总不能花了相对多的钱来用一个用很少的钱买的设备就能实现的功能,这对设备和人来说,都是一种浪费。在原有驱动程序的基础上,自己开发出设备新的功能,或者自己干脆从头做起,都是一种不错的选择。本论文完成的关于Usb键盘的驱动程序开发,就是基于这种目的而设计的。第二章 USB技术规范设计USB的目标就是使不同厂家所生产的设备可以在一个开放的体系下得到广泛的使用。USB2.0规范改进了便携商务或家用电脑的现有体系结构,进而为系统生产商和外设开发商提供了足够的空间,以用来创造多功能的产品和开发广阔的市场,而且不必担心失去旧的接口,失去兼容性。下面从五个方面简要介绍此规范。2.1 USB的电器特性USB的电气特性主要是描述信号的发送及电压分布情况。下面我们将分别对其进行详细介绍。1、信号的发送USB通常使用一种差分的输出驱动器来控制数据信号在USB电缆上的发送,一个USB设备端的连接器是由D+、D-及Vbus,GND和其它数据线构成的简短连续电路,并要求连接器上有电缆屏蔽,以免设备在使用过程中被损坏。它有两种工作状态,即低态和高态。在低态时,驱动器的静态输出端的工作电压Vo变动范围为00.3V,且接有一个15k的接地负载。处于差分的高态和低态之间的输出电压变动应尽量保持平衡,以能很好地减小信号的扭曲变形。下图是Usb电缆的示意图:图2-1在任何驱动状态下,USB设备必须能接收如图2-2所示的波形。这些波形从一个输出阻抗为3P的恒流电压源直接进入每一个USB数据口。高速USB设备的连接电缆是阻抗为9015%,最大单路时延为26ns的屏蔽双绞线电缆,其到达的最大速率为480Mb/s,并且每个驱动器的阻抗必须在2844之间。低速USB设备在插口端必须要有一个带有串行口连接器的可控制电缆,其速率为12Mb/s。当电缆与设备相连时,在D+/D-线上必须要有一个200450PF的单终端电容器。低速电缆的传播时延必须小于18ns,从而保证信号在其上升沿或 靠近设备的USB连接器上的D+或D_插口USB设备USB设备上的输入保护设备可能互相排斥,故观察数据输入端口时,可能发现由电压生成器产生的信号波形会变形。 图22 USB信号发送的最大输出波形者下降沿的第一个中点产生。Usb信号的发送有其发送的标准,具体如表2-1所示,在该表中,J和K这两个数据态是两个逻辑电平,在系统中,通常被用来进行交换差分数据。差分数据信号的发送并不关心信号经过的地方电平情况,它只要求桥电压在1.32.0V之间。另外,在接收端,空闲态和工作态在逻辑上分别与J态和K态等价。一般而言,数据,空闲信号及唤醒信号的发送标准均由端口的设备类型所决定。如果连结的是高速设备,则USB使用所规定的高速率来发送信号并且有很快的上升沿和下降沿时间,甚至还可用低速率来发送数据,而对于表2-1中所示的低速信号发送标准仅用在低速设备与其所连接的端口之间(上升沿和下降沿时间较长)。USB设备是一个智能型的设备,当它发现主机或集线器的下形端口上没有设备连接时,端口上自带的Rpu电阻将使D+和D-上的电压低于主机或集线器端口的单终端电压,此时该端口不是由集线器控制的,这将在下形端口产生一个SE0态。如果主机或集线器不在控制数据线并且下形端口的SE0态的持续时间超过2.5ns,则此时USB设备将中断信号的发送,此时表示pc将认定没有设备连接到端口上。如果集线器发现其中一根数据线上的电压大于它的临界值的持续时间超过2.5us,则表示pc知道端口上连接了一个设备,便开始信号的发送。表21 信号发送的标准 总线状态 信 号 电 平 开始端的源连接器 (一位时端) 终端的目标连接器 需要条件 接受条件差分的“1”D+Voh(min) D-200mv(D+)Vih(min)(D+)-(D-)200mv差分的“0”D-Voh(min)D+200mvD-Vih(min)(D-)-(D+)200mv单终端“0”(SE0)D+和D-Vol(max)D+和D-Vil(max)D+和D-Vihz(min)D+Vil(max)D+Vihz(min)D-Vihz(min)D+Vihz(min)D-Vih(min)唤醒状态数据K状态数据K状态包开始(SOP)数据线从空闲态转到K态包结束(EOP)SE0近似的为2位时其后仅接着1位时的JSE01位时其后仅接着一位时的J态SE01位时其后仅接着J态包结束(EOP)SE0近似地为2位时其后仅接着1位时的JSE01位时其后仅接着一位时的J态SE01位时其后仅接着J态断开(在下行端口处)N.A.SE0持续时间大于等于2.5微秒连接(在上行端口处)N.A.空闲态持续时间大于等于2毫秒空闲态持续时间大于等于2.5微秒复位D+和D-小于Vol(max)的持续时间大于等于10毫秒D+和D-小于Vil(max)的持续时间大于等于10毫秒D+和D-小于Vil(max)的持续时间大于等于2.5微秒2、电压分布所有USB设备的缺省电压为低电压,当设备要从低电压变化到高电压时,则是由软件来控制的。在允许设备达到高电压之前,软件必须保证有足够的电压可供使用。 USB支持一定范围的外设来提供电压来源和电压消耗,包括如下的部分。 根端口集线器:它是直接与USB主机控制器相连的,并与其有相同的电源来源。从外部获得操作电压(AC或DC)的系统,在每个端口至少支持五个单位负载,这些端口称为高电压端口。由电池组提供电压的系统可以支持一个或五个单位负载。哪些只能支持一个单位负载的端口称为低电压端口。 从总线获得电压的集线器:它的所有内部功能设备和下形端口都从它的上形端口的Vbus上获得电压。在电压升高时,它可以接一个单位负载,经过初始设置后,它可以接五个单位负载。初始设置电压被分配给了集线器,任一固定功能设备和外部端口。它的外部端口只能接一个单位负载,当集线器处于活动或挂起态时,它必须为这个端口提供电流。自给电压集线器:它的任一内部功能设备和下形端口不再从Vbus上获得电压,但当它的其余部分电压下降时,它的USB接口可接一个单位负载并从Vbus处获得电压,以允许该接口能工作。从外部(从USB)获得操作电压的集线器,可在每个端口接五个单位负载。由电池组提供电压的集线器,每端口可接一个或五个单位负载。从总线获得电压的低电压功能设备,该种设备上的所有电压均来自Vbus,在任一时刻,它们最多只能接一个单位负载。从总线获得电压的高电压设备。该种设备上的所需电压均来自Vbus。在电压升高时,它们至多只能接一个单位负载,但当初始设置后,可接五个单位负载。自给电压功能设备,如图17,当它的其余设备电压下降时,它可以接一个单位负载,并从Vbus上获取所需电压,以使USB接口处于活动状态。2.2 USB的数据包格式USB外设施不管是实现什么功能,它总是传输的是数据, 数据位被发送到总线的时候,首先最低有效位(LSb),跟着是下一个最低有效位,最后是最高有效位(MSb)。所有的数据包都从同步字段开始的,同步字段为空闲状态出现在总线上,后面跟着以NRZI编码的二进制串“KJKJKJKK”。同步字段里的最后的2位是同步字段结束的记号,并且标志了包标识符(PID)的开始。所有USB包的同步字段后都紧跟着包标识符(PID),如图2-3所示: 主机和所有功能部件都必须对得到全部PID字段实行完整的译码。任何收到包标识符,如果含有失败的校验字段,或者经译码得到未定义的值,则该包标识符被认为是错误的,而且包的余项将被忽略。图2-3 PID 格式表2-2 PID 类型PID 类型PID 名PID3:0描述标记(Token)输出(OUT)输入(IN)帧开始(SOF)建立(SETUP)0001B1001B0101B1101B在主机到功能部件的事务中有地址+端口号在功能部件到主机的事务中有地址+端口号帧开始标记和帧号在主机到功能部件建立一个控制管道的事务中有地址+端口号数据(DATA)数据0(DATA0)数据1(DATA1)0011B1011B偶数据包PID奇数据包PID握手(Handshake)确认(ACK)不确认(NAK)停止(STALL)0010B1010B1110B接收器收到无措数据包;接收设备部不能接收数据,或发送设备不能发送数据;端口挂起,或一个控制管道请求不被支持。专用(Special)前同步(PRE)1100B主机发送的前同步字。打开到低速设备的下行总线通信。地址字段地址字段通过其地址指定函数,至于是数据包的发出地还是目的地,则取决于标记PID的值。如图2-4所示,ADDR0.6指定了总共128个地址。地址字段用于输入,建立和输出标记。由定义可知,每个ADDR值都定义了单一的功能。图2-4 地址字段端口字段如图2-5所示,当功能部件需要一个以上的端口时,附加的4位的端口(ENDP)字段提供了更灵活的寻址方式。除了端口地址0之外,端口个数是由功能部件决定的。端口字段只对输入,建立和输出标记PID有定义。图2-5 端口字段数据字段数据字段可以在0到1,023字节之间变动,但必须是整数个字节。图2-6为多字节显示格式,每个字节的范围内的数据位移出时都是最低位(LSb)在前。图2-6 数据字段数据包大小随着传送类型而变化。循环冗余校验(CRC)被用来在标记和数据包中保护所有的非PID字段。在上下文中,这些字段被认为是保护字段。PID不在含有CRC的包的CRC校验范围内。数据包格式如图2-7所示,数据包由PID,包括至少0个字节数据的数据区和CRC构成。有2种类型的数据包,根据不同的PID:DATA0和DATA1来识别。2种数据包PID是为了支持数据切换同步而定义的。图2-7 数据包格式数据必须以整数的字节数发出。数据CRC仅通过对包中的数据字段计算而得到,而不包括PID,它有自己的校验字段。2.3 USB的传输类型USB通过通道在主机缓冲区与设备端点间传送数据。在消息通道中传递的数据具有USB定义的格式,它的数据包中包含的数据允许具有设备指定的格式。USB要求任何在通道上传送的数据均被打包,数据的解释工作由客户软件和应用层软件负责。USB提供了多种数据格式,使之尽可能满足客户软件和应用软件的要求。Usb有四种传输方式:控制传输,批量传输,中断传输和同步传输。每个传输类型在以下的几个传输特征上会有不同:可用性,数据包大小、信息流的方向、数据传输的速度、错误处理。下面分别介绍:1、 控制传输控制传输允许访问一个设备的不同部分。控制传输用于传送控制命令(如客户软件和它的应用之间的设置信息、命令信息、状态信息)。控制传输由以下几个事务组成:(1)建立联系,把请求信息从主机传到它的应用设备;(2)零个或多个数据传送事务,按照(1)事务中指明的方向传送数据;(3)状态信息回传。将状态信息从应用设备传到主机。当端点成功地完成了被要求的操作时,回传的状态信息为“SUCCESS”。可用性 每个设备必须在终端0的默认流程中支持控制传输。一个设备也可以有被配置为控制传输的其他流程,但在现实中没有必要有多个流程。即使如果一个设备需要发送许多控制请求,主机是根据请求的数量和大小来分配带宽的,而不是根据控制流程的数量,因此拥有多个控制终端是没有必要的。 USB规定的数据包大小 在全速设备中,数据包的最大值可以是8,16,32或者64B。在低速设备中,最大值是8B。这只包括了数据包中的信息,不包括检验位和起始位。一个包含了少于数据字节数最大值的事务表明这是传输中最后一个事务。信息流的方向 控制传输使用的是消息通道上的双向信息流。所以,一旦一个控制通道被确认之后,这个通道就使用了具有某个端点号的两个端点,一个输入,一个输出。 数据传输的速度控制传输不是用来传输数据的最有效的方法。全速传输除了要传输的数据外,还有一个45B的数据头。低速传输可能传输不超过8B的数据,它被限制为每帧最多三个事务。一个8B的单个低速控制传输使用一个帧的带宽的29,如果总线很忙,则所有的控制传输可能不得不共享保留的10的带宽。这样就限制了速度。 出错处理如果一个设备在一个控制传输中没有返回一个预期的交换包,那么一个pc主机控制器将重试两次。如果主机在重试三次后没有接收到相应,那么它通知需要这个传输的软件,停止与终端的通信,知道问题得到解决。如果一个SETUPB包在上一个传输到达之前到达,则外设就丢弃上一个传输并开始新的一个传输。2、 批量传输批量传输对传输时间不严格的数据传输来说是很有用的。一个批量传输可以发送大量的数据而不会阻塞总线,因为这个传输会为其他类型的传输而延迟,并且会等到总线可用的时候再传输。批量传输可用于从主机发送数据到一个打印机,从一个扫描仪发送数据到主机,对一个磁盘的读和写等等。可用性 只有全速设备可以使用批量传输。设备不需要支持批量传输,但一个特定设备类可能需要它。USB规定的数据包的大小 USB没有规定批量传输通道上数据包的格式。一个批量传输能有一个最大的包的大小值为8,16,32或64B。在列举过程中,主机从设备处读取每一个批量传输的最大包的大小,一次传输过程中,数据的大小可以是小于或者等于这个最大值。如果一个数据包单个包不能发送,那么主机控制器会把这个传输分成多个事务。信息流的方向 这种通道总是单方向的,如果要进行双向传送,必须用两个通道。 数据传输的速度 当总线是空闲时,批量传输可以使用任何类型的最大带宽(最多95),它们有一个很小的头,因此它是所有传输中最快的。出错处理 批量传输使用错误检测。如果一个设备没有返回预期的交换包,pc中的主机控制器最多重试两次。如果接到一个nak交换信息,则主机也会重试。批量传输也使用数据循环位来确保没有丢失数据。3、 中断传输中断传送是为这样一类设备设计的,它们只传或收少量数据,而且并不经常进行传送,但它们有一个确定的服务周期,对中断传送有以下要求:通道的最大服务期得到保证;由于错误而引起的重发在下一服务期进行。可用性 低速和全速设备都可以使用中断传输。设备不需要支持中断传输,但一个设备类可能需要它。USB规定的数据包的大小 USB对中断通道上的数据流格式无要求。一个全速设备可以使用从1到64B之间的任何大小的数据包。低速设备有一个8B的最大值。 信息流的方向 中断通道是单向的。端点描述信息指明了通道的数据流方向。 数据传输的速度 中断传输没有保证的传输速率,只有事务之间保证的最大间隔。一个空闲总线理论上可以在每帧中传输最多19个64B全速中断传输。在实际中,主机不可能把19个传输安排在一个帧中,因此实际最大速率将小于这个值。 出错处理 如果一个设备没有返回一个预期的交换包,则pc的主机控制器将最多重试两次。主机如果从设备接收到nak,它也会重试。中断传输可以使用数据循环值来确保所有的数据都被正确无误的接收到。4、 同步传输在非USB的环境下,同步传输意味着恒定速率、允许错误存在的传输。在USB环境下,要求同步传输能提供以下几点: 固定的延迟下,确保对USB带宽的访问;只要数据能提供得上,就能保证通道上的恒定数据传送速度;如果由于错误而造成传送失败,并不重传数据。当USB同步传输类型被用来支持同步的源和目的时,使用这个传输类型的软件并不要求是同步的。 可用性 只有全速设备可以使用等时传输。设备不需要支持等时传输,但一个设备类可能需要支持它。USB规定的数据包的大小 USB并不对数据格式做要求。如果带宽可用,则一个事务可以传输最多1023个字节。如果数据的数量一个单个包不能发送,则主机控制器会把这个传输分成多个事务。每帧的数据量不必相同。 信息流的方向 同步通道是单方向的。在对端点的描述中指明了与它相连的通道的数据流方向。如果设备要同步的双向流的话,只好用两个同步通道,一个流进,一个流出。 数据传输的速度 等时和终端传输组合最多可以使用90的带宽。一个等时传输每帧最多可以传输1023B,这就留下了31的带宽给其他传输使用。 出错处理 保证大块数据的等时传输的代价是失去错误校正。所以一般用于偶尔,少量错误可以接受的情况下。2.4 USB的设备架构USB设备可被划分三层:底层是传送和接收数据包的总线接口 中间层处理总线接口与不同端点之间的数据路由端节点是数据的终结提供处或使用处,它可被看作数据源或数据接收端。 最上层的功能由串行总线设备提供。驱动程序所要做的就是在这些层上编程满足Usb外设的需要。这里主要讲一下中间层设备架构和如何处理设备请求。1、 USB设备状态USB设备有若干可能的状态,其中一些对于USB与主机(host)来说是外置的,而另外一些对USB设备来说是内置的,出于本论文的目的,现在主要讲外置状态。图28说明了这些外设状态的转化关系。连接状态 Usb外设连接到主机上时的状态。加电状态 USB设备的电源可来自外部电源,也可从USB接口的集线器而来。电源来自外部电源的USB设备被称作自给电源式的。尽管自给电源式的USB设备可能在连接上USB接口以前可能已经带电,但它们直到连线上USB接口后才能被看作是加电状态。而这时候VBUS已经对设备产生作用了。缺省状态 设备加电以后,在它从总线接收到复位信号之前不应对总线传输发生响应。在接收到复位信号之后,设备才在缺省地址处变得可寻址。地址状态 所有的USB设备在加电复位以后都使用缺省地址。每一设备在连接或复位后由主机分配一个唯一的地址。当USB设备处于挂起状态时,它保持这个地址不变。配置状态 在USB设备正常工作以前,设备必须被正确配置。从设备的角度来看,配置包括一个将非零值写入设备配置寄存器的操作。配置一个设备或改变一个可变的设备设置会使得与这个相关接口的终端结点的所有的状态与配置值被设成缺省值。中止状态 为节省电源,USB设备在探测不到总线传输时自动进入中止状态。当中止时,USB设备保持本身的内部状态,包括它的地址及配置。2、 USB标准设备请求这一部分描述的是所有USB设备都定义的标准设备请求。表21列出了所有的标准请求。请求号请求数据源接收方值指针长度(B)数据01HCLEAR_FEATURE无设备,接口终端特性设备,接口终端0无08HGET_CONFIGURATION无设备零设备1配置值06HGET_DESCRIPTOR设备设备描述符类型和指针设备或语言ID描述符长度描述符0AHGET_INTERFACE无接口0接口1可选设置00HGET_STATUS设备设备,接口,终端0设备,接口,终端2端点状态05HSET_ADDRESS无设备设备地址00无09HSET_CONFIGURATION无设备配置值设备0无07HSET_DESCRIPTOR主机设备描述符类型和指针设备或语言ID描述符长度描述符03HSET_FEATURE无设备,接口,终端特性选择符设备,接口,终端0无0BHSET_INTERFACE无接口可选设置接口号1无0CHSYNCH_FRAME设备终端0终端2帧号 表2-1 标准设备请求a、清除特性(ClearFeature()这个请求是被用来清除一个指定的特性。一个ClearFeature( )请求所指的特性如果不能被清除,不存在或指的是不存在的接口或结点号,会产生请求错误。 如果长度不为0,设备响应无定义。 缺省状态:当设备处于缺省状态时,对此请求的反应无定义。 地址状态:在设备处于地址状态时这个请求是合法的,但如果该请求指的是接口或是非零号端结点,会引起请求错误。配置状态:在此状态下,该请求合法。b、取得配置(GetConfiguration()此请求返回当前设备配置值。 如果返回0值表明设备未配置。 如果值,指针,长度的值与上面表中不同,设备响应无定义。 缺省状态:该请求响应无定义。 地址状态:返回0值。 配置状态:非0的 配置值被返回。c、取得描述符(GetDescriptor())这个请求返回存在的描述符。这个标准请求包括三种描述符:设备、配置、及字符串。一个配置描述符的设备请求会一次返回配置描述符,所有的接口描述符和所有接口的端节点的描述符。第一个接口描述符紧跟着配置描述符,随后是接口的端点的描述符。如果有其它的接口与端点,它们的描述符则跟在第一个接口与端点描述符之后。与类有关的描述符,或Usb外设生产厂商定义的描述符跟在标准描述符之后。 所有的设备必须提供一个设备描述符并且至少一个配置描述符,如果一个设备不支持一个请求的描述符,则返回请求错误。 缺省状态:此请求合法。 地址状态:此请求合法。配置状态:此请求合法。d、取得接口设置(GetInterface() 这个请求返回所指接口的选中的可选设置。 有些USB设备的接口配置有互斥的设置。这个请求使得主机决定当前设置。 如果值或长度不依上表设置,设备响应无定义。 如果所指的接口不存在,返回请求错误。 缺省状态:此状态下,设备对该请求响应无定义。 地址状态:设备返回请求错误。 配置状态:此请求合法。e、取得状态(GetStatus ( ) 这个请求返回所指接收者的状态。 如果值或长度不是上表中值,或指针在读取设备状态请求时非0,则设备响应无定义。 缺省状态:设备响应无定义。 地址状态:如果所指的是接口或是一个非0号端点,设备响应返回请求出错。 配置状态:如果所指接口或端点不存在,返回请求错误。f、设置地址(SetAddress ( ) 本请求为主机指定以后与设备通信的地址。如果所指的设备地址大于127或指针或者长度非零,设备响应无定义。设备对SetAddress(0)的响应无定义。 缺省状态:如果地址值非0,那设备将进入地址状态,否则地址仍留在缺省态(此非出错状态)。 地址状态:如果新地址值为0,进入缺省态,否则仍留在地址状态但使用新地址。配置状态:在此状态下设备对此请求的响应无定义。g、设置配置值(SetConfiguration( ) 此请求设置设备配置值 值的低字节指出配置,这个配置值必须为0或与配置描述符中的一个配置相一致。如果配置值为0,设备置地址状态。值的高字节保留。 如果指针,长度或者值的高字节非0,则设备对之的响应无定义。 缺省状态:设备响应无定义 地址状态:如果所指的配置为0,设备停留在地址状态。如果所指的配置与描述符中的一个值相匹配,那个配置就被选中,设备转到配置有。否则,返回请求错误 配置状态:如果配置值为0,设备进入地址状态。如果配置值非0并与描述符中的一个配置相匹配则设备仍留在配置态,但采用新的配置值,否则返回请求错误。h、设置描述符(SetDescriptor ( ) 此请求用于更新或添加新的描述符。 值域高字节指出了描述符的类型,低字节指出了描述符索引。指针域指出了字符串描述符的语言标识,对于其它描述符来说它为0。长度域指出从主机传向设备的字节数。 如果设备不支持该请求则设备返回一个请求错误。 缺省状态:此状态下设备对该请求反应无定义。 地址状态:如果设备支持请求,则为合法。 配置状态:如果设备支持请求,则为合法。i、设置特性(SetFeature ( ) 这个请求用来设置或使一个特性生效。 SetFeature ( )请求如果指出一个不存在的特性会使得设备在交换状态阶段返回STALL信号。 如果SetFeature ( )指的是一个不存在的接口或端点,设备返回一个请求错误。 缺省状态:设备响应无定义。 地址状态:合法、除非请求错误。 配置状态:合法。j、设置接口(SetInterface ( ) 此请求让主机为指定的接口选择一个设置。 如有USB设备接口配置中有互斥设置。此请求让主机选择所要的设置。如果设备的接口只支持缺省设置,在状态交换阶段设备返回STALL 如果所指接口或设置不存在,设备返回请求错误。 缺省状态:设备响应无定义。 地址状态:设备返回请求错误。 配置状态:合法。k、同步帧(SynchFrame ( ) 该请求用来设置或返回一个结点的同步帧。 如果所指的端点不支持此请求,设备返回一个请求错误。 缺省状态:设备响应无定义。 地址地址:设备返回请求错误。配置状态:此请求合法。除了11种标准请求外,USB允许类和供应商也定义他们自己的请求,这里就不在赘述了。第三章 USB驱动程序的开发设备驱动是保证应用程序访问硬件设备的软件组件。硬件设备可能是打印机,调制解调器,键盘,视频显示器或者任何连接到计算机的电子电路。设备可能在计算机内部,或者是使用电缆连接到计算机上。设备可以是标准类型,也可以不是,也包括自定义的设备。一个设备驱动使得应用程序不必知道物理连接,信号和与一个设备通信需要的协议等细节。应用程序是用户运行的程序,包括支持自定义硬件的特殊用途的应用程序。设备驱动可以保证应用程序代码只通过外设名字(如Legend Keyboard)访问外设或者端口目的地。应用程序不需要知道外设连接端口的物理地址,不需要精确监视和控制外设需要的交换信号。设备驱动通过在应用层和硬件专用代码之间的转化来完成它的任务。3.1 驱动程序与USB设备的通讯USB设备的选择很多外设符合标准类,例如硬盘,光驱,打印机,键盘和鼠标。对于这些外设,Windows包括通用驱动,这个类中的设备都可以使用。如果设备具有独特的功能,则供应商会提供一个称为mini-driver的附加驱动,对通用驱动加以补充。一些外设提供接口选择,选项中可能包括Usb。一个键盘可以使用原始的接口,也可以是Usb接口。在这种情况下,mini-driver可以在通用驱动和设备使用的接口之间通信。Windows为Hid(Human Interface Device)类提供了mini-driver,包括键盘和鼠标。对于其他设备,Windows不支持Usb接口,因此,产品供应商必须提供完整的驱动程序。USB驱动的Win32驱动模式Windows的Usb设备驱动必须遵循微软在Win98和更新的版本中为用户定义的Win32驱动模式。这些驱动以WDM(Windows Driver Model)为主,扩展名为sys。像其他低级驱动一样,WDM驱动不能驱动应用程序,因为它和操作系统以更高的优先级通信。WDM驱动可以允许或拒绝应用程序访问设备。USB的驱动层分层驱动USB通信使用分层驱动模型,每层处理一部分通信过程。把通信分成层是有效的,因为这样可以使不同的设备在一些任务上使用相同的驱动。举个例子,所有设备都连接到USB上,因此有一套可以被所有设备访问的,包括操作系统中的,用来处理USB专用通信的驱动使明智的。也可以选择使得每个设备驱动直接与USB硬件通信,这样就会出现很多重复的劳动。Windows中管理与设备通信的部分使I/O子系统。子系统有几个层,每个层包含一个或多个处理一套相关任务的驱动。系统或者设备请求按一定的顺序从一个层转到相邻层。在I/O子系统中的一个重要要素使USB子系统,包括处理所有设备的USB专门通信的驱动。这个驱动使用的协议组被称为一个堆栈,我们可以把它看成层是一个叠着一个堆起来的,通信是按顺序从上到下通过这个堆栈。一般设备通信是通过IRP(IO请求包)来完成的。IRP是一个内核“对象”,它是一个预先定义的结构,带有一组对它进行操作的IO管理器函数。IO管理器接受到一个IO请求,即IRP,先初始化,然后把它传递到合适的驱动程序栈中的驱动程序。一个IRP有一个固定的首部和可变数目的IRP栈单元块。如图31所示。每个IO请求有一个主功能代码(如IRP_MJ_CREATE对应于文件的打开)并可能有次功能代码。例如IRP_MJ_PNP即插即用IRP有几个次功能(如IRP_MN_START_DEVICE)。表31列出了常用的主功能代码。表31 常用的IRP主功能代码IRP_MJ_CREATE创建或打开设备文件IRP_MJ_CLOSE关闭文件IRP_MJ_WRITE写文件IRP_MJ_READ读文件IRP_MJ_CLEANUP取消文件句柄上的任何等待的IRPIRP_MJ_DEVICE_CONTROL设备IO控制IRP_MJ_POWER电源管理请求IRP_MJ_PNP即插即用消息IRP_MJ_SHUTDOWN关闭通知IRP的固定部分含有IRP的固定属性,每个栈单元(一个IO_STACK_LOCATION)事实上含有大多数有关的IRP参数。当一个IRP由多个驱动程序处理时,使用多个IRP栈单元。每个驱动程序从当前IRP栈单元得到它的IRP参数。如果把一个IRP沿当前设备的驱动程序向下传递,必须使用正确的参数设置下一个栈单元。向下传递的参数必须与正在处理的参数不同。IRP首部当一个写IO请求转换成一个IRP时,IO管理器填写IO_STACK_LOCATION主要的IRP首部,并构造第一个栈单元。对于写,IRP首部IO_STACK_LOCATION含有用户缓冲区信息。如果使当前栈单元用缓冲IO,IRP的Associated-Irp.SystemBuffer域含有一个指向用户缓冲区的非分页副本IO_STACK_LOCATION的指针:对于直接IO,IRP的MdlAddress域有一个指向用户缓冲区MDL的指针。图31 IRP概貌IRP栈单元含有主要的写参数。栈单元的MajorFunction域含有主功能代码IRP_MJ_WRITE,指明请求一次写。前面已经说过,如果调用另一个驱动程序,必须建立下一个栈单元。这意味在理论上可以把IRP主功能代码改成别的功能代码。一般我们不这么做。在处理大的传输上,必须把这个IRP向下发送几次,每个驱动程序完成不同的功能。在驱动程序栈中处理IRP在实际的操作中,IO栈单元通常不用于更改这些基本的IRP参数,IRP栈单元通常用于允许一个IRP被设备栈中的所有驱动程序处理。图32说明一个IRP如何被设备栈中的四个驱动程序处理。第一个IRP到达最高层的驱动程序1,它使用函数IoGetCurrentIrpStackLocation()获得指向当前栈单元的指针。这个图说明它返回最上层的IRP栈单元。驱动程序1决定它需要把这个IRP沿着设备栈向下传递处理。这个IR
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年宜昌市消防救援支队政府专职消防员招聘48人考前自测高频考点模拟试题附答案详解(考试直接用)
- 2025辽渔集团有限公司拟聘人员笔试历年参考题库附带答案详解
- 2025春季厦门银行校园招聘模拟试卷及参考答案详解
- 2025福建长乐区建设发展集团有限公司相关岗位招聘1人(第三批)笔试历年参考题库附带答案详解
- 2025福建福州捕电科技有限公司招聘12人笔试历年参考题库附带答案详解
- 2025湖南中烟工业有限责任公司博士研究生招聘拟录用人员笔试历年参考题库附带答案详解
- 2025冕宁县人民医院考核招聘编制外康复技师6人模拟试卷及答案详解(典优)
- 2025年湖北襄阳东津创业投资有限公司社会招聘拟聘用人员笔试历年参考题库附带答案详解
- 2025四川长虹杰创锂电科技有限公司招聘设备工程师岗位1人笔试历年参考题库附带答案详解
- 2025河北保定市雄安新区雄县事业单位招聘89人模拟试卷及答案详解(有一套)
- 人教PEP版(2024)四年级上册英语-Unit 2 My friends 单元整体教学设计(共6课时)
- 管桩试桩方案
- 血液科医师晋升副(主)任医师难治性伯基特淋巴瘤病例分析专题报告
- 癌性疼痛中西医结合诊疗指南
- 冷库建设工程施工进度计划及保证措施
- 建筑设计行业2024年财务挑战解析
- 慢性病防治健康教育知识讲座
- 中国石化加油站视觉形象(VI)标准手册-课件
- 小学数学新旧知识关联
- 退费账户确认书
- 国家开放大学《政治学原理》章节自检自测题参考答案
评论
0/150
提交评论