搜档网
当前位置:搜档网 › 通用串行总线USB的驱动程序设计

通用串行总线USB的驱动程序设计

通用串行总线USB的驱动程序设计
通用串行总线USB的驱动程序设计

文章编号:1009-8119(2005)04-0040-03

基于WDM的USB驱动程序设计

赵娟1 仲顺安1 郭磊2

(1.北京理工大学信息科学技术学院,北京 100081

2.石家庄陆军参谋指挥学院教育技术专业,石家庄 050064)

摘要简单介绍了USB的特性。为了介绍USB驱动,重点阐述了WDM驱动程序的原理和Windows系统内核管理机制和应用程序的区别。并给出了利用Driverstudio的C++语言编写的例程。

关键词 USB设备,WDM,操作系统,驱动程序

The Implementation of the USB Driver Based on WDM

Zhao Juan Zhong Shun'an Guo Lei

Abstrct The attribute of the USB is descripted in the paper. For developing usb driver, the mechanism of kenerl management and the privilege level of applications in window2000 are introduced in the paper. An example of the driver handling USB transfer programmed by using C++ with the help of the driverstudio is given. Keyword USB device,WDM,OS,Driver

1 引言

USB,全称是Universal Serial Bus(通用串行总线),它是由Compaq、Microsoft、Intel、IBM等七家公司共同开发的,旨在解决日益增加的PC外设与有限的主板插槽和端口之间的矛盾而制定的一种串行通信的标准,自1995年在Comdex上亮相以来已广泛地为各PC厂家支持。现在市场上几乎所有的PC机器都配备了USB接口,其优点是:

? 速度快。USB有高速和低速两种方式,主模式为高速模式,速率为12Mbps;另外,为了适应一些不需要很大吞吐量和很高实时性的设备,如鼠标等,USB还提供低速方式,速率为1.5Mbps。

? 设备安装和配置容易。安装USB设备不必再打开机箱,加减己安装过的设备完全不用关闭计算机。所有USB设备支持热插拔,系统对其进行自动配置,彻底抛弃了过去的跳线和拨码开关设置。

? 易于扩展。通过使用Hub扩展可连接多达127个外设。标准USB电缆长度为3m(5m 低速)。通过Hub或中继器可以使外设距离达到30m。

? 能够采用总线供电。USB总线提供最大达5V电压和500mA电流。

? 使用灵活。USB共有4种传输模式:控制传输(control)、同步传输(synchronization)、中断传输(interrupt)、批量传输(bulk),以适应不同设备的需要。

2 WDM驱动程序的介绍

WDM(Windows Driver Model)是微软提出的一种全新的设备驱动程序模型。它是在Windows NT内核驱动程序模型(Kernel_model Driver Mode)的基础上发展起来的,增加了对即插即用(PnP)、高级电源管理(Power Management)、Windows管理接口(WMI)的支持。更重要的是,WDM是一种通用的驱动模式,提供了包括USB、IEEE1394和HID等在内的一系列驱动程序类。在 Windows 98和 Windows 2000中, WDM驱动程序均可正常使用。

在大多数操作系统中,应用程序和操作系统本身是分开的:操作系统代码运行在特权处理器模式(也称核心态),并有权访问系统数据和硬件;应用程序运行在非特权处理器模式(也称用户态)。当用户态程序调用系统服务时,处理器捕获该调用,然后把调用的线程切换到核

心态。当系统服务完成后,操作系统将线程描述表切换回用户态,允许调用者继续进行。

为防止用户应用程序访问或更改重要的操作系统数据,Windows NT使用两种处理器访问模式,用户态和核心态。用户应用程序代码在用户态下运行,OS代码(如系统服务和驱动程序)在核心态下运行。核心态是处理器的一种执行模式,它允许访问所有的系统内存和所有的CPU指令。Windows 2000操作系统中有两种基本的驱动程序:用户模式驱动程序和内核模式驱动程序。USB设备驱动程序使用内核模式,按照内核模式的分层结构,驱动程序分为高层驱动、中间层驱动、底层驱动3个部分。底层的主机控制驱动程序直接作用于硬件,中间层驱动处理包括总线类驱动和根集线器驱动,负责总线列举、电源管理等在内的USB事务以及在根集线器相连的下游设备的初始化等任务。这些驱动程序的特权级别高于应用程序软件。这样,处理器就为操作系统的设计者提供了一个必要的基础,保证了应用程序的不当行为不会破坏系统的稳定性。

Windows NT融合了分层操作系统和客户服务器或称为内核OS的特点。对性能影响很大的OS组件在核心态下运行。在核心态下,组件可以和硬件交互,也可以在组件之间交互,并且不会引起描述表切换和模式转换。例如,内存管理器、高速缓存管理器、对象及安全管理器、网络协议、文件系统、所有线程和进程管理,都运行在核心态。当然,所有这些组件都应该受到保护,以避免被有错误代码的应用程序侵扰,而应用程序不能直接访问OS特权部分的代码和数据(尽管它们可以快速调用其它的内核服务)。这种保护是使Windows NT成为既坚固又稳定的应用程序服务器的原因之一。

WDM驱动程序有一个主要的初始化入口点,即一个称为DriverEntry的例程;它有一个标准的函数原型,当WDM驱动程序被装入时,内核调用DriverEntry例程。所有对各种IRP 的处理例程都在此入口函数中做出定义。

大多数的WDM设备对象,都是在即插即用管理器调用AddDevice例程入口点被创建的。插入新设备后,当系统找到由安装信息所指示的驱动程序时,这个例程调用在此之后,一系列的即插即用IRP被发送到驱动程序,设备驱动程序可进行相应的功能处理。

3 USB设备驱动程序的实现

USB系统主要由主控制器(Host Controller)、USB Hub和USB外设(Peripherals Node)组成系统拓扑结构。在应用程序可以与一个USB设备通信之前,主机需要知道设备支持哪些传输类型和终端,主机也必须分配一个地址给设备,主机通过一个被称为枚举的信息交换来完成这些工作。枚举过程:集线器的一个任务就是检测设备的连接与断开,每个集线器都有一个中断流程来通知主机报告这些事情。在系统启动的时候,主机查询它的根集线器来了解有哪些设备已经连接上了,包括其他集线器和连接到这些集线器的设备。在启动后,主机持续周期性地查询了解是否有设备连接或断开。

一旦发现一个新设备,主机发送一系列的请求给这个设备的集线器,使这个集线器在主机和这个设备之间建立一个通信渠道。然后主机试图枚举这个设备,枚举是使得主机的设备驱动程序能与这个设备通信的最基本的信息交换。这个过程由如下动作组成:分配一个地址给设备,从设备读取描述数据,分配和载入一个设备驱动程序以及从接收到的数据中选择一个配置。然后设备就被配置完毕,并且准备好使用它的配置中支持的任何终端来传输数据。

主机的枚举是通过给终端0发送包含标准USB请求的控制传输。所有的 USB设备必须支持控制传输、标准USB请求和终端0。对一个成功的枚举来说,设备必须对每一个请求响应并返回请求的信息。从用户的角度看,枚举应该是不可见和自动的,除了一些情况下如申明发现一个新设备和是否成功配置这个新设备的窗口,有时在第一次使用时,用户需要提供一个右INF文件和设备驱动程序的磁盘。

在一个USB的外设中,外设的程序代码包含了主机将请求的信息,并且程序代码必须能

识别和响应这些信息的请求。在Windows不需要编写枚举的程序,因为Windows自动处理枚举过程。Windows将查找一个被称为INF文件的特殊文本文件,这个文件会告诉Windows哪个驱动程序适合这个设备。

4 USB驱动实例

开发WDM驱动程序有两种方法,一种利用微软提供的98DDK和2000DDK驱动程序开发包,另外一种是专用驱动程序开发工具,如Compuware Numega公司的Driverstudio, KRF,Tech 公司的WinDriver。后者给出驱动程序的框架,并对DDK中操作进行封装,因此减少了开发时问,提高了效率。DriverWorks其实是对DDK函数进行了类的封装。因此用C++语言开发WDM,相对来说更加方便。笔者是自主开发USB IP核,例子中主要测试批传输的读入写出。

用Driverworks生成的驱动程序框架主要包含两个类,本设备驱动程序名为Usbtran,所以这两个类分别为Usbtran和UsbtranDevice。为了使读者对Driverworks生成的驱动程序框架有更加清楚的了解,结合驱动程序原理和DDK的做法,先对其做一个剖析。

SPec类继承Kdriver,在所有的驱动程序中,都有一个初始化的函数入口 DriverEntry,该函数完成驱动程序处理例程的登记,如读写、退出等。所有驱动程序的这一工作几乎雷同,因此DriverWorks将其封装成一个类--Kdriver,当然其中有设备的添加和管道的初始化。本驱动程序有三个管道,其中控制端点0无须初始化,因为它总能使用。Bulk管道的初始化如下:

m_Endpoint1IN.Initialize(m_Lower,0x81,64);

m_Endpoint1OUT. Initialize(m_Lower,0x1,64);

UsbtranDevice类继承KpnpDevice,而KpnpDevice是从Kdevice继承而来。Kdevice 主要是以设备为对象,对设备栈进行管理以及Irp经过该设备栈时进行一些相应的动作。而UsbtranDevice是在KDevice的基础上,处理一些来自于Pnp管理器的消息以及IO管理器的消息等。其主要处理的消息如下:

virtual NTSTATUS OnStartDevice(KIrp I);

virtual NTSTATUS OnStopDevice(KIrp I);

virtual NTSTATUS OnRemoveDevice(KIrp I);

virtual NTSTATUS DefaultPnp(KIrp I);

virtual NTSTATUS DefaultPower(KIrp I);

virtual NTSTATUS OnDevicePowerUp(KIrp I);

virtual NTSTATUS OnDeviceSleep(KIrp I);

每一个消息函数,Driverworks都已经做好了框架,如果需要特别的处理,编程者可以在其中加入代码。

UsbtranDevice有几个特别的成员函数:

KUsbLowerDevice m_Lower;

KUsbInterface m_Interface;

KUsbPipe m_Endpoint1In;

KUsbPipe m_Endpoint1Out;

在本例的框架都由driverstudio自动添加,需要改动的bulk的读写部分的代码如下t << "Entering SampleDevice::SerialRead, " << I << EOL;

NTSTATUS status = STATUS_SUCCESS;

PUCHAR pBuffer = (PUCHAR) I.BufferedReadDest();//取得返回数据BUFF的指针ULONG dwTotalSize = I.ReadSize(CURRENT); // Requested read size

char buff[512];

int n =512, j = (n % 26);

for (int i=0; i

{ buff[i] = 'a' + j; }

buff[dwTotalSize]='\0'; //指定串尾

strcpy((char *)pBuffer,buff); // 把给应用程序的数据拷贝给返回BUFF

t << "The string you where read is \"" << buff << "\"" << EOL; // 输出调试信息

ULONG dwBytesRead = strlen(buff); // Count of bytes read

https://www.sodocs.net/doc/d06937655.html,rmation() = dwBytesRead; // 返回给应用程序的信息的字节个数

I.Status() = status;

m_DriverManagedQueue.PnpNextIrp(I);

这样,这个驱动程序的代码就完成了,用VC++ 6.0进行编译就可到所需的驱动程序。当然,相应的安装程序的.inf文件需要自己写。该文件如果只装在 Windows98下还比较简单,但若在Windows 2000下,则要仔细看 DDK的例子,而且 Windows2000似乎有一个Bug,就是明明已经找到了驱动程序,安装向导却说没找到,但只要直接点击"下一步",就可以成功完成安装。在用户层还要有相应的代码,用来打开驱动程序。其方法如下:

HANDLE hDevice= 0;

Hdevice = CreateFile("\\\\.\\ SpecDevice()",

GENERIC.READ|GENERIC.WRITE,

FILE.SHARE.READ|FILE.SHARE.WRITE, NULL,

OPEN.EXISTING,

FILE.ATTRIBUTE.NORMAL|FILE.FLAG,

OVERAPPED,

NULL

);

以上实例已在DriveWorks和VC++ 6.0中调试通过。

5 结束语

WDM作为一种设备驱动程序模型,自Windows98尤其是Windows2000以来,已成为一种统一的驱动模式。USB技术使用广泛,但大多要开发自己的设备驱动程序,如用DDK来开发,入门异常困难,而DriverWorks开发设备驱动程序,则快捷方便,必将有着广阔的应用前景。

参考文献

1 武安河, 邰铭, 于洪涛编著. WDM设备驱动程序开发. 北京: 电子工业出版社, 2003

2 徐志军, 徐光辉编著. CPLD/FPGA的开发与应用. 北京: 电子工业出版社, 2002

3 Don Anderson, Dave Dzatko著. USB系统体系. 北京: 中国电力出版社, 2003

4 张凡, 盛珣华, 戴胜华著. 微机原理与接口技术. 清华大学出版社, 2004

通用串行总线接口——USB

通用串行总线接口——USB 我相信大家都对USB有一定的了解吧。但是也不能排除有不懂的,不过没关系,下面我就把这一计算机外设接口技术——USB来个全面介绍。我以几个章节来介绍USB的概念、基本特性以及它的应用,让大家对USB有个全面的认识。 概念篇 由于多媒体技术的发展对外设与主机之间的数据传输率有了更高的需求,因此,USB 总线技术应运而生。USB(Universal Serial Bus),翻译为中文就是通用串行总线,是由Conpaq,DEC,IBM,Inter,Microsoft,NEC和Northen Telecom等公司为简化PC与外设之间的互连而共同研究开发的一种免费的标准化连接器,它支持各种PC与外设之间的连接,还可实现数字多媒体集成。 USB接口的主要特点是:即插即用,可热插拔。USB连接器将各种各样的外设I/O端口合而为一,使之可热插拔,具有自动配置能力,用户只要简单地将外设插入到PC以外的总线中,PC就能自动识别和配置USB设备。而且带宽更大,增加外设时无需在PC内添加接口卡,多个USB集线器可相互传送数据,使PC可以用全新的方式控制外设。USB可以自动检测和安装外设,实现真正的即插即用。而USB的另一个显著特点是支持“热”插拔,即不需要关机断电,也可以在正运行的电脑上插入或拔除一个USB设备。随着时间的推移,USB将成为PC的标准配置。基于USB的外设将逐渐增多,现在满足USB要求的外设有:调制解调器,键盘,鼠标,光驱,游戏手柄,软驱,扫描仪等,而非独立性I/O连接的外设将逐渐减少。即主机控制式外设减少,智能控制控制外设增多。USB 总线标准由1.1版升级到2.0版后,传输率由12Mbps增加到了240Mbps,更换介质后连接距离由原来的5米增加到近百米。基于这点,USB也可以做生产ISDN以及基于视频的产品。如数据手套的数字化仪提供数据接口。USB总线结构简单,信号定义仅由2条电源线,2条信号线组成。 基本特性 https://www.sodocs.net/doc/d06937655.html,B的硬件结构 USB采用四线电缆,其中两根是用来传送数据的串行通道,另两根为下游(Downstream)设备提供电源,对于高速且需要高带宽的外设,USB以全速12Mbps的传输数据;对于低速外设,USB则以1.5Mbps的传输速率来传输数据。USB总线会根据外设情况在两种传输模式中自动地动态转换。USB是基于令牌的总线。类似于令牌环网络或FDDI基于令牌的总线。USB主控制器广播令牌,总线上设备检测令牌中的地址是否与自身相符,通过接收或发送数据给主机来响应。USB通过支持悬挂/恢复操作来管理USB总线电源。USB系统采用级联星型拓扑,该拓扑由三个基本部分组成:主机(Host),集线器(Hub)和功能设备。 主机,也称为根,根结或根Hub,它做在主板上或作为适配卡安装在计算机上,主机包含有主控制器和根集线器(Root Hub),控制着USB总线上的数据和控制信息的流动,每个USB系统只能有一个根集线器,它连接在主控制器上。 集线器是USB结构中的特定成分,它提供叫做端口(Port)的点将设备连接到USB总线上,同时检测连接在总线上的设备,并为这些设备提供电源管理,负责总线的故障检测和恢复。集线可为总线提供能源,亦可为自身提供能源(从外部得到电源),自身提供能源的设备可插入总线提供能源的集线器中,但总线提供能源的设备不能插入自身提供能源的集线器或支持超过四个的下游端口中,如总线提供能源设备的需要超过100mA电源时,不能同总线提供电源的集线器连接。 功能设备通过端口与总线连接。USB同时可做Hub使用。

通用串行总线(USB)原理及接口设计

通用串行总线(USB)原理及接口设计 类别:接口电路阅读:1964 作者:广州五山华南理工大学电子与通信工程系98级硕士研究生(510641)刘炎冯穗力叶梧来源:《电子技术应用》 通用串行总线(USB)原理及接口设计摘要:以USB1.1为基础讨论了USB的基本原理、工作流程、通信协议和相应的关键技术,并介绍了一种USB接口的10M以太网卡的设计方案。已经发布的USB2.0支持480Mbps的高速数据传输,这将使PC可以通过USB接口传输更高速更大量的数据。还论述了USB2.0的改进和优点。关键词:通用串行总线(USB) 设备驱动程序WDM 通用串行总线USB(UniversalSerialBus)是Intel、Microsoft等大厂商为解决计算机外设种类的日益增加与有限的主板插槽和端口之间的矛盾而于1995年提出制定的。它是一种用于将适用USB的外围设备连接到主机的外部总线结构,主要用在中速和低速的外设。USB同时又是一种通信协议,支持主机和USB的外围设备之间的数据传输。目前较多设备支持的是USB1.1 1 ,最新的USB2.0 3 已于2000年4月正式发布。 USB设备具有较高的数据传输率、使用灵活、易扩展等优点。 USB1.1有全速和低速两种方式,低速方式的速率为1.5Mbps,支持一些不需要很大数据吞吐量和很高实时性的设备,如鼠标等;全速模式为12Mbps,可以外接速率更高的外设。在刚刚发布的USB2.0中,增加了一种高速方式,数据传输率达到480Mbps,可以满足更加高速的外设的需要。 安装USB设备不必打开主机箱,它支持即插即用(PlugandPlay) 和热插拔(HotPlug)。当插入USB设备的时候,主机检测该外设并且通过自动加载相关的驱动程序来对该设备进行配置,并使其正常工作。 1USB的结构与工作原理 1.1物理结构 USB的物理拓扑结构如图1所示。在USB2.0中,高速方式下Hub使全速和低速方式的信令环境独立出来,图2中显示了高速方式下Hub的作用。 通过使用集线器(Hub)扩展可外接多达127个外设。USB的电缆有四根线,两根传送的是5V的电源,另外的两根是数据线。功率不大的外围设备可以直接通过USB总线供电,而不必外接电源。USB总线最大可以提供5V500mA电流,并支持节约能源的挂机和唤醒模式。 1.2USB设备逻辑结构 USB的设备可以分成多个不同类型,同类型的设备可以拥有一些共同的行为特征和工作协议,这样可以

[M3_SN] 通用串行总线USB

通用串行总线(USB)控制器 Stellaris USB控制器支持USB HOST/Device/OTG功能,可运行在全速和低速模式。它符合USB2.0标准,包含挂起和唤醒信号。它包含32个端点,其中包含2个用于控制传输的专用链接端点(一个用于输入,一个用于输出),其他30个端点带有可软件动态定义大小的FIFO并以支持多包队列。FIFO支持uDMA,可有效降低系统资源的占用。USB Device启动方式灵活,可软件控制是否在启动时连接。USB控制器遵从OTG标准的会话请求协议(SRP)和主机协商协议(HNP)。 Stellaris USB模块特性 ?符合USB-IF认证标准 ?支持USB2.0全速模式(12Mbps)和低速模式(1.5Mbps) ?集成PHY ?4种传输类型:控制传输(Control),中断传输(Interrupt),批量传输(Bulk),等时传输(Isochronous) ?32个端点 -1个专用的输入控制端点和1个专用输出控制端点 -15个可配置的输入端点和15个可配置的输出端点 ?4KB专用端点内存空间:可支持双缓存的1023字节最大包长的等时传输 ?支持VBUS电压浮动(droop)和有效ID检测,并产生中断信号 ?用于高效传输的uDMA -用于发送和接收的独立通道多达3个输入端点和3个输出端点 -当FIFO中包含需要的大量数据时,触发通道请求

16.1 模块框图 图16.1 USB模块框图 16.2 信号描述 表16-1 和表16-2列出了USB控制器的外部信号及其功能描述。一些USB控制器的信号是GPIO的复用功能,这些管脚在复位时默认设置为GPIO信号。表中“服用管脚/分配”一列列出了USB信号的可能管脚位置。当需要使用USB功能时,应将相关GPIO备选功能选择器(GPIOAFSEL)中的AFSEL位置位,表示启用GPIO的备选功能;同时还应将括号内的数字写入GPIO端口控制寄存器(GPIOCTRL)的PMCn 位域,表示USB信号分配给指定的GPIO管脚。USB0VBUS和USB0ID信号通过清除GPIO数字使能寄存器(GPIODEN)中相应的DEN位来配置。关于配置GPIO的详细信息,请参阅通用输入/输出(GPIO)一章。其余信号(“复用管脚/分配”列中标注”固定”的管脚)具有固定的管脚分配和功能。 注意:当用于OTG模式时,由于USB0VBUS和USB0ID是USB专用的管脚,不需要配置,直接连接到USB连接器的VBUS和ID信号。如果USB控制器专用于主机或设备,USB通用控制和状态寄存器(USBGPCS)中的DEVMODOTG和DEVMOD位用于连接USB0VBUS和USB0ID到内部固定电平,释放PB0和PB1管脚用于通用GPIO。当用作自供电的设备时,需要检测VBUS值,来确定主机是否断开VBUS,从而禁止自供电设备D+/D-上的上啦电阻。此功能可通过将一个标准GPIO连接到VBUS实现。 表16-1. USB信号(100LQFP封装)

USB通用串行总线

第7章 USB通用串行总线 7.1 概述 7.1.1 USB发展过程 通用串行总线USB(Universal Serial Bus)由Compaq、IBM 、Intel、Microsoft、NEC等公司于1994年联合提出。 1996年发布USB1.0标准 1998年发布USB1.1标准 两种传输速度:1.5Mdbs(低速)、12Mdbs (全速) 热拔插和即插即用 最多可同时连接127台设备 1999年发布USB2.0标准 1)最高传输速度达480Mdbs(高速),是USB1.1的40倍 2)向下兼容USU1.1 7.1.2 USB的设计目标及特点 设计准则: 1)易于扩充 2)协议灵活 3)支持音频/视频等实时数据的传输 4)提供价格低廉的标准接口 USB的特点: 1)速度快

2)设备安装和配置容易 3)易于扩展 4)使用灵活 5)可总线供电 6)成本低 7.1.3 USB的接口特性 https://www.sodocs.net/doc/d06937655.html,B的输出 . 差分驱动,支持半双工方式 . 电缆阻抗范围: 76.5 – 103.5Ω

. 驱动器输出阻抗匹配电阻:28 – 44Ω . 所有USB设备的上游端口,按设备的最高速定义。 https://www.sodocs.net/doc/d06937655.html,B的接收 . 差分接收 7.1.4 USB信号的定义

7.1.5 数据的编码与解码 NRZI的编码方法不需独立的时钟信号和数据一起发送,电平跳变代表“0”,没有电平跳变代表“1”。在数据被编码前,在数据流中每6个连续的“1”后插入1个“0”,从而强迫NRZI码发生变化,接收端必须去掉这个插入的“0”。 位填充和NRZI编码 如果接收端连续接收到7个逻辑“1”,则认为发生

通用串行总线连结设备的制作流程

一种通用串行总线(USB)连结装置,用以将外接周边装置与电子产品连结在一起,包括一USB接口,装设于电子产品中,能提供外接周边装置所需电源与数据传输功能,此电子产品具有一电源供应器,此USB接口装置经由此电源供应器提供外接周边装置所需的工作电流及电压,此USB接口装置具有一负载切换开关,位于电源供应器与每个外接周边装置之间,且此负载切换开关的最大负载值大于0.5安培。另外,还包含一USB缆线,分别连结于USB接口与外接周边装置之间,其中USB缆线至少包括一条主要缆线,并分叉延伸出的一条电源支线,主要缆线用以提供数据传输的功能,而电源支线则用以提供外接周边装置所需电源。 技术要求 1.一种通用串行总线(USB)接口装置,装设于一电脑主机中,用以连结于 一外接周边装置与该电脑主机之间,该电脑主机具有一电源供应器,该USB 接口装置经由该电源供应器提供该外接周边装置所需的电源,该USB接口装 置至少包含:

一负载切换开关,位于该电源供应器与该外接周边装置之间,该且负载 切换开关的最大负载值大于0.5安培。 2.如权利要求1所述的USB接口装置,其特征在于,所述负载切换开关 是由电流控制芯片、保险丝、与可复式电子保险丝的组合中选取。 3.如权利要求1所述的USB接口装置,其特征在于,所述外接周边装置 是由光盘驱动器、烧录及及硬盘驱动器所组成的族群中所选出。 4.一种USB接口装置,装设于一电脑主机中,连结于至少一个外接周边 装置与该电脑主机之间,该电脑主机具有一电源供应器,该USB接口装置经由该电源供应器提供该外接周边装置所需的电源,该USB接口装置至少包含: 一负载切换开关,位于该电源供应器与每一该外接周边装置之间,该且 负载切换开关的最大负载值大于0.5安培; 一缆线,是用以连结该外接周边装置与该电脑主机,该缆线还至少包括: 一条主要缆线,用以传输信号,以及 一条电源支线,由该主要缆线上分叉延伸出来,用以对该外接周边装置 提供电源。 5.如权利要求4所述的USB接口装置,其特征在于,所述主要缆线内部 具有四条彼此分离的线路,分别为电压线(Vcc)、第一信号线(信号1)、第二信号线(信号2)、与接地线(GND)。 6.如权利要求5所述的USB接口装置,其特征在于,所述电源支线内部 具有两条线路,分别跨接于该主要缆线内部的该电压线(Vcc)与该接地线(GND)。 7.一种USB缆线,用以连结一外接周边装置与电脑主机,该USB缆线 至少包括:

USB设备量产导致通用串行总线控制器显示感叹号解决办法

USB设备量产导致通用串行总线控制器显示感叹号解决办法 2012-11-19 12:11:53 昨天量产U盘的时候死机了,刚开始还没出现什么问题,在随后的使用中突然所有的USB设备居不能使用了,打开Windows 7设备管理器里面一看,通用串行总线控制器显示一大片感叹号,所有的USB设备均不能使用了,耗费了不少功夫,终于搞定这问题了。 解决过程 症状:Windows 7系统里所有USB设备无法使用,鼠标、键盘灯不亮,USB集线器也不能使用,插U盘也无反映。简而言之,电脑的所有USB设备均无法正常工作。点开相应USB设备的属性,通用串行总线控制器错误提示:由于其配置信息(注册表中的)不完整或已损坏,Windows 无法启动这个硬件设备(代码19)。 原因:造成这种现象的原因,是由于量产工具自带的驱动造成的,并且一般量产工具也都提供驱动卸载的功能。所以在量产完成后,执行驱动卸载工具,把量产工具自带的驱动卸载掉,即不会发生此现象。(一般量产软件会自动清除自己的信息,除非你安装驱动) 开始我以为鼠标坏了,插到别人电脑上工作正常。接下来我以为USB接口供电不足,但是说不通,之前都能正常工作。我又以为是笔记本的主板USB供电出了问题,事实证明,这是自己吓自己的行为。 还好我的触摸板能工作,要不然光靠键盘操作累死人啊。打开设备管理器,卸载感叹靠的USB 设备,然后在设备管理器的菜单中,点“操作”-“扫描检测硬件改动”,让系统自动重装一下驱动即可。这招起作用了,于是电脑正常了。 我以为搞定了,没想到今天打开电脑,又出现了跟昨天一样的故障。没办法,按照昨天的步骤处理,居然蓝屏了。还原以前的驱动,还是不行。最后没办法上网搜索了下,才找到解决的真正办法。 “开始菜单”-“运行”-输入命令:regedit,打开系统注册表。依次展开下面的注册表项: HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Class\{36FC9E60-C465-11C F-8056-444553540000}(适用于Windows 7系统) 或者 HKEY_LOCAL_MACHINE/SYSTEM/CurrentControlSet/Control/Class/(适用于Windows XP 系统) 在这下面有很多用“{}”括起来的项,一个一个的点开,看右面窗口有没有“通用串行总线控制器(Universal Serial Bus controllers)”这些文字,在右面窗口找到“upperfilter”项或“lowerfilter”项并删除。 如果没有触摸板,请结合使用Ctrl+F(查找)、F3键(下一条键值)。切记一点其中找到的项有USB光驱、MODE、游戏控制器等等的就不要删除了。看准了一定是Class项的数值是USB 而且上边是“通用串行总线控制器”Windows 7可能显示为“Universal Serial Bus Controllers”。 会有很多设备信息,慢慢找,大概有两条这样的键值,删掉后重启电脑或者在设备管理器的菜单中,点“操作”-“扫描检测硬件改动”,让系统自动重装一下驱动即可。

通用串行总线USB的驱动程序设计

文章编号:1009-8119(2005)04-0040-03 基于WDM的USB驱动程序设计 赵娟1 仲顺安1 郭磊2 (1.北京理工大学信息科学技术学院,北京 100081 2.石家庄陆军参谋指挥学院教育技术专业,石家庄 050064) 摘要简单介绍了USB的特性。为了介绍USB驱动,重点阐述了WDM驱动程序的原理和Windows系统内核管理机制和应用程序的区别。并给出了利用Driverstudio的C++语言编写的例程。 关键词 USB设备,WDM,操作系统,驱动程序 The Implementation of the USB Driver Based on WDM Zhao Juan Zhong Shun'an Guo Lei Abstrct The attribute of the USB is descripted in the paper. For developing usb driver, the mechanism of kenerl management and the privilege level of applications in window2000 are introduced in the paper. An example of the driver handling USB transfer programmed by using C++ with the help of the driverstudio is given. Keyword USB device,WDM,OS,Driver 1 引言 USB,全称是Universal Serial Bus(通用串行总线),它是由Compaq、Microsoft、Intel、IBM等七家公司共同开发的,旨在解决日益增加的PC外设与有限的主板插槽和端口之间的矛盾而制定的一种串行通信的标准,自1995年在Comdex上亮相以来已广泛地为各PC厂家支持。现在市场上几乎所有的PC机器都配备了USB接口,其优点是: ? 速度快。USB有高速和低速两种方式,主模式为高速模式,速率为12Mbps;另外,为了适应一些不需要很大吞吐量和很高实时性的设备,如鼠标等,USB还提供低速方式,速率为1.5Mbps。 ? 设备安装和配置容易。安装USB设备不必再打开机箱,加减己安装过的设备完全不用关闭计算机。所有USB设备支持热插拔,系统对其进行自动配置,彻底抛弃了过去的跳线和拨码开关设置。 ? 易于扩展。通过使用Hub扩展可连接多达127个外设。标准USB电缆长度为3m(5m 低速)。通过Hub或中继器可以使外设距离达到30m。 ? 能够采用总线供电。USB总线提供最大达5V电压和500mA电流。 ? 使用灵活。USB共有4种传输模式:控制传输(control)、同步传输(synchronization)、中断传输(interrupt)、批量传输(bulk),以适应不同设备的需要。 2 WDM驱动程序的介绍 WDM(Windows Driver Model)是微软提出的一种全新的设备驱动程序模型。它是在Windows NT内核驱动程序模型(Kernel_model Driver Mode)的基础上发展起来的,增加了对即插即用(PnP)、高级电源管理(Power Management)、Windows管理接口(WMI)的支持。更重要的是,WDM是一种通用的驱动模式,提供了包括USB、IEEE1394和HID等在内的一系列驱动程序类。在 Windows 98和 Windows 2000中, WDM驱动程序均可正常使用。 在大多数操作系统中,应用程序和操作系统本身是分开的:操作系统代码运行在特权处理器模式(也称核心态),并有权访问系统数据和硬件;应用程序运行在非特权处理器模式(也称用户态)。当用户态程序调用系统服务时,处理器捕获该调用,然后把调用的线程切换到核

USB通用串行总线阻抗控制

最近做了一个PCB,走线宽度为3.5mil,间距为8mil,板厚1.6,TOP到GND 之间为 0.3mm,因此USB阻抗超大,超过了80--100 的范围,USB 下载小文件可以,下载大文件,就超级不行!一个惨痛的教训,让我载抄了信号完整性分析的一段:深刻体会,钱的教训的深刻的!! USB通用串行总线(Universal Serial Bus),目前我们所说的USB一般都是指USB2.0,USB2.0接口是目前许多高速数据传输设备的首选接口,从1.1过渡到2.O,作为其重要指标的设备传输速度,从1.5Mbps的低速和12Mbps的全速提高到如今的480Mbps的高速。USB的 特点不用多说大家也知道就是:速度快、功耗低、支持即插即用、使用安装方便。正是因为其以上优点现在很多视频设备也都采用USB 传输。 USB2.0设备高速数据传输PCB 板设计。对于高速数据传输PCB板设计最主要的就是差分信号线设计,设计好坏关乎整个设备能否正常运行。 1、USB2.0接口差分信号线设计 USB2.0协议定义由两根差分信号线(D 、D-)传输高速数字信号,最高的传输速率为480 Mbps。差分信号线上的差分电压为400mV,理想的差分阻抗(Zdiff)为90(1±O.1)Ω。在设计PCB 板时,控制差分信号线的差分阻抗对高速数字信号的完整性是非常重要的,因 为差分阻抗影响差分信号的眼图、信号带宽、信号抖动和信号线上的干扰电压。由于不同软件测量存在一定偏差,所以一般我们都是要求控制在80Ω至100Ω间。 差分线由两根平行绘制在PCB 板表层(顶层或底层)发生边缘耦合效应的微带线(Microstrip)组成的,其阻抗由两根微带线的阻抗及其和决定,而微带线的阻抗(Zo)由微带线线宽(W)、微带线走线的铜皮厚度(T)、微带线到最近参考平面的距离(H)以及PCB 板材料 的介电常数(Er)决定,其计算公式为:Zo={87/sqrt(Er 1.41)]}ln[5.98H/(0.8WT)]。影响 差分线阻抗的主要参数为微带线阻抗和两根微带线的线间距(S)。当两根微带线的线间距增 加时,差分线的耦合效应减弱,差分阻抗增大;线间距减少时,差分线的耦合效应增强,差分阻抗减小。差分线阻抗的计算公式为:Zdiff=2Zo(1-0.48exp(-0.96S/H))。微带线和差 分线的计算公式在O.1

相关主题