USB驱动五篇

2024-07-02

USB驱动 篇1

随着微机技术水平的日益提高,传统的计算机接口已经不能满足当前计算机高速发展的需求,计算机业迫切需要一种新的通用型、高速总线接口,通用外设接口标准USB就应运而生。

USB,全称是Universal Serial Bus(通用串行总线),是一种新型的、基于令牌的、高速的串行总线标准,由Compaq、Microsoft、Intel、IBM等七家公司共同开发的,旨在解决日益增加的PC外设与有限的主板插槽和端口之间的矛盾而制定的一种串行通信标准[3],自1995年在Comdex上亮相以来已广泛地为各PC厂家支持。现在市场上几乎所有的P C机器都配备了U S B接口,USB接口之所以能够得到广泛支持和快速普及,是因为它具备以下优点:

1)终端用户的易用性

●为接缆和连接头提供了单一模型

●电气特性与用户无关

●自检外设,自动的进行设备驱动和设置

●外设可以动态连接,动态重置

2)广泛的适用性

●适应不同设备,传输速率从几kb/s到十几Mb/s

●在同一线上支持同步、异步两种传输模式

●支持对多个设备的同时操作

●可同时操作127个物理设备

●在主机和设备之间可以传输多个数据和信息流

●支持多功能的设备

●利用底层协议,提高了总线利用率

3)同步传输带宽

●确定的带宽和低延迟适合电话系统和音频的应用

●同步工作可以利用整个总线带宽

4)灵活性

●直接发送一系列指定大小的数据包,允许对设备缓冲器大小进行选择

●通过指定数据缓冲区的大小和执行时间,支持各种数据传输率

●通过协议对数据流进行缓冲处理

5)健壮性

●在协议中使用差错处理/差错恢复机制

●完全实时热插拔

●可以对有缺陷的设备进行鉴别

6)与P C产业的一致性

●协议的易实现性和完整性

●与P C机的即插即用体系结构一致

●与现存操作系统有良好衔接的接口

7)性价比

●以低廉的价格提供传输速率为1.5 M b/s的子通道

●将外设和主机硬件进行了最优化的集成

●促进了低价格外设的发展

●廉价的电缆和连接头

●运用商业技术降低成本

8)可升级性

●体系结构的可升级性支持在一个系统中同时存在多个USB主机控制器

正由于上述优点,开发USB接口的设备已成为一种发展趋势。然而随着USB技术的迅猛发展,传统的U S B 1.1接口已经不能适应用户的需求,于是在1 9 9 9年在Intel的开发者论坛大会上又提出了USB2.0技术,使得U S B不仅支持1.5 M b/s的“低速”,传输和12Mb/s的“全速”传输,而且支持480Mb/s的“高速”传输,比USB1.1标准快40倍左右,速度的提高对于用户的最大好处就是意味着用户可以使用到更高效的外部设备,而且具有多种速度的周边设备都可以被连接到USB 2.0的线路上,而且无需担心数据传输时发生瓶颈效应。

2 USB驱动程序设计

一个完整的USB系统包括主机系统和USB设备。所有的传输事务都是由主机发起的。一个主机系统又可以分为以下几个层次结构,如图1所示。

U S B总线接口包括U S B主控制器和根集线器,其中USB主控制器负责处理主机与设备之间电气和协议层的互连,根集线器提供USB设备连接点。USB系统使用USB主控制器来管理主机和USB设备之间的数据传输,另外它也负责管理USB资源,如带宽等。应用软件不能直接访问U S B设备硬件,而通过U S B系统和USB总线接口与USB设备进行交互[1]。

U S B设备包含一些向主机软件提供一系列U S B设备的特征和能力的信息的设备描述符,用来配置设备和定位USB设备驱动程序。这些信息确保了主机以正确的方式访问设备。通常,一个设备有一个或多个配置(C o n f i g u r a t i o n)来控制其行为。配置是接口(I n t e r f a c e)的集合,接口指出软件应该如何访问硬件。接口又是端点(endpoint)的集合,每一个与USB交换数据的硬件就为端点,它是作为通信管道的一个终点。图1显示了一个多层次结构的通信模型,它表明了端点和管道所扮演的角色。

2.1 USB驱动程序结构

1)USB驱动程序体系结构

运行在核心态的USB驱动程序是基于WIN32驱动程序模型WDM(Windows Driver Model)的,它采用分层驱动程序模型,由USB总线驱动程序和USB功能驱动程序两部分组成,总线驱动程序由操作系统提供,用户只需要编写相应的功能驱动程序即可[2]。

2)处理流程

因为I/O管理器把每一个设备对用户程序都抽象成文件,所以用户程序通过调用文件操作API函数就可以实现与驱动程序中某个设备的通信。

用户程序发送的请求由I/O管理器转换为具有不同主功能代码的IRP(I/O请求包)发送给功能驱动程序。功能驱动程序接收该IRP,在回调程序中根据IRP中包含的具体操作代码,构造相应的U S B请求,把它放到一个新的IRP中,并把这个新的IRP传递给USB总线驱动程序。USB总线驱动程序根据IRP中所包含的USB请求块执行相应操作,再将操作结果通过IRP返还给功能驱动程序,功能驱动程序接收此IRP,将操作结果通过IRP返还I/O管理器。最后,I/O管理器将此IR P中的操作结果返回给应用程序。至此,应用程序对USB设备的一次I/O操作完成,其处理流程如图2所示。

3 USB设备驱动程序中关键代码实现

下面是以开发的A R M读写驱动程序为例,介绍U S B驱动程序中几个关键例程的实现。本驱动程序的主要功能是控制USB设备上的ARM并对ARM板进行读写操作。

1)初始化函数Driver Entry()

设备驱动程序与应用程序不同,没有main()或Win Main()函数,而是有一个名为Driver Entry()的入口函数,它通常完成一些初始化工作。当设备驱动程序被加载时,操作系统调用这个入口。

2)创建设备函数Add Device()

大多数的PDO都是在Pn P管理器调用该程序入口点时被创建的。插入新设备后,系统启动时,总线枚举器会搜索总线上的所有设备,自动寻找并安装设备的驱动程序,并由驱动程序中的处理Pn P功能模块自动处理Add Device()。本程序使用Create Device()函数创建设备对象,再使用Register Devicelnterface()函数将设备组成一个特定的设备接口,然后通过Attach Device To Device Stack()函数关联设备栈。

3)ARM的传输处理函数Usb Transmit()

该函数是实现本驱动程序功能的关键,它用来与ARM进行通信。分析发送的请求数据后根据命令的具体含义对ARM进行读写操作。应用层通过调用标准的AR M板函数来发送I/O请求。

4 结束语

随着支持USB的个人电脑的普及,大量支持USB接口外设的不断涌现,以及USB技术的发展和不断完善,因此基于USB驱动程序的开发也将成为这一发展趋势的重中之重。本文介绍了USB的通信模型,分析了基于WDM的USB驱动开发的关键所在,结合ARM驱动程序开发介绍了DDK开发环境的构建,最终结合实际系统完成了基于DDK的USB接口WDM驱动开发和调试。

参考文献

[1]盖素丽,常青.USB接口的驱动程序开发[J].河北省科学院学报,2005,(6):18-19.

[2]王志强,孙书鹰,孙世宇.USB设备驱动程序开发技术研究[J].中文核心期刊《微计算机信息,》2006,22(1):57-58.

USB驱动 篇2

关键词:监护仪,生理参数,Linux操作系统,USB驱动

0 前言

随着软硬件资源的成熟与完善,嵌入式系统的应用得到了迅猛的发展。基于Linux的嵌入式系统设备以其成本低、体积小、重量轻、功耗低、网络功能强大和稳定性好等优点,大量应用于医疗设备,特别是便携式医疗设备等[1]。

传统的便携式监护等医疗设备均是采用标准的RS232串行接口进行数据的采集与传输,已越来越不能满足高速数据传输,数据存储以及频繁的数据采集等要求。USB通讯弥补了这些不足,它有着传输速度快、可靠性高、易于连接、可热插拔等许多优点,成为嵌入式医疗设备开发人员的首选。这样基于Linux的嵌入式医疗设备USB驱动程序的实现就显得很重要,基于此,本文分析了USB总线接口驱动程序结构及编写方法,并最终得以实现。

1 微型生理参数监护仪硬件体系

针对便携式医学仪器的要求,设计了一个基于ARM9微处理器S3c2410的嵌入式Linux系统的,其中S3c2410作为系统的硬件控制中心主CPU,采用嵌入式Linux操作系统作为软件开发平台构成系统的核心检测模块,检测模块可以采集各种生理信息,如心电信号、温度、血压等。经A/D转换得到的数据由USB接口向ARM实时传送,并由ARM负责数据的LCD显示和上传,上传方式可以采用GPRS数据通讯方式和基于TCP/IP的以太网通讯方式[2]。系统的硬件连接如图1。

2 USB驱动程序结构

2.1 Linux USB子系统

USB驱动程序可以分为USB子系统、主控制器驱动程序和设备驱动程序。连接USB设备驱动程序和USB主控制器驱动程序的子系统称为USB core,它们之间通过特定的API相联系,图2所示。USB core提供了针对硬件的所有下层接口,包含了所有USB设备驱动和主机控制的通用程序。设备驱动程序是操作系统内核和硬件之间的接口,为应用程序屏蔽硬件的细节。应用程序把硬件设备作为一个设备文进行各种处理和操作,实现两方面的信息交换,一方面是控制信息和状态信息的传输,另一方面是数据的传输[3]。

2.2 USB驱动程序的核心数据结构

Linux内核的USB系统提供了与USB设备驱动程序开发相关的一些非常重要的数据结构,在整个驱动开发中起着重要的作用,为USB设备文件提供了一个文件界面操作数据结构[4],其结构几乎全是函数指针,所以实际上是一个函数跳转表。例如read就指向USB设备的读文件操作的入口函数,编写USB驱动程序主要也就是实现这些方法,其中一些主要的函数如下所示:

3 USB驱动程序具体实现

3.1 USB驱动程序的注册和注销

USB驱动程序首先要向Linux系统登记,调用函数usb_register,系统便将这个新的驱动程序加入驱动链表(usb_driver_list)的尾部完成注册,同时扫描总线上的所有设备,与驱动程序关联。这就是驱动模块初始化过程要完成的操作[5]。注销函数的功能与此相反,usb_deregister()关闭设备,撤销为设备在内核中分配的一切资源。初始化函数如下:

上述mydevic_driver是一个struct usb_driver的结构体,包含了设备必要的硬件信息。

当USB驱动程序卸载时,要向系统注销。调用usb_deregister函数。

当设备插入时,为了使Linux-hotplug系统自动装载程序,系统就要创建一个MODULE_DEVICE_TABLE来说明这个USB驱动程序所支持的硬件。

USB_DEVICE宏利用制造商ID和产品ID提供了一个设备的唯一标识。当系统插入一个与ID匹配的USB设备到USB总线时,驱动程序会在USB core中注册。驱动程序中probe函数也就会被调用。usb_device结构指针、接口号和接口ID都会被传递到函数中[3]。

在probe()函数中,首先确认插入的设备在内核中注册过,如果发生任何错误,返回一个NULL值。确认成功后,程序会为usb_mydevice结构分配内存,并对结构中的各个变量进行初始化。然后返回一个usb_mydevice结构指针。通过这个指针,就可以访问所有结构中的回调函数:

3.2 USB设备的打开与释放

USB设备的打开是通过调用文件操作集中的open()函数来完成,包括检查设备是否已初始化或打开、申请对设备的控制权、增加模块使用计数等[5],open()函数实现如下:

3.3 USB设备读数据函数

USB设备的读取函数主要是首先建立起与设备某一端点的管道并从USB设备获取数据,然后再从内核态缓冲区拷贝数据到用户区[5]。读函数实现如下:

4 结束语

Linux操作系统以其可裁剪、开源、网络功能强大等优点在便携式医疗设备的设计中倍受关注,USB以其传输速度快、可靠性高、可热插拔等优点而广泛用于数据采集、设备与主机以及设备与各功能模块之间的数据交换。本文通过设计一个以ARM9为核心处理器,以嵌入式Linux操作系统为软件平台的微型参数监护仪,并在此基础上开发了USB驱动程序,经测试,监护仪系统通讯稳定可靠,能实现各种心电、温度、血压等各种生理参数的实时采集与传输。相信随着智能医学仪器的发展以及USB接口芯片的普遍应用,基于Linux的嵌入式医疗设备将会有加更广阔的前景。

参考文献

[1]万相奎,丁建平,秦树人.嵌入式系统及其典型开发模式[J].重庆大学学报(自然科学版),2004,27(2):16-19.

[2]方勇军,苏尚文.基于ARM的嵌入式Linux系统在便携式医学仪器开发中的应用[J].中国医学物理学杂志,2005,22(3):545-547.

[3]曾水平,徐峰.Linux系统下USB设备驱动的实现[J].国外电子测量技术,2006,25(10):30-32.

[4]Alessandro Rubini.Linux Device Driver.[M].3rd ed.USA:O'Reilly,2005.

[5]赵明.Linux下的硬件驱动USB设备(下)(驱动开发部分)[EB/OL].(2007-02-10).http://www.ibm.com/developerworks/cn/linux/l-usb/index2.html.

USB驱动 篇3

第一招 万能驱动法。网上有一种号称“万能摄像头驱动”的东东,可以解决大多数“三无”摄像头的驱动问题。“万能摄像头驱动”实际上是中星微公司Vimicro 301系列芯片方案的驱动程序,301芯片在摄像头领域中是一颗比较优秀的芯片,也是市面上最常见的。不过,不是所有摄像头都可以使用“万能驱动”。其他常见摄像头采用的芯片方案有:中星微 301、302、305;松瀚的201、213、288等。对于“三无”摄像头,大家可以到相关网站下载各个方案的通用驱动碰碰运气。

小提示:

保存好产品原包装和驱动光盘还是很有必要的!

第二招 打回原形法。瞎碰运气虽然对于安装摄像头驱动来说成功的可能性比较大,但也不是个办法。最好的方法自然是将“三无”摄像头“打回原形”,搞清楚它的真正身份,就可以“对症下药”,到相关网站下载相应的驱动。这里推荐一个硬件信息测试工具Everest Ultimate。你可以通过它查看你电脑的各个方面的详细信息,系统、硬件和软件等的型号、版本以及状态一应俱全。有了它的帮助,我们一眼就能够看清楚“三无”摄像头的来历了,剩下的工作自然驾轻就熟了。附Everest Ultimate下载地址:http://www.onlinedown.net/soft/16705.htm。

关于usb鼠标、键盘驱动浅谈 篇4

你可能会遇见这样一个不可思议的问题,usb鼠标(键盘)插上亮但就是不可以用,去设备管理器里边发现其前边有个黄色的叹号——找到问题了原来是驱动的问题,于是就联网自动更新驱动发现可以找到但是打开文件失败,对于您对计算机的了解,也许你已经用了好几个测试软件比如驱动人生,驱动精灵,鲁大师等等,都可以检测到该驱动没有装上,但令人不可意思的是就是装不上驱动。在确定鼠标可用的情况下,这个时候您也许就该想这是不是1硬件的问题(主板usb接口)2系统问题。但是真正的做一个正版的系统是很费劲费事的(后期处理特繁琐)。接下来您可以这样做更新主板芯片组驱动,南桥驱动试试等等,如果还是不管用。这时候您可以试试进入u盘系统看看鼠标会不会用,如果会的话 那就是系统的问题。这时候就做只能系统了(几乎可以确定是系统的缺陷性)。

出现这些问题很大程度上是精简版系统的缺陷性,在一点是尽量不要有软件优化系统,很肯能把某些东东优化没了。所以在这里建议大家在选择系统时候做好做原版系统。有自带的系统更好,精简版系统很可能出现一些未知错误。

USB驱动 篇5

1. 简介

德国keil-sofeware公司的Keil-C51是专为8051族单片机设计的高效率C语言编译器,它生成的程序代码运行速度极高,所需存储器空间极小。Keil-C51完全支持C8051F32X单片机的C语言编译。

Keil-C51完全集成在一个功能强大的集成开发环境uVsion3中,简称uV3。其中包括:项目(project)管理器、C51编译器、A51宏汇编器、BL51/LX51连接定位器、simulator软件模拟调试器,以及8051族单片机硬件目标在线仿真、下载调试器。上述功能都可在uv3的集成开发环境中极为简捷地进行操作。其硬件调试器可在线实现对单片机的(包括对C语言源程序)调试、修改和观察的命令。

在uv3中,可以进行两种类型的代码调试。一种是带调试信息的源程序代码调试,此调试允许在调试中显示高级语言源程序语句,并可对源程序语句进行单步、断点等方式的调试,而且高级语言源程序的每个语句都可显示出对应的汇编语句段。另一种是十六进制(hex)代码调试,此时只能显示汇编语言指令。

用户在完成项目编译、连接之后,通过debug菜单进入程序调试状态。若用户使用硬件在线仿真调试器,则需安装C8051F单片机的uv3驱动软件(连接编程仿真调试器,要注意驱动软件的版本)。安装好驱动软件,硬件连接上USB口的编程仿真调试器并在debug窗口上激活后,才能实现硬件在线仿真、调试和将代码下载到单片机等各种功能。在调试状态下,还可以通过调试主窗口进行源程序的编辑和修改,但修改后源程序不能在debug窗口内进行编译、连接,要退出debug状态重新编译、连接,形成新的目标代码后再次装入,才能进行调试。

硬件在线下载、仿真调试器,具有以下功能:对高级语言源程序和汇编程序,能进行全速运行,单步执行和断点运行;有3种不同的断点调试方式;有下载代码到单片机flash程序区的命令;有上存代码到PC机,并存成文件的命令;有显示和修改各种存储器单元的命令;显示和修改各种寄存器的命令;在汇编语言状态下,可在线修改汇编语句;高级语言源程序的每个语句,都可显示出对应的汇编语句段。

2. 编程编译过程

在使用keil-C51对8051族单片机应用程序进行编程、编译时要注意,如果用的是C8051F32X单片机,需要使用V8.08以上的版本,因为低版本中找不到C8051F单片机的新芯片。

(1)使用keil-C51编译C8051F32X单片机应用程序的步骤如下:

(1) 在uv3集成开发环境软件中,创建一个新项目,并为该项目选定对应的单片机CPU器件(先选生产该单片机的公司名,后选单片机型号)。

(2) 用文件编辑器编写C语言的源程序文件(或汇编源文件),并将文件添加到项目中去。一个项目可包括多个文件,除源文件外,还可有库文件等。

(3) 通过uv3各种选项配置C51编译器、A51宏汇编器、BL51/LX51连接定位器,并选择debug的调试方式。

(4) 使用uv3的构造功能(build)对项目中的源程序文件进行编译、连接,生成绝对目标代码和可选择(要或不要)的hex代码。

(5) 将编译、连接好的绝对目标代码(也可是hex代码),装入uv3进行硬件(或模拟软件调试)在线调试。

调试成功后,用硬件下载仿真器将hex代码文件写到单片机的flash中去。

(2)图解一个实例的编译过程

C源文件名:usbad1.c, usb_api函数库文件:usbx_f320_1.lib,项目工程取名:usbad。

(1) 点击uv3图标:出现图1所示软件界面。

(2) 点击project框,选new;uvsion project,取项目文件名为Usbad,如图2所示。

(3) 进入target1--- (select device) 选单片机公司,选silicon laboraries,如图3所示。

(4) 选单片机型号:点单片机公司名称左边的小框的+,找到C8051F320,点击C8051f320并点击确认,如图4所示。

(5) 在target1大图内,点击output按钮,设置是否要hex代码文件。在图5左侧的两个框中画钩并点确认。

(6) 在target1大图中设置定位flash起始地址,点击bl51 locate框,设flash起始地址,如0100h,如图6所示。

(7) 点击target1长条框右边的按钮,进入选源程序、库文件界面。点击add file框,加入usbad1.c, usbx_f320_1.lib文件到软件中,然后点击确认,如图7所示。

(8) 此时,集成软件大图左下边3个按钮(即trget1长条框左面)中有2个按钮(即第2、第3个按钮)变亮,依次点击这两个按钮,且每次按对应的确认,编译完成并提示,生成usbad1.hex代码文件,在源文件所在处,生成绝对代码文件及配套各种文件。

需要说明的是,由于USB通信软件主要采用调用各种专用的USB——API函数来实现其功能,而这些API函数不被keil——uv3调试软件所定义,所以在keil——uv3的调试器上无法进行C语言源程序的调试。因此,这里不介绍使用keil——uv3调试器调试单片机程序的各项功能(有需求的用户可参考,keil——uv3调试器的中文手册)。

二、使用C8051F单片机程序下载器将代码写到单片机内

在生成usbad1.hex代码文件后,需要使用C8051F单片机程序下载器方能将代码写到C8051F单片机内。下面介绍具体操作。

(1) 选择、进入下载器软件:用鼠标左键点击flashutil.exe的图标,就可进入flash程序下载器的主界面(见图8)。

(2) 点击USB调试器选择左边的小圆框,激活后字体变亮。

(3) 选择C8051F单片机接口方式,点击选中右边(C2)的小圆框。

(4) 连接好PC和USB下载器连线,并将下载器的10芯扁平线插头插入C8051F32X单片机开发板的对应10芯插座内,然后接通开发板电源。

(5) 点击连接后,将显示单片机器件名称(C8051F32X),这时,下载器已进入下载工作状态。点击下载hex文件框,进入二级软件界面,如图9所示。

点击浏览框,可选到需要下载的hex代码文件,并在浏览条框下面的头2个功能小框(擦flash等)画钩。再点击(下载)框,即开始下载程序。几秒后,当下载框的字体被激活时,即表示下载完成了。

三、单片机USB通信驱动软件的安装和使用

1. 作用

(1) 提供PC与C8051F32X单片机USB通信所需要使用的PC端USB接口驱动软件。不安装此驱动软件,上位机的应用软件无法控制并实现PC端USB接口的通信工作。

(2) 提供C8051F32X单片机端的USB通信软件程序进行编译时所需的USB-API函数库文件。

(3) 提供PC端用于USB通信的应用软件程序及在进行编译时所需的siusbxp.lib的函数库文件。

2. 软件组成及安装

(1) 所有软件文件都存在于美国silicon公司的usbxpress (3.11) 压缩包内。

(2) 将压缩包解压缩后,生成usbxpress install软件图标、examples、usbxpress_api等3个软件文件子目录和图标。

(3) 在Driver子目录中,点击usb xpress install软件安装图标,安装PC端用于与单片机端USB通信的驱动软件。

安装完成后,在PC列表上可显示:Silicon laboratories usbxpressdevelop kit。

3. 使用

USB通信驱动软件安装完成后,如要实现和单片机端USB接口通信,还需连接下位带USB接口的单片机设备端(单片机端需已写入USB通信程序)进行USB硬件确认、握手……。如果驱动程序装好,下位机USB设备正常工作,会在PC上显示:usbxpress_driver寻找api新硬件……发现新硬件,并在随后显示:新硬件已安装,可以使用了。此时,驱动软件就安装好了。

在usbxpress_api子目录中,进入device,其中usbx_f320_1.lib文件就是用于C8051F32X单片机USB通信软件编译时所要调用的API函数库文件,Usb_api.h是它的头文件。

进入host, siusbxp.lib是上位机应用软件 (修改时) 编译所需调用的库文件,Siusbxp.h是它的头文件。

在example子目录中,打开filetransfer,

再进入host,出现图标flie transfer.exe,点击该图标后,出现PC端单片机USB通信应用软件界面,如图10所示。

上一篇:清洗后除湿下一篇:高职激励机制后勤管理