USB驱动移植教程

USB驱动移植教程
USB驱动移植教程

USB驱动移植教程

一.USB驱动框架

在Linux系统中,提供了主机侧和设备侧视角的USB驱动框架,这里,仅仅讲解主机侧角度看到的USB驱动框架。

从主机侧的角度而言,需要编写的USB驱动程序包括主机控制器驱动和设备驱动两类。USB主机控制器驱动程序控

制插入其中的USB设备,而USB设备驱动程序控制该设备如何作为设备与主机通信。在USB主机控制器驱动和USB

设备驱动之间还有一层叫USB核心层。USB核心负责USB驱动管理和协议处理工作,它通过定义一些数据结构、宏

和功能函数,向上为USB设备驱动提供编程接口,向下为USB主机控制器驱动提供编程接口;通过全局变量维护整个

系统的USB设备信息,完成设备热插拔控制、总线数据传输控制等。说了那么多,无图无真相啊~~

Linux USB主机侧驱动总体框架

二.USB驱动移植步骤

1.S5PV210主机控制驱动的移植

USB主机控制器有3种规范,UHCI(Universal Host Controller Interface),这种规范主要是Intel、Via芯片公司提供支

持PC主板的;OHCI(Open Host Controller Interface),这种规范是微软提出来的,主要应用在非PC系统上的嵌入式

领域上的USB芯片;EHCI(Enhanced Host Controller Interface),这种后来为提高USB速度而提出的规范,它支持

最高速度为480Mbps。

在《S5PV210_UM_REV1.1》手册上搜索OHCI关键词,会发现下面一段话

这表明S5PV210这款CPU支持一个USB主机接口,同时支持EHCI和OHCI这两种规范,支持USB1.1和USB2.0规范,支持最高的外设传输速率为480Mbps。注意了,它并不支持USB3.0规范的USB设备,所以做测试的时候,千万不要拿USB3.0规范的USB设备去测试。

2.1移植ohci-s5p驱动

打开内核目录:driversusbhost,发现Linux系统提供了大量的主机控制器驱动,找遍所有平台,都没有找到ohci-s5p.c源码。很遗憾,3.8的内核没有提供S5PV210的USB HOST控制器驱动程序。最好验证有没有提供的办法就是,

烧写网蜂提供的第二版的uImage进去,然后找个U盘、或者鼠标插入Webee210开发板的USB HOST接口,看看串

口有没有打印什么信息,结果是不会有任何反应的。既然没有提供,这就需要我们自己来编写了,这下不好办了吧?

不用紧张,仔细再找找,还是能发现一些类似的源码,可供我们移植的。我们发现,内核虽然没有提供ohci-s5p.c源码,但是有提供ehci-s5p.c源码,还有ohci相关的其他平台的源码,比如ohci-s3c2410.c、ohci-exynos.c供我们移植参考。

2.1.1 ohci-s5p.c程序

内核既然没有ohci-s5p.c,那我们使用其他平台的ohci源码,这里我们拷贝driversusbhost目录下的ohci-exynos.c

为ohci-s5p.c。然后将所有exynos字符串替换成s5p,由于有些地方是exynos4,所以还需要将s5p4替换为s5p。最后

还需要修改一下头文件,将

#include

改为:

#include

2.2 usb-ohci-s5p.h程序

打开内核目录includelinuxplatform_data,然后拷贝

usb-exynos.h为usb-ohci-s5p.h。将所有的exynos4字符串

替换为s5p,将EXYNOS替换为S5P。

最后添加平台数据:

static struct s5p_ohci_platdata s5p_ohci_platdata;

为了以后支持EHCI还添加echi的平台数据,最后usb-ohci-s5p.h修改为:

#ifndef __MACH_S5P_OHCI_H

#define __MACH_S5P_OHCI_H

/**************Add by Webee*******************/

#ifdef CONFIG_S5P_DEV_USB_EHCI

static struct s5p_ehci_platdata s5p_ehci_platdata;

#endif

static struct s5p_ohci_platdata s5p_ohci_platdata;

/**************Add by Webee*******************/

struct s5p_ohci_platdata {

int (*phy_init)(struct platform_device *pdev, int type);

int (*phy_exit)(struct platform_device *pdev, int type);

};

extern void s5p_ohci_set_platdata(struct s5p_ohci_platdata *pd); #endif /* __MACH_S5P_OHCI_H */

2.3 添加s5p_ohci_driver到ohci_hcd.c

打开driversusbhostohci-hcd.c,在CONFIG_USB_OHCI_EXYNOS前面添加如下代码:

#ifdef CONFIG_USB_OHCI_S5P

#include "ohci-s5p.c"

#define PLATFORM_DRIVERs5p_ohci_driver

#endif

因为S5PV210 USB HOST控制器驱动由driversusbhostohci-hcd.c(支持各种SoC下的主机控制器驱动的通

用部分)和driversusbhostohci-s5p.c共同完成。

2.4 添加平台设备

前面我们移植ohci-s5p.c主要是围绕platform_driver来编程的,这又回到了平台驱动设备模型了。还记得

我们移植gpio-key驱动了吗?里面就添加了平台设备来支持平台驱动。今天,我们同样需要添加平台设备

来支持s5p_ohci_driver这个平台驱动。怎么添加呢?参考别人怎么写!

打开archarmplat-samsungdevs.c,找到s5p_device_ehci这个平台设备,模仿它来修改。

打开archarmmach-s5pv210mach-smdkv210.c,在

smdkv210_devices[ ]前,添加如下代码:

#include

#include

#include

#include

#include

#include

static struct resource s5p_ohci_resource[] = {

[0] = DEFINE_RES_MEM(0xEC300000, SZ_256),

[1] = DEFINE_RES_IRQ(S5P_IRQ_VIC1(23)),

};

static u64 samsung_device_dma_mask = DMA_BIT_MASK(32);

struct platform_device s5p_device_ohci = {

.name = "s5p-ohci",

.id = -1,

.num_resources = ARRAY_SIZE(s5p_ohci_resource),

.resource = s5p_ohci_resource,

.dev = {

.dma_mask = & samsung_device_dma_mask,

.coherent_dma_mask = DM A_BIT_MASK(32),

}

};

void __init s5p_ohci_set_platdata(struct s5p_ohci_platdata *pd) {

struct s5p_ohci_platdata *npd;

npd = s3c_set_platdata(pd, sizeof(struct s5p_ohci_platdata) ,

&s5p_device_ohci);

if (!npd->phy_init)

npd->phy_init = s5p_usb_phy_init;

if (!npd->phy_exit)

npd->phy_exit = s5p_usb_phy_exit;

}

怎么确定s5p_ohci_resource里面的内存地址呢?这自然要回到《S5PV210_UM_REV1.1》手册了,在USB

HOST

这章的寄存器介绍里面有这么一段描述:

而IRQ的确定,则是找到下面这段话。

/ * 参考archarmmach-s5pc100includemachirqs.h */

#define IRQ_UHOSTS5P_IRQ_VIC1(23)

然后将定义设置好的s5p_device_ohci添加到smdkv210_devices[],如:static struct platform_device *smdkv210_devices[] __initdata = {

&s5p_device_ohci,/* Add by Webee */

……

&webee210_button_device,/* Add by Webee */ };

最后,在smdkv210_machine_init函数中添加平台数据的设置函数。

#ifdef CONFIG_S5P_DEV_USB_OHCI

s5p_ohci_set_platdata(&s5p_ohci_platdata);

#endif

2.5 修改Kconfig

2.5.1 移植driversusbhost目录下的Kconfig

打开driversusbhost目录下的Kconfig,在USB_OHCI_EXYNOS前面添加USB_OHCI_S5P的配置支持。

修改后如下:

# Add by Webee

config USB_OHCI_S5P

boolean "OHCI support for Samsung S5P SoC Series"

depends on USB_OHCI_HCD && PLAT_S5P

select S5P_DEV_USB_OHCI

help

Enable support for the Samsung S5P SOC's on-chip OHCI controller.

#Add by Webee

2.5.2 移植archarmplat-samsung目录下的Kconfig

打开archarmplat-samsung目录下的Kconfig,在S5P_DEV_USB_EHCI后面添加S5P_DEV_USB_OHCI的配

置支持,修改后如下:

#Add by Webee

config S5P_DEV_USB_OHCI

bool

help

Compile in platform device definition for USB OHCI

#Add by Webee

2.5.3 移植driversusb目录下的Kconfig

在内核目录下输入make menuconfig配置内核时,搜索

S5P_DEV_USB_OHCI发现如下现象,它表明S5P_DEV_USB_OHCI的配置需要先将PLAT_S5P配置上。

搜索:先按‘/’

打开driversusb目录下的Kconfig,在USB_ARCH_HAS_OHCI模块下添加如下内容:

default y if PLAT_S5P

2.6 创建setup-usb-phy.c文件

在archarmmach-s5pv210目录下创建setup-usb-phy.c文件,为什么要创建这么一个文件呢?还记得前面在smdkv210_machine_init()函数里添加过

s5p_ohci_set_platdata(&s5p_ohci_platdata);这个函数吗?

其中就会去设置s5p_ohci_platdata里的phy_init、phy_exit这两个成员函数。那么就需要实现,s5p_usb

_phy_init函数和s5p_usb_phy_exit函数。最后将setup-usb-phy.c文件添加如下代码:

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

int s5p_usb_phy_init(struct platform_device *pdev, int type) {

int err;

struct clk *otg_clk;

if (type != S5P_USB_PHY_HOST)

return -EINVAL;

otg_clk = clk_get(&pdev->dev, "otg");

if (IS_ERR(otg_clk)) {

dev_err(&pdev->dev, "Failed to get otg clockn");

return PTR_ERR(otg_clk);

}

err = clk_enable(otg_clk);

if (err) {

clk_put(otg_clk);

return err;

}

if (readl(S5PV210_USB_PHY_CON) & (0x1<<1)) {

clk_disable(otg_clk);

clk_put(otg_clk);

return 0;

}

__raw_writel(__raw_readl(S5PV210_USB_PHY_CON) | (0x1<<1),

S5PV210_USB_PHY_CON);

__raw_writel((__raw_readl(S3C_PHYPWR)

& ~(0x1<<7) & ~(0x1<<6)) | (0x1<<8) | (0x1<<5) | (0x 1<<4),

S3C_PHYPWR);

__raw_writel((__raw_readl(S3C_PHYCLK) &~(0x1<<7)) | (0x3<< 0),

S3C_PHYCLK);

__raw_writel((__raw_readl(S3C_RSTCON)) | (0x1<<4) | (0x1< <3),

S3C_RSTCON);

__raw_writel(__raw_readl(S3C_RSTCON) & ~(0x1<<4) & ~(0x1< <3),

S3C_RSTCON);

/* "at least 10uS" for PHY reset elsewhere, 20 not enough here... */

udelay(50);

clk_disable(otg_clk);

clk_put(otg_clk);

return 0;

}

int s5p_usb_phy_exit(struct platform_device *pdev, int type) {

if (type != S5P_USB_PHY_HOST)

return -EINVAL;

__raw_writel(__raw_readl(S3C_PHYPWR) | (0x1<<7)|(0x1<<6),

S3C_PHYPWR);

__raw_writel(__raw_readl(S5PV210_USB_PHY_CON) & ~(1<<1),

S5PV210_USB_PHY_CON);

return 0;

}

主要工作是获取otg时钟,设置USB相关的寄存器。

2.6.1 编写setup-usb-phy.h文件

在include/linux/platform_data目录下创建setup-usb-phy.h

文件。必须创建该头文件,才能使得archarm

mach-s5pv210mach-smdkv210.c里面的程序得以生效,否则在编译时会出错的。

具体代码如下:

3. make menuconfig 配置工作

前面做了那么多工作,为谁而做?为配置选项而做的。这是本章节的重头戏。

在内核目录下输入make menuconfig,进入内核配置菜单栏,配置如下:

具体配置如下所示,由于篇幅有限,这里就不一一截图啦,相信根据下面的方法配置能让大家清晰了解整个

配置过程。

Device Drivers------->

SCSI device support-------->

<*>SCSI device support

[ * ]legacy /proc/scsi/support

<*>SCSI disk support

<*>SCSI CDROM support

<*>SCSI generic support

HID support---------------->

<*>Generic HID driver

[*]USB support------------>

<*>Support for Host-side USB

<*>EHCI HCD ( USB 2.0 ) support

[ * ]Improved Transaction Translator schedulin g

[ * ]S5P EHCI support

<*>OHCI HCD support

[ * ]OHCI support for Samsung S5P SoC Serie s

[ * ]Generic OHCI driver for a platform dev ice

<*>Generic EHCI driver for a platform device

<*>USB Mass Storage support

[ * ]USB Mass Storage verbose debug

<*>SanDisk SDDR-09 (and other SmartMedia,includ ing DPCM support )

<*>SanDisk SDDR-o5 SmartMedia support

完成以上所有移植后,就可以编译内核了,在内核目录下使用make uImage命令编译内核。如果编译

过程中出现说获取不到usbhost时钟,那么将ohci-s5p.c里的s5p_ohci_probe()函数里的:

s5p_ohci->clk = devm_clk_get(&pdev->dev, "usbhost");

改为:

s5p_ohci->clk = devm_clk_get(&pdev->dev, "usb-host");

三.S5PV210主机控制器驱动的测试

移植了那么久,终于可以见证下结果了,是不是有点兴奋呢。好啦,废话就不多说了,让我们一起

见证奇迹吧。

将新的uImage烧到webee210开发板,启动内核,如果能够成功启动内核,并且出现下面的信息:

表明前面的移植是成功的。在这里先肯定下自己。

接下来,好戏即将上场。

四.驱动之手动测试

4.1 U盘测试

将U盘(注意,不要插USB3.0的U盘)插入webee210开发板的USB HOST接口,观察打印信息(不同U盘信息可能不完全一致):

插入U盘的瞬间,就输出那么多的信息。从信息里,我们可以知道,webee210开发板已经识别出你插入的是U盘,

并且知道你的U盘的容量有多大等等信息。那我们接下来测试一下U盘能不能读写呗~~先挂接U盘,然后进入mnt

目录

查下U盘的内容

别大惊小怪哦,打?的是由于中文字体无法正常显示的原因。

接下来我们来验证一下U盘能不能被读写。先创建一个temp.txt文件:

然后往temp.txt里写数据:

/* 注意了,使用echo命令,输入的内容不能有空格*/

查看是否写入成功,用命令:

拔掉U盘时,显示:

4.2 驱动测试之鼠标

将鼠标(注意,不要插USB3.0的鼠标)插入webee210开发板的USB HOST 接口,观察打印信息(不同鼠标信

息可能不完全一致):

Webee210开发板也能识别出你插入的是鼠标,并帮你找到相应的鼠标驱动并安装上。当然了,接入不同的

鼠标打印的信息可能会有差别。包括后面的hexdump命令输出的信息也有可能不同。

说到测试,怎么测试鼠标设备驱动呢?还记得输入子系统里怎么测试驱动了吗?还记得input_event结构体?

对,鼠标设备驱动除了有与USB相关,还与输入子系统密切相关。这里,我们使用下面命令来测试鼠标。

当你挪动鼠标,往左挪动、往右挪动;往前挪动、往后挪动;向前滚动鼠标中键、向后滚动鼠标中键;

按下左键、按下右键;只要你对鼠标有动作,它都会上报,并将信息打印出来。具体这些数据有什么含义,

自己去研究一下。有意思的是,不同厂家的鼠标,滚动的动作在input_event

结构体里的代表的意义有可能

不一样。到这里,USB HOST相关的驱动就移植完了,USB设备也可以正常使用了。

说明:还可以用于手机usb连接,由于一时之间找不到数据线,所以无法演示效果,相信经过上面的步骤演示,

大家应该也知道手机的测试做法也差不多的。

usb驱动程序教程

编写Windows https://www.360docs.net/doc/6c10544874.html,的usb驱动程序教程 Windows https://www.360docs.net/doc/6c10544874.html, 是微软推出的功能强大的嵌入式操作系统,国内采用此操作系统的厂商已经很多了,本文就以windows https://www.360docs.net/doc/6c10544874.html,为例,简单介绍一下如何开发windows https://www.360docs.net/doc/6c10544874.html, 下的USB驱动程序。 Windows https://www.360docs.net/doc/6c10544874.html, 的USB系统软件分为两层: USB Client设备驱动程序和底层的Windows CE实现的函数层。USB设备驱动程序主要负责利用系统提供的底层接口配置设备,和设备进行通讯。底层的函数提本身又由两部分组成,通用串行总线驱动程序(USBD)模块和较低的主控制器驱动程序(HCD)模块。HCD负责最最底层的处理,USBD模块实现较高的USBD函数接口。USB设备驱动主要利用 USBD接口函数和他们的外围设备打交道。 USB设备驱动程序主要和USBD打交道,所以我们必须详细的了解USBD提供的函数。 主要的传输函数有: abourttransfer issuecontroltransfer closetransfer issuein te rruptransfer getisochresult issueisochtransfer gettransferstatus istransfercomplete issuebulktransfer issuevendortransfer 主要的用于打开和关闭usbd和usb设备之间的通信通道的函数有: abortpipetransfers closepipe isdefaultpipehalted ispipehalted openpipe resetdefaultpipe resetpipe 相应的打包函数接口有: getframelength getframenumber releaseframelengthcontrol setframelength takeframelengthcontrol 取得设置设备配置函数: clearfeature setdescriptor getdescriptor setfeature

Qualcomm USB驱动安装步骤

高通USB驱动安装步骤 1. 需要的文件 \\192.168.50.11\Common\Tools\7k_required\android_usb_windows.zip \\192.168.50.11\Common\Tools\7k_required\QPST_WINAND1000\HY11-VN949-1.zip 解压缩2个文件,其中,解压缩HY11-VN949-1.zip后出现3个子目录 2. 连接电源和手机,把USB线插入手机,手机上电,系统提示新设备 一共要装5个驱动,默认的顺序是: 1 (DIAG), 2 (Modem), 3 (ADB), 4 (GPS), 5 (Mass storage,自动安装驱动) 下面2步对所有设备都一样 选择“下一步”

选择“下一步” 2.1 DIAG/Modem/GPS设备的安装 对第1 (DIAG), 2 (Modem), 4 (GPS)个设备,选择如下:

选择“在这些位置上搜索最佳驱动程序”,然后浏览路径时,选择解压出来的所在的路径,“安装”; 然后系统提示找不到qcusbser.sys,指定目录到 2.2 对第3个设备(Android ADB device) 前2步过后 选择“不要搜索。我要自己选择要安装的驱动程序”,下一步

USB驱动程序编写

USB驱动程序编写 linux下usb驱动编写(内核2.4)——2.6与此接口有区别2006-09-15 14:57我们知道了在Linux 下如何去使用一些最常见的USB设备。但对于做系统设计的程序员来说,这是远远不够的,我们还需要具有驱动程序的阅读、修改和开发能力。在此下篇中,就是要通过简单的USB驱动的例子,随您一起进入USB驱动开发的世界。 USB骨架程序(usb-skeleton),是USB驱动程序的基础,通过对它源码的学习和理解,可以使我们迅速地了解USB驱动架构,迅速地开发我们自己的USB硬件的驱动。 USB驱动开发 在掌握了USB设备的配置后,对于程序员,我们就可以尝试进行一些简单的USB驱动的修改和开发了。这一段落,我们会讲解一个最基础USB框架的基础上,做两个小的USB驱动的例子。 USB骨架 在Linux kernel源码目录中driver/usb/usb-skeleton.c为我们提供了一个最基础的USB驱动程序。我们称为USB骨架。通过它我们仅需要修改极少的部分,就可以完成一个USB设备的驱动。我们的USB驱动开发也是从她开始的。 那些linux下不支持的USB设备几乎都是生产厂商特定的产品。如果生产厂商在他们的产品中使用自己定义的协议,他们就需要为此设备创建特定的驱动程序。当然我们知道,有些生产厂商公开他们的USB协议,并帮助Linux驱动程序的开发,然而有些生产厂商却根本不公开他们的USB协议。因为每一个不同的协议都会产生一个新的驱动程序,所以就有了这个通用的USB驱动骨架程序,它是以pci 骨架为模板的。 如果你准备写一个linux驱动程序,首先要熟悉USB协议规范。USB主页上有它的帮助。一些比较典型的驱动可以在上面发现,同时还介绍了USB urbs的概念,而这个是usb驱动程序中最基本的。 Linux USB 驱动程序需要做的第一件事情就是在Linux USB 子系统里注册,并提供一些相关信息,例如这个驱动程序支持那种设备,当被支持的设备从系统插入或拔出时,会有哪些动作。所有这些信息都传送到USB 子系统中,在usb骨架驱动程序中是这样来表示的: static struct usb_driver skel_driver = { name: skeleton, probe: skel_probe, disconnect: skel_disconnect, fops: &skel_fops, minor: USB_SKEL_MINOR_BASE, id_table: skel_table,

未能成功安装设备驱动程序MTPUSB设备安装失败的解决办法

未能成功安装设备驱动程序M T P U S B设备安装失败的解决办法 文件编码(GHTU-UITID-GGBKT-POIU-WUUI-8968)

M T P U S B设备安装失败未能成功安装设备驱动程序 终极解决方法 环境介绍:电脑系统win7(32位)已安装摩托罗拉手机驱动版本(其他版本应该也行,不行的话去摩托罗拉官网下载最新驱动) 手机型号:摩托罗拉defy mb525(系统) 备注:其他电脑操作系统和不同型号手机可参考此方法,找到相应设置项即可。 问题简介: 1.当我们把手机连接至电脑,把模式调制成“摩托罗拉手机门户”时,出现下列情况 2.过一会之后便会弹出提示说:未能成功安装设备驱动程序

3.单击查看详情便弹出窗口如下图所示: 4.此时桌面右下角图标出现黄色三角号,如图所示: 5.于是我们就开始不淡定了,怎么看怎么别扭、抓狂、按耐不住。下面介绍问题解决方案 解决方法: 1.我的电脑——右键单击——管理——设别管理器,之后会看到如图所示:在便携设备下有黄色三角号提示,即是我们纠结的MTP USB设备安装不成功的展示。

MIUI手机操作系统为例,其他手机操作系统需将USB绑定服务开启即可)。选择设置——系统——共享手机网络——USB绑定,将该选项设置为“开”,这是你会发现如图所示变化,在设备管理器面板中没有了便携设备选项及黄色三角号提醒,如图所示:(但桌面右下角的黄色三角警示还在)

3.在完成以上步骤后,用手机打开WIFI并登录无线WLAN,手机打开网页检验连接是否正常,若正常则如下图所示,黄色三角号警示消失,问题解决;若以上步骤没有解决问题,请先连接WIFI并登录WLAN之后,再按步骤操作。 4.完成以上步骤并解决问题后,选择电脑桌面网络——右键单击——属性,如下图所示:此时不仅手机能上网,而且电脑也能正常连接网络,正常上网。(我的体验是连接数据不稳定,时不时的要手机重新登陆WIFI,才有数据传输,可能是高校WLAN的问题,在家网速快的可以尝试一下) 5.通过这个问题的解决,我才知道原来MTP USB设备安装失败,未能成 功安装设备驱动程序的原因是我们手机里面没有启用该设备服务。今天 才知道MTP USB设备是与手机里的共享手机网络中“USB绑定”服务相关 联的,是电脑用来使用手机WIFI网络连接进行上网的工具。

USB驱动程序源代码

项目报告7 USB驱动程序源代码作者:罗仕波 一.头文件go7007sb.h /* *go7007sb.h - this file includes all relative header files that *will be used in go7007sb vedio usb interface driver, and it *also defines all relative driver private data structures and *it's io control commands. */ #ifndef _GO7007SB_H #define _GO7007SB_H #include #include #include #include #include #include #include #include #include #include #include #include //#define DEBUG #define DRIVER_VERSION "1.0.0" #define DRIVER_DESC "USB GO7007SB Driver" #include MODULE_AUTHOR("Luo Shibo"); MODULE_DESCRIPTION(DRIVER_DESC" "DRIVER_VERSION); MODULE_LICENSE("GPL"); /* *io control commands definition,these commands will be *used to control the device in function iocntl_go7007sb */ #define GO7007SB_IOC_MAGIC 'U' //command magic number #define GO7007SB_IOC_RESET _IO(GO7007SB_IOC_MAGIC,0) //software reset the device

最新开发usb驱动程序的方法连载一

最新开发usb驱动程序的方法连载一 开发usb驱动程序的方法(连载二) NT还有更多其他的对象,例如中断对象、Controller对象、定时器对象等等,但在我们开发的驱动程序中并没有用到,因此在这里不做介绍。 I/O缓冲策略 很明显的,驱动程序和客户应用程序经常需要进行数据交换,但我们知道驱动程序和客户应用程序可能不在同一个地址空间,因此操作系统必须解决两者之间的数据交换。这就就设计到设备的I/O缓冲策略。 读写请求的I/O缓冲策略 前面说到通过设置Device对象的Flag可以选择控制处理读写请求的I/O缓冲策略。下面对这些缓冲策略分别做一介绍。 1、缓冲I/O(DO_BUFFERED_IO) 在读写请求的一开始,I/O管理器检查用户缓冲区的可访问性,然后分配与调用者的缓冲区一样大的非分页池,并把它的地址放在IRP的AssociatedIrp.SystemBuffer域中。驱动程序就利用这个域来进行实际数据的传输。 对于IRP_MJ_READ读请求,I/O管理器还把IRP的UserBuffer域设置成调用者缓冲区的用户空间地址。当请求完成时,I/O管理器利用这个地址将数据从驱动程序的系统空间拷贝回调用者的缓冲区。对于IRP_MJ_WRITE写请求,UserBuffer被设置为NULL,并把用户缓冲区的数据拷贝到系统缓冲区中。 2、直接I/O(DO_DIRECT_IO) I/O管理器首先检查用户缓冲区的可访问性,并在物理内存中锁定它。然后它为该缓冲区创建一个内存描述表(MDL),并把MDL的地址存放在IRP的MdlAddress域中。AssociatedIrp.SystemBuffer和 UserBuffer 都被设置为NULL。驱动程序可以调用函数 MmGetSystemAddressForMdl得到用户缓冲区的系统空间地址,从而进行数据操作。这个函数将调用者的缓冲区映射到非份页的地址空间。驱动程序完成I/O请求后,系统自动从系统空间解除缓冲区的映射。 3、这两种方法都不是 这种情况比较少用,因为这需要驱动程序自己来处理缓冲问题。 I/O管理器仅把调用者缓冲区的用户空间地址放到IRP的UserBuffer 域中。我们并不推荐这种方式。 IOCTL缓冲区的缓冲策略 IOCTL请求涉及来自调用者的输入缓冲区和返回到调用者的输出缓冲区。为了理解IOCTL请求,我们先来看看WIN32 API DeviceIoControl函数的原型。 BOOL DeviceIoControl ( HANDLE hDevice, // 设备句柄 DWORD dwIoControlCode, // IOCTL请求操作代码 LPVOID lpInBuffer, // 输入缓冲区地址 DWORD nInBufferSize, // 输入缓冲区大小 LPVOID lpOutBuffer, // 输出缓冲区地址 DWORD nOutBufferSize, // 输出缓冲区大小 LPDWORD lpBytesReturned, // 存放返回字节数的指针

USB设备驱动程序设计

USB设备驱动程序设计 引言 USB 总线是1995 年微软、IBM 等公司推出的一种新型通信标准总线, 特点是速度快、价格低、独立供电、支持热插拔等,其版本从早期的1.0、1.1 已经发展到目前的2.0 版本,2.0 版本的最高数据传输速度达到480Mbit/s,能 满足包括视频在内的多种高速外部设备的数据传输要求,由于其众多的优点,USB 总线越来越多的被应用到计算机与外设的接口中,芯片厂家也提供了多种USB 接口芯片供设计者使用,为了开发出功能强大的USB 设备,设计者往往 需要自己开发USB 设备驱动程序,驱动程序开发一直是Windows 开发中较难 的一个方面,但是通过使用专门的驱动程序开发包能减小开发的难度,提高工 作效率,本文使用Compuware Numega 公司的DriverStudio3.2 开发包,开发了基于NXP 公司USB2.0 控制芯片ISP1581 的USB 设备驱动程序。 USB 设备驱动程序的模型 USB 设备驱动程序是一种典型的WDM(Windows Driver Model)驱动程序,其程序模型如图1 所示。用户应用程序工作在Windows 操作系统的用户模式层,它不能直接访问USB 设备,当需要访问时,通过调用操作系统的 API(Application programming interface)函数生成I/O 请求信息包(IRP),IRP 被传输到工作于内核模式层的设备驱动程序,并通过驱动程序完成与UBS 外设通 信。设备驱动程序包括两层:函数驱动程序层和总线驱动程序层,函数驱动程 序一方面通过IRP 及API 函数与应用程序通信,另一方面调用相应的总线驱动 程序,总线驱动程序完成和外设硬件通信。USB 总线驱动程序已经由操作系统 提供,驱动程序开发的重点是函数驱动程序。 USB 设备驱动程序的设计

USB驱动程序的编写采用WDM驱动程序

U S B驱动程序的编写采用W D M驱动程序 Document serial number【UU89WT-UU98YT-UU8CB-UUUT-UUT108】

USB驱动程序的编写采用WDM 驱动程序。WDM 驱动程序是一些例程的集合,它们被动地存在,等待主机系 统软件(PnP 管理器、I/O 管理器、电源管理器等)来调用或激活它们。具体驱动程序不同,其所包含 的例程也不同。一个WDM 驱动程序的基本组成包括以下5个例程:(1)驱动程序入口例程:处理驱动程序的初始化。 (2)即插即用例程:处理PnP 设备的添加、删除和停止。 (3)分发例程:处理用户应用程序发出的各种 I/O 请求。 (4)电源管理例程:处理电源管理请求。 (5)卸载例程:处理驱动程序的卸载。 包含文件: , , , , , makefile,sources) 在文件中,包含了上述五个例程: 中定义了各种数据结构还有各种IOCTL控制码,用于不同数据的读写。

中实现了各种驱动例程。包含了上述五个所说例程外还包含了其他例程,课程从下面的驱动 程序入口例程得出一些信息。 驱动程序入口例程: NTSTATUS DriverEntry( IN PDRIVER_OBJECT DriverObject, IN PUNICODE_STRING RegistryPath ) { NTSTATUS ntStatus = STATUS_SUCCESS; PDEVICE_OBJECT deviceObject = NULL; DriverObject->MajorFunction[IRP_MJ_CREATE] = Ezusb_Create; DriverObject->MajorFunction[IRP_MJ_CLOSE] = Ezusb_Close; ources. If you want to add a new source # file to this

开发usb驱动程序的方法(连载一)

开发usb驱动程序的方法(连载一) 开始驱动程序设计 下面的文字是从Microsoft的DDK帮助中节选出来的,它让我们明白在开始设计驱动程序应该注意些什么问题,这些都是具有普遍意义的开发准则。应该支持哪些I/O请求在开始写任何代码之前,应该首先确定我们的驱动程序应该处理哪些IRP例程。 如果你在设计一个设备驱动程序,你应该支持和其他相同类型设备的NT驱动程序相同的IRP_MJ_XXX 和IOCTL请求代码。 如果你是在设计一个中间层NT驱动程序,应该首先确认你下层驱动程序所管理的设备,因为一个高层的驱动程序必须具有低层驱动程序绝大多数IRP_MJ_XXX例程入口。高层驱动程序在接到I/O 请求时,在确定自身IRP当前堆栈单元参数有效的前提下,设置好IRP中下一个低层驱动程序的堆栈单元,然后再调用IoCallDriver 将请求传递给下层驱动程序处理。 一旦决定好了你的驱动程序应该处理哪些IRP_MJ_XXX,就可以开始确定驱动程序应该有多少个Dispatch例程。当然也可以考虑把某些 RP_MJ_XXX处理的例程合并为同一例程处理。例如在ChangerDisk 和 VDisk里,对IRP_MJ_CREATE和IRP_MJ_CLOSE处理的例程就是同一函数。对IRP_MJ_READ和IRP_MJ_WRITE处理的例程也是同一个函数。 应该有多少个Device对象? 一个驱动程序必须为它所管理的每个可能成为I/O请求的目标的物理和逻辑设备创建一个命名Device对象。一些低层的驱动程序还可能要创建一些不确定数目的Device对象。例如一个硬盘驱动程序必须为每一个物理硬盘创建一个Device对象,同时还必须为每个物理磁盘上的每个逻辑分区创建一个Device对象。一个高层驱动驱动程序必须为它所代表的虚拟设备创建一个Device 对象,这样更高层的驱动程序才能连接它们的Device对象到这个驱动程序的Device对象。另外,一个高层驱动程序通常为它低层驱动程序所创建的Device对象创建一系列的虚拟或逻辑Device对象。 尽管你可以分阶段来设计你的驱动程序,因此一个处在开发阶段的驱动程序不必一开始就创建出所有它将要处理的所有Device对象。但从一开始就确定好你最终要创建的所有Device对象将有助于设计者所要解决的任何同步问题。另外,确定所要创建的Device对象还有助于你定义Device对象的Device Extension 的内容和数据结构。 开始驱动程序开发 驱动程序的开发是一个从粗到细逐步求精的过程。NT DDK的src\ 目录下有一个庞大的样板代码,几乎覆盖了所有类型的设备驱动程序、高层驱动程序和过滤器驱动程序。在开始开发你的驱动程序之前,你应该在这个样板库下面寻找是否有和你所要开发的类似类型的例程。例如我们所开发的驱动程序,虽然DDK 对USB描述得不是很详细,我们还是可以在src\storage\class目录发现很多和USB设备有关的驱动程序。下面我们来看开发驱动程序的基本步骤。 最简的驱动程序框架 1、写一个DriverEntry例程,在里面调用IoCreateDevice创建一个Device对象。 2、写一个处理IRP_MJ_CREA TE请求的Dispatch例程的基本框架 (参见DDK Kernel-Mode Drivers 4.4.3描述的一个DispatchCreate 例程所要完成的最基本工作。当然写了DispatchCreate例程后,要在DriverEntry 例程为IRP_MJ_CREA TE初始化例程入口)。如果驱动程序创建了多于一个Device对象,则必须为IRP_MJ_CLOSE 请求写一个例程,该例程通常情况下可以和DispatchCreate共用一个例程,参见参见DDK Kernel-Mode Drivers 4.4.3。 3、编译连接你的驱动程序。

USB设备的识别以及驱动安装问题

USB设备的识别以及驱动安装问题 问题描述 USB设备的硬件ID简介以故障判断和驱动安装方法 解决方案 通用串行总线(Universal Serial Bus,USB)是我们目前经常使用的计算机接口,可以连接的设备也是多种多样的,在日常咨询中难免遇到产品相关或其他第三方USB设备安装驱动的问题,对于此类问题,我们应该如何处理呢? 硬件ID是电脑中每个硬件的一个编号,固化在硬件的芯片里,所有设备都有此类编号。所有测试软件都有可能会出错,只有硬件ID是最可靠的,只要确认好INF文件中包含需要的硬件ID,就可以保证驱动是可以用的。 对于USB相关ID的简介 常见的USB硬件ID格式:USB\Vid_xxxx&Pid_yyyy&Rev_zzzz其中Vid表示硬件厂商信息,Pid表示产品编号,对于一般驱动安装我们需要核实Vid,Pid信息,其中Vid的厂商对照表已经更新到《驱动下载&软件安装汇总》(知识库编号:30118)中以便于查询。 比如ThinkPad鼠标设备ID如上图通过VID_04B3,在《驱动下载&软件安装汇总》中查询,结果IBM Corp.表示是IBM授权的设备。 另外,其中的HID表示的是人体学接口设备(Human Interface Device, HID),目前USB设备常见的的有人体学接口设备(Human Interface Device,HID)、通信设备类(Communication Device Class,CDC)和大容量存储设备(Mass Storage Device,MSD)等几类设备,也可以从兼容ID中的Class字段来判断是什么类型的设备,如下图: 比如上图中的Class_03表示的就是HID设备,一般情况下典型代码为1,2,3,6,7,8,

USB驱动开发

第17章USB设备驱动 USB设备驱动和PCI设备驱动是PC中最主要的两种设备驱动程序。与PCI协议相比,USB协议更复杂,涉及面较多。本章将介绍USB设备驱动开发。首先介绍USB协议,使读者对USB协议有个整体认识。然后介绍USB设备在WDM中的开发框架。由于操作系统的USB总线驱动程序提供了丰富的功能调用,因此开发USB驱动开发变得相对简单,只需要调用USB总线驱动接口。 17.1 USB总线协议 USB总线协议比PCI协议复杂的多,涉及USB物理层协议,又涉及USB传输层协议等。对于USB驱动程序开发者来说,不需要对USB协议的每个细节都很清楚。本节概要地介绍USB总线协议,并对驱动开发者需要了解的地方进行详细介绍。 17.1.1 USB设备简介 USB即通用串行总线(Universal Serial Bus),是一种支持即插即用的新型串行接口。也有人称之为“菊链(daisy-chaining)”,是因为在一条“线缆”上有链接127 个设备的能力。USB要比标准串行口快得多,其数据传输率可达每秒4Mb~12Mb(而老式的串行口最多是每秒115Kb)。除了具有较高的传输率外,它还能给外围设备提供支持。 需要注意的是,这不是一种新的总线标准,而是计算机系统连接外围设备(如键盘、鼠标、打印机等)的输入/输出接口标准。到现在为止,计算机系统连接外围设备的接口还没有统一的标准,例如,键盘的插口是圆的、连接打印机要用9针或25针的并行接口、鼠标则要用9针或25针的串行接口。USB能把这些不同的接口统一起来,仅用一个4针插头作为标准插头,如图17-1所示。通过这个标准插头,采用菊花链形式可以把所有的外设连接起来,并且不会损失带宽。USB正在取代当前PC上的串口和并口。

USB键盘驱动程序

/* * $Id: usbkbd.c,v 1.27 2001/12/27 10:37:41 vojtech Exp $ * * Copyright (c) 1999-2001 Vojtech Pavlik * * USB HIDBP Keyboard support */ /* * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * * Should you need to contact me, the author, you can do so either by * e-mail - mail your message to <>, or by paper mail: * Vojtech Pavlik, Simunkova 1594, Prague 8, 182 00 Czech Republic */ #include #include #include #include #include #include #include /* * Version Information */ #define DRIVER_VERSION "" #define DRIVER_AUTHOR "Vojtech Pavlik <>" #define DRIVER_DESC "USB HID Boot Protocol keyboard driver" #define DRIVER_LICENSE "GPL"

如何写驱动程序

我这里重点的介绍如何写驱动程序,对于一些应用程序我就不做介绍了,因为我对于那些高层的东西写得很少。倘若再讲,有班门弄斧之嫌,呵呵! 作为WIN98和WIN2K推荐的一项新技术来说,USB的驱动程序和以往的直接跟硬件打交道的WIN95的VXD的方式的驱动程序不同,它应该是WDM类型的。 USB的WDM接口框图如下(这个图可以说是USB软件总体框图) 对于HID的设备,就可以采用上图左上边的结构,其它类的话采用右上的结构,其实右边的结构可以又细分成两层,一层是Class Driver,一层是Miniport Driver。而倒数第三行的UHCD和OpenHCI分别是由INTEL和COMPAQ两位老大定的一个和硬件有关的底层驱动程序标准,各位可以根据所需要的选择。 对于USB的驱动程序,大家还得去了解WDM驱动程序的写法,或者早些时候的NT驱动程序,其实WDM驱动程序可以看做是NT驱动程序的一个update,只是增加了一些新的特性。 “写驱动程序是一个很漫长和繁琐的工作,在此之前,你最好要熟悉硬件,熟悉C/C++,还要用过DDK,会用一些调试程序,如SOFTICE和WINDBG之类。如果一切就绪,你就可以开始写驱动程序,工作的进程有时侯会取决于你的运气”。(这是一位留美的朋友对我说的,我写出来和大家共享) 下面是我从一个朋友那里得到的一篇文章的摘要: NT驱动程序的分层结构 驱动程序是指管理某个外围设备的一段程序代码。NT采用更灵活的分层驱动方法,允许杂应用程序和硬件之间存在几个驱动程序层次。分层机制允许NT更加广泛地定义驱动程序,包括文件系统、逻辑卷管理器和各种网络组件,各种物理设备驱动程序等等。 1、设备驱动程序 这些是管理实际数据传输和控制特定类型的物理设备的操作的驱动程序,包括开始和完成I/O操作,处理中断和执行特定的设备要求的任何差错处理。

USB驱动程序安装说明

USB编程电缆驱动程序安装说明 概述 USB编程电缆或USB接口产品是通过将电脑的USB接口模拟成传统的串行口(通常为COM3),从而使用现有的编程软件或通信软件,通过编程电缆与PLC 等设备的传统接口进行通信。 功能 ●支持的操作系统Windows2000/Windows XP ●完全兼容USB 2.0规范 ●USB总线供电(非隔离产品)、或USB总线供电与PLC的编程口同时供 电(隔离型产品) ●波特率:300bps~1Mbps自动适应 ●每台PC只支持一个USB接口转换产品(如一台电脑需使用多个USB 接口产品,需为各个USB接口产品设置不同的序列号,请咨询生产厂家 索取序列号设置工具软件) 系统要求 请在使用USB编程电缆之前确认你的电脑是IBM PC兼容型并具备以下最低系统要求: ●Intel兼容586DX4-100MHz中央处理器或更高 ●一个标准的USB接口(4-pin A型插座) ●运行操作系统为Windows2000或Windows XP 驱动程序的安装 驱动程序的安装非常简单,只需按提示进行即可,以Windows XP为例,按以下步骤进行: 1、打开将要连接USB编程电缆或USB接口产品的电脑电源,并确认电脑 的USB口已经启动并正常工作。 2、将USB编程电缆或USB接口产品插入电脑的USB接口,Windows将检 测到设备并运行添加新硬件向导帮助你设置新设备,插入驱动程序光盘 并单击下一步继续。 如果Windows没有提示找到新硬件,那么在设备管理器的硬件列表中, 展开“通用串行总线控制器”,选择带问号的USB设备,单击鼠标右键 并运行更新驱动程序。

(完整版)AT89C51单片机USB接口驱动和应用程序的开发毕业论文

北方民族大学 学士学位论文论文题目:AT89C51单片机USB接口驱动和应用程序的开发 院(部)名称:电信学院 学生姓名:杨闯 指导教师姓名:周春艳 论文提交时间: 2010年5月24日 论文答辩时间:2010年5月29日 学位授予时间:

北方民族大学教务摘要 通用串行总线USB是一种新兴的并逐渐取代其他接口标准的数据通信标准。USB,由于速度快,使用方便灵活,易于扩展,支持即插即用,成本低廉等一系列优点,得到了广泛的应用。 本论文以基于USB总线的数据采集系统的研制过程为主要内容,阐述了利用CH372与ATMEL的AT89C51等组成的一套数据采集系统的设计方案、开发方法和开发过程,并给出了具体实现方案。 论文首先简要介绍了USB总线的相关内容,然后介绍了数据采集系统的设计。数据采集系统的设计包括硬件设计、固件程序开发、驱动程序开发和应用程序开发四部分。在硬件设计部分,首先介绍了设计中所用的CH372的性能和特点,然后给出了具体硬件设计方案,并对设计中应该注意的问题进行了说明。驱动和应用程序主要完成USB设备的读写和即插即用功能,并提供一个友好的人机界面,对数据采集系统进行控制并显示采集后的数据。 本论文已完成了基于USB总线的数据采集系统的设计,用其实现了基本的数据采集功能。使用USB总线传输数据,为数据采集系统与计算机之间的通讯开辟了新的道路。 关键词:USB、驱动程序、应用程序、AT89C51、CH372

Abstract Universal serial bus USB is one kind of emerging and replace other interface standards of data communication standards. USB, due to fast, convenient and flexible easy to expand, to support plug and play, low cost advantages, such as widely application. The paper is mainly concerned with design process of data acquisition system that is based on USB bus. The design scheme, developing method and developing process of a suit of data acquisition system used with CH372 and ATMEL’s AT89C51 are expatiate. In addition, the paper also gives the material realization scheme. At fist, the paper introduces the protocol of USB bus in brief, and then discusses the design of data acquisition system, which includes four parts, , firmware design, device driver and application program. In the in detail; the questions which should be paid attention to in design is explained. Drivers and applications of the main equipment and USB plug and play function, and provide a friendly -machine interface, control of

编写USB驱动程序步骤

编写USB驱动程序步骤: 1所有usb驱动都必须创建主要结构体struct usb_driver struct usb_driver ->struct module *owner (有他可正确对该驱动程序引用计数,应为THIS_MODULE) ->const char *name (驱动名字,运行时可在查看 /sys/bus/usb/drivers/) ->const struct usb_device_id *id_table (包含该驱动可支持的所有不同类型的驱动设备,没添探测回调函数不会被调用) ->int (*probe)(struct usb_interface *intf,const struct usb_device_id *id) (usb驱动探测函数,确认后struct usb_interface 应恰当初始化,然后返0,如果出错则返负值) ->void(*disconnect)(struct usb_interface *intf) (当struct usb_interface 被从系统中移除或驱动正从usb核心中卸载时,usb核心将调用此函数)代码实例: static struct usb_driver skel_driver={ .owner = THIS_MODULE, .name = "skeleton", .id_table = skel_table, .probe = skel_probe, .disconnect = skel_disconnect, }; ↓ 2usb_register()注册将struct usb_driver 注册到usb核心,传统是在usb驱动程序模块初始化代码中完成该工作的

安装USB驱动过程中可能遇到的问题及解决方案

安装USB 驱动过程中可能遇到的问题及解决方案 概述: 本文列举了在安装USB 驱动程序过程中可能遇到的常见问题,并提供了常用的解 决方案。对于其他特殊的情况,如:驱动安装之后出现打印乱码等现象,将在相 关的技术文档中予以进一步的说明。 本文包括: 1. 故障现象: 在打印时遇到:打印到DOT4_00x 端口错误。 故障分析: 1 ).USB 端口没有被正确地识别。USB 电缆不符合规范,长度太长,或者加装 延长线,转接线,共享器等附加设备; 2 ).端口选择不正确; 3 ). 打印机驱动程序未正确安装;如果安装了不匹配的驱动也会出现端口错误。 比如:lj1010 打印机安装了同系列1015 的PCL5e 驱动; 4)). 系统和USB Host Controller 的影响; 5 ).端口供电不足。 解决方案: 1 ).正确连接USB 线,保证USB 电缆长度应小于 2 米,通讯质量较好;取 消延长线和共享器等附加设备; 2 ).检查打印机驱动属性中的端口选项,如果存在多个DOT4 端口, 则首选数 目较高的端口;查看是否有USB 端口,选择USB 端口打印测试; 3 ).取消双向支持;

4 ).完全卸载当前驱动,然后重新启动或热拔插USB 电缆,若系统自动找到新硬件,取消,在device manager 里发现usb printing support 后,再利用“添加打印机向导”添加打印机,安装与打印机语言相匹配的驱动程序,此时,应该选择USB-00X 端口;若系统无法检测到新硬件,要检查系统是否正确识别USB 芯片组,步骤如下: 在Windows 2000/XP 中(Windows 9x/Me 的操作步骤基本类似) ,依次点击“开始→设置→控制面板→系统→硬件→设备管理器”,找到并双击“通用串行总线控制器”。其中应当至少列出两类条目,一类是USB 控制器,另一个是USB Root Hub。如果PC 主板支持USB 2.0 ,并正常安装了驱动程序,一般会在此处显示USB 2.0 Root Hub 。 如果Windows 无法识别出USB 控制器,或在“其他设备”中出现“ USB 控制器”,那么说明主板芯片组的驱动程序或USB 2.0 的驱动程序没有安装成功。建议到芯片组官方网站下载最新的驱动程序,并确认Windows 能正确识别; 5 ).建议将打印机安装到其他计算机上测试; 6 ).保证USB 接口获得足够的电力。USB 设备包含从计算机通过USB 电缆驱动USB 通讯的电源。计算机在100mA 的低电力级别下可以检测到设备,但是需要500mA 才能维持大功率USB 设备的高速通讯(movable disk) 。当打印机得不到充分的电流供应时,也可能造成DOT4 无法正确的设定。建议将打印机直接插在屋内的电源插孔上,而非插在延长线上与其他的电器共用电流,同时尽量使用HP 所附的电源线而非其他可能不合格的电源线,或者为计算机添加有源的USB 集线器。 2. 故障现象: 1 ) . 激光打印机在运行光盘安装驱动程序,插入USB 电缆后或者在出现的新硬件向导下安装打印机时会发生这个错误“ 无法安装这个硬件,在安装LaserJet 1020 时出现了一个问题。安装该设备是发生了一个错误:这个设备的驱动程序丢失了一个必需的项,这可能是由于inf 是为Windows 95 或更新版本而写的。联系您的硬件供应商。”; 2 ).设备控制器的USB 主控制器中出现黄色叹号。 故障分析: 当用打印机驱动光盘的Windows 98 第二版的USB 打印支持驱动程序,而不是使用系统自带的USB 打印支持驱动程序时会发生这种错误。Windows 98 USB 打印驱动程序与更高版本的Windows 操作系统不兼容。

FX-USB-AW驱动安装说明

FX-USB-AW编程电缆驱动程序安装说明 概述 USB编程电缆是通过将电脑的USB口模拟成传统的串行口(通常为COM3),从而使编程软件SWOPC-FXGP/WIN和GPP通过FX-USB-A W编程电缆与FX系列PLC进行通信。 功能 ●支持的操作系统Windows XP/ Windows2000 ●兼容USB V1.1 V2.0 ●波特率:300bps~1Mbps自动适应 ●每台PC只支持一根USB编程电缆 系统要求 请在使用USB编程电缆之前确认你的电脑是IBM PC兼容型并具备以下最低系统要求: ●Intel兼容586DX4-100MHz中央处理器或更高 ●一个标准的USB接口(4-pin A型插座) 驱动程序的安装 驱动程序的安装非常简单,只需按提示进行即可,以Windows XP为例,按以下步骤进行: 1、打开电脑主机,插入驱动程序光盘。 2、将FX-USB-A W电缆插入电脑的USB接口,Windows将检测到设备并运行添加新 硬件向导帮助你设置新设备,并单击下一步继续。 如果Windows没有提示找到新硬件,那么在设备管理器的硬件列表中,展开“通 用串行总线控制器”,选择带问号的USB设备,单击鼠标右键并运行更新驱动程序。 3、Windows将检测到安装信息,并出现如下没有通过Windows徽标测试的信息框, 单击“仍然继续”。 4、继续安装,让Windows拷贝驱动程序文件到你的硬盘。 5、当Windows显示完成找到新硬件向导,单击“完成”结束安装。 6、安装完成后,请确认在Windows的“开始\控制面板\系统\硬件\设备管理器”菜单 的\“端口(COM和LPT)”\展开条目中出现“Prolific USB-to-Serial Comm(COMx)”, 这个COMx就是USB编程电缆使用的COM口号,该端口号与电脑有关,一般为 COM3或COM4,以后每次使用只要插入编程电缆就会出现该COM口,你只需在 编程软件或通信软件等应用软件中选中该COM口号即可通信。 驱动程序的删除 删除驱动程序是为了释放COM口资源以便其他设备使用,或驱动程序故障时需将其删除后重新安装,按下面步骤删除驱动程序: 1、从你的电脑上拔下USB编程电缆。 2、运行驱动光盘下的DRemover98_2k.exe程序 3、显示提示窗口,单击“OK”按钮即可。

相关文档
最新文档