搜档网
当前位置:搜档网 › 利用WinDriver开发PCI设备驱动程序

利用WinDriver开发PCI设备驱动程序

利用WinDriver开发PCI设备驱动程序
利用WinDriver开发PCI设备驱动程序

摘要:WinDriver是一套PCI驱动程序开发包。它改变了传统驱动程序开发的方法与思路,极在地简化了驱动程序的编制;同时,又没有牺牲驱动程序的性能,是一套高效、快捷的P CI驱动程序开发软件包。特别适合专业硬件人员的使用。

关键词:设备驱动程序 WinDriver PCI

WinDriver是Jungo公司出版的一个设备驱动程序开发组件,它可以大大加速PCI设备驱动程序的开发。作者在实际的项目中采用了WinDriver来开发设备驱动程序,取得了相当好的运行效果。从目前国内的资料上来看,大多数设计人员还是在用DDK、Wtools开发设备驱动程序,因而作者觉得有必要向大家介绍与推荐这个软件。

WinDriver是一套设备驱动程序开发组件,它的目的就是方便Windows程序员快速开发出P CI/ISA设备的Windows驱动程序(目前最新的版本V4.32还支持PCMCIA、USB设备的驱动程序的开发,并且除了支持Windows9X/NT系统外,还有支持Unix、Windows CE的版本推出)。利用WinDriver开发设备驱动程序,不需要熟悉操作系统的内核,整个驱动程序中的所有函数都是工作在用户态下的,通过与WinDriver的.Vxd或者.Sys文件交互来达到驱动硬件的目的。由于是一个用户态程序,效率的高低也就成了人们选择WinDriver时关心的一个问题。大量实践数据表明,WinDriver并没有通过牺牲系统性能来换取驱动程序的快速开发,的确是一个“像开发用户态程序那样简单,像核心态程序那样高效”[1]的开发工具。

图1是WinDriver的体系结构图。

1 WinDriver主要特征

·提供了从用户层访问硬件的简单方法;

·能够方便地将性能要求特别苛刻的部分通过Windriver提供的API插入到核心态模式运行,提高执行效率;

·对主流PCI接口芯片(AMCC、PLX、V3系列)提供了很好的支持;

·可以利用常见的软件开发平台(Visual C++、Borland C++、VB4、Java、Delphi);

·支持I/O、DMA、中断处理,支持PCI、ISA、EISA设备的开发;

·无需DDK以及核心态程序开发的经验。

2 开发步骤

a.根据WinDriver的文档,建议开发步骤如下:

·修改代码,加入定制功能;

·在用户态执行与调试代码;

·将性能苛刻部分插入到核心态;

b.我们在实际编写驱动程序的过程中发现,完全用WinDriver提供API来写驱动程序比在W izard生成的框架代码上修改更为灵活。一般来说,PCI驱动程序分成3个部分:初始化部分,对硬件资源的访问函数库、具体调用部分。其中,后面两个部分对于不同的硬件都是基本一致的。比如说,我们先后开发的基于AMCC5933与PLX9052的PCI接口卡,对于他们的硬件资源访问,用的都是WinDriver下面相同的API;两者开发的不同只在于初始化时对于硬件资源的锁定。所以只要开发出了针对一种接口芯片的系统的驱动代码后,以后一般只要修改接口芯片的ID值及一些寄存器的偏移值,就能够移植了,比每次生成不同的框架代码再改动也许要更简便。

3 实例分析

整个驱动程序的结构大致如下:

·打开WinDriver设备;

·查找我们要访问的PCI设备;

·枚举该设备的资源(内存、I/O、中断);

·锁定该设备的资源只能为我们所用,不能被其他程序访问;

·访问板上的资源;

·解锁资源;

·关闭WinDriver设备。

以下为一段使用WinDriver开发的AMCC5933DMA的驱动代码,利用这个程序来演示WinDriv er的程序结构。这个程序只要稍加修改,就可以用来作为其他PCI卡的驱动程序的一部分,例如PLX9050、9054。为了节省篇幅,省略了变量说明部分。程序中出现的变量大都由其名称可以反映含义,具体可以参见WinDriver的设计文档中的说明。

hWD=WD_Open(); //打开WinDriver设备,每次使用前必须调用;

pciScan.searched.dwVendorId=0x10e8; //AMCC公司供货号

pciScan.searched.dwDeviceId=0x4750; //AMCC5933的设备号

WD_PciScanCards (hWD,&pciSxcan); //枚举PCI槽上的设备

pciSlot =pciScan.cardSilt[0]; //假设只有我们一个设备得到设备槽的号码

pciCardInfo.pciSlot=pciSlot;

WD_PciGetCardInfo(hWD,&pciCardInfo); //得到该设备槽上的设备信息

Card=pciCardInfo.Card; //Card为一个反映PCI卡上资源的结构

cardReg.Card=Card;

WD_CardRegister(hWD,&cardReg); //向核心态登记,锁定卡上资源

Item=Card.Item[2]; //将卡上的号为2的资源赋给Item

if(Item.item==ITEM_MEMORY)

{

regAddr=Item.I.Mem.dwUserDirectAddr; //得到PCI卡上的内存映射到用户态的地址

}

Dma1.dwBytes=4*dwDWord;

Dma1.pUserAddr=pBuffer1;

Dma1.dwOptions=0;

WD_DMALock(hWD,&Dma1); //锁定用于DMA的内存资源

至此与PCI卡上的内存进行DMA传输的准备已经完成,下面只要写相应的控制字就可以启动DMA操作了。

4 常见问题的解答

(1)评估版本的功能限制及其解决

评估版本除了30天的限制外,与正式版本相比还有3个限制。其中影响最大的是所有的关闭函数(DMA锁定内存的解锁,资源的关闭…)都加了延时。这样我们在做数据采集卡的驱动程序时就要注意,最好只分配一次资源。比如说做DMA操作,不要反复地锁定内存,这样会在解锁时损失效率。一个折衷的方法是锁定DMA内存后,一旦这块内存写满后,就将其中数据拷到用户态程序分配的大内存中去。

(2)用WinDriver开的程序效率

在使用WinDriver或者VxdTools这类工具时,大家最关心的一个问题可能就是效率问题。从实践与分析来看,WinDriver生成的驱动代码的效率相当地高。比如PCI卡的高速数据采集涉及到DMA的应用,WinDriver提供相应的API来将卡上的内存映射到用户态程序所能直接访问的地址空间中,然后直接对这个映射后得到的地址进行DMA操作。也就是说,与用D DK来直接编写驱动程序的区别就在于地址映射的操作上,在这部分工作上面,用WinDrive r的API肯定没有直接用DDK写的专门面向特定硬件优化的代码来得高效。但是这部分代码实际上属于初始化工作,这部分的效率高低事实上并不会影响总体上的效率。

实际中,用WinDriver编写的PCI驱动程序在赛扬466、64M内存的机器上,在8位模式下可以稳定地采集4~8Mbytes/s的数据。而且随着硬件设计的改变,肯定还有提高余地。

经过实际应用,发现WinDriver这个软件使用快速,无论是开发效率还是实际达到的性能指标都相当令人满意。特别对于硬件开发人员来说,可以不必了解繁琐的操作系统的内核知识,就可以快速地开发出驱动程序,对于调试硬件是一个很好的帮助工具。

usb驱动程序教程

编写Windows https://www.sodocs.net/doc/5515703975.html,的usb驱动程序教程 Windows https://www.sodocs.net/doc/5515703975.html, 是微软推出的功能强大的嵌入式操作系统,国内采用此操作系统的厂商已经很多了,本文就以windows https://www.sodocs.net/doc/5515703975.html,为例,简单介绍一下如何开发windows https://www.sodocs.net/doc/5515703975.html, 下的USB驱动程序。 Windows https://www.sodocs.net/doc/5515703975.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

蓝牙4.0的驱动安装和产品使用说明

4.0蓝牙的驱动安装和产品使用说明 您好!欢迎您使用本产品!让我们一起尽情享受蓝牙的无线快乐吧! 首先让我们先大概了解一下本产品的特色: 1.CSR V4.0蓝牙适配器采用了CSR(Cambridge Silicon Radio)公司的最新的8510芯片。 2.支持Bluetooth High Speed v 3.0与low energy v 4.0,并 完全向下兼容v1.1/v1.2/v2.0/v2.1的蓝牙设备; 3.CSR蓝牙 4.0芯片通过被称为Wideband Speech的技术进 行音频编码解码,并进一步消除背景噪声和干扰,使无线音频的传输质量大幅提升,A2DP蓝牙立体声音频传输的音效极佳,可以媲美有线音频传输的音质; 4.蓝牙4.0技术拥有极低的运行和待机功耗,同时拥有跨厂商互 操作性,3毫秒低延迟,AES-128加密,无线覆盖范围增强; 5.是蓝牙3.0的升级增强版本,与3.0版本相比最大的不同就是低 功耗。

一:驱动部分 本产品是支持免驱,即插即用的。免驱的蓝牙适配器:意思并不是指不要驱动,而是微软公司自己在操作系统里集成了蓝牙驱动,当蓝牙适配器插上电脑后系统会自动安装微软的蓝牙驱动。但是经我们测试,目前微软自己的蓝牙驱动仅仅能支持蓝牙键鼠协议,部分手机的蓝牙文件传输和蓝牙串口等,并不能支持蓝牙音频功能。如果仅仅用免驱的适配器来连接蓝牙键盘或者鼠标,的确可以不用再额外安装驱动,直接插上去就可以连接、使用,但是如果需要与蓝牙耳机连接或者想体验更多的蓝牙应用,那么必须安装我们光盘内的驱动。 本驱动是简体中文版本 Windows XP_32位/Windows vista_32位/Windows7_32位/Windows8_32位操作系统,请打开“千月_32位”文件夹,双击setup 文件,即可开始千月蓝牙软件与驱动程序的安装。 Windows XP_64位/Windows vista_64位/Windows7_64位/Windows8_64位操作系统,请打开“千月_64位”文件夹,双击setup 文件,即可开始千月蓝牙软件与驱动程序的安装。 经测试,本驱动使用简单,性能稳定,为不影响您的正常使用,请安装完成后设置为不要再在线升级,具体操作请参考下图:

如何写linux pci设备驱动程序-看

何写linux pci设备驱动程序 original file:/Documentation/pci.txt translated by terrace PCI总线应用领域及其广泛并且令人惊奇。不同的pci设备有不同的需求以及不同的问题。因此,在linux内核中pci层支持就非常重要啦。本文档就是想为驱动程序设计开发人员解决pci处理中的各种问题。 Pci设备驱动程序的结构 现在有两种风格的的pci驱动程序结构:新风格的驱动(即让pci层来做大量设备探测工作并且支持热插拔功能)和旧风格的驱动(即由驱动程序自己探测设备)。除非你有很好的理由,否则就不要用旧风格写驱动程序。当驱动程序找到所驱动的设备后,将执行以下步骤: ①.启用设备 ②.访问设备配置空间 ③.检测设备资源(如基地址和中断号) ④.分配设备资源与设备通讯 下文将论述以上大部分步骤,其余部分请参考,它有不错的注释。 如果没有配置pci 子系统(即CONFIG_PCI 没有置位),以下介绍的大部分函数都被定义为内联函数,它们要么是空的,要么返回对应的错误代码以避免在驱动中出现过多的条件宏ifdefs。1.新风格的驱动程序 新风格的驱动程序只是在初始化时调用pci_register_driver,调用时使用一个指向struct pci_driver 的结构指针。该指针包含以下几个分量: name 驱动程序名称 id_table 指向一个与驱动程序相关的设备ID表的指针。大多数驱动程序应当用MODULE_DEVICE_TABLE(pci,…)将该设备ID表导出。在调用prob( )时设成NULL 以让系统检测到所有的pci设备。 probe 指向设备检测函数prob( ) 的指针。该函数将在pci设备ID与设备ID表匹配且还没有被其它驱动程序处理时(一般在对已存在的设备执行pci_register_driver或以后又有新设备插入时)被调用。调用时传入一个指向struct pci_driver结构的指针和与设备匹配的设备ID表做参数。若成功(驱动程序检测到pci设备)则返回0,否则返回一个负的错误代码。这个函数总是在上下文之间调用的,因此可以进入睡眠状态的。 remove 指向一个设备卸载函数remove( )的指针。该函数在pci设备被卸载时(如在注销设备驱动程序或者手动拔出该设备)被调用。同probe一样,该函数也是可以睡眠的。save_state 在设备被暂停前所保存的设备状态。 suspend 将设备转入低功耗状态而暂停。 sesume 将一个暂停的设备(低功耗状态中)唤醒启动。 enable_wake 允许设备产生唤醒事件以从低功耗状态中恢复。 (请参考Documentation/power/pci.txt 文件中关于pci电源管理以及相关函数的说明) ID表是一个struct pci_device_id 类型的数组,该数组以该类型中每一项都为NULL时结束。struct

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

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

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

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

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

最新开发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, // 存放返回字节数的指针

未能成功安装设备驱动程序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网络连接进行上网的工具。

操作系统安装未知设备驱动的安装方法

未知设备驱动的安装方法 (内容收集整理自网络,特此) 设备管理器中却还是有不明装置,请问要如何找到这个装置的驱动程序? 1、在设备管理器对此不明装置点鼠标右键>内容(Properties) 2、点选详细数据(Details) >硬件标识符(Hardware Ids)

3、可以看到值(Value)出现一串夹杂英文、数字的值,代表的意思如以下表格 DEV=Device装置 4、利用VEN/DEV or VID/PID后面的数值,至以下网页查询相关信息 PCI Express装置:https://www.sodocs.net/doc/5515703975.html,/ ,进入网页后可看到输入VEN/DEV的字段(该网站已经无效,请访问:http://pci-ids.ucw.cz/read/PC/) USB装置:https://www.sodocs.net/doc/5515703975.html,/usb.ids ,进入网页后,可看到文本文件,可使用使用Ctrl+F查询VID,再比对PID即可

5、以步骤3的图片(PCI Express装置)为例: l 得到的值为PCI\VEN_8086&DEV_0102&SUBSYS_844D1043&REV_09,此为PCI Express 装置,所以我们进入https://www.sodocs.net/doc/5515703975.html,/ l 在Vendor Search输入8086得到以下结果 l 点选0x8086 Intel Corporation会展开此vendor所有的Device l 此时按Ctrl+F查询DEV:0102,就可以找到此装置为Intel HD Graphics 2000,再去下载相关驱动程序来安装就可以了 6、再以步骤3的图片(USB装置)为例: l 得到的值为USB\Vid_0b05&Pid_1731&Rev_0001,此为USB装置,所以我们进入https://www.sodocs.net/doc/5515703975.html,/usb.ids l 按Ctrl+F查询VID:0b05,可得此装置为ASUSTek的装置

PCI9052驱动配置方法

安装PCI9052接口卡Windows驱动和配置EEPROM 注意的地方主要有这几个: 1.TEST引脚要下拉,这是正常操作模式。如果上拉则是进入芯片测试模式。2.PCI金手指处的PRSNT1#和PRSNT2#引脚一定至少要有一个下拉,或者两个都下拉(具体可参照PCI协议V2.3),否则找不到卡。 3.模式选择引脚MODE0和MODE1如果都下拉,是C模式,即LOCAL端的地址线和数据线是分开的;如果MODE0上拉,MODE1下拉,则是J模式,即LOCAL端的地址线和数据线复用。我采用的是C模式。 4.这是很关键的一点,即EEPROM的EEDI/EEDO引脚的配置。有这样三种情况: A 当不安装EEPROM时,该引脚一定要下拉,用1k的下拉电阻即可。此时 启动后9054会按默认的值进行配置。 B 当安装空白的EEPROM时,该引脚需要上拉。 C当安装烧录好的EEPROM时,该引脚需要上拉。 这里解释一下:卡设计好后,如果没有配置好EEPROM的值,也可以测试卡的硬件,按A或B步骤,把卡插在PC的PCI插槽上,如果硬件设计没有问题,是可以找到卡的。所以设计的时候应将此引脚设计成上下拉,根据需要装上拉或下拉电阻。这可以避免只能等配置好EEPROM的值后才能测试卡的硬件设计正确与否。 5.EEPROM的设计问题,9054是应该搭配93C56的,即2k容量的EEPROM,9052是搭配93C46这种1k的EEPROM。至于具体的厂商,可以选用ST的M93C56或者HOLTEK的HT93LC56,PLX公司的网站上有EEPROM的选型指导,可以下载来看。据我的调查,市场上很容易买到ST的这种片子,其他品牌的不是太好买。另外,如果你是有烧录机,打算将ROM烧录过后再安装在板子上,那么采用插件的芯片比较方便,如果采用贴片的,烧录机要有相应的烧录SOP-8的转接头才行。如果你是打算在线烧录,可以采用贴片的S OP-8的封装的片子,直接把空白的片子焊接在板子上即可,关于在线烧录,以下会详细解释。 配置方法 1.将接口卡插入计算机PCI插槽,启动计算机后,windows 提示找到新硬件:其他PCI 桥设备。 *注:红圈所圈名称是安装驱动并配置EEPROM后的名称,安装驱动前设备类型未知 2.安装驱动,在设备管理器中找到一个黄色问号的PCI设备,打开其属性页,如图操作:

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设备驱动程序设计 引言 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 设备驱动程序的设计

PCI设备驱动

PCI设备驱动 1.PCI设备驱动一 一、PCI简介 PCI是一种外设总线规范。我们先来看一下什么是总线:总线是一种传输信号的路径或信道。典型情况是,总线是连接于一个或多个导体的电气连线,总线上连接的所有设备可在同一时间收到所有的传输内容。总线由电气接口和编程接口组成。本文讨论Linux 下的设备驱动,所以,重点关注编程接口。 PCI是Peripheral Component Interconnect(外围设备互联)的简称,是普遍使用在桌面及更大型的计算机上的外设总线。PCI架构被设计为ISA标准的替代品,它有三个主要目标:获得在计算机和外设之间传输数据时更好的性能;尽可能的平台无关;简化往系统中添加和删除外设的工作。 二、PCI寻址 从现在开始,我想尽可能通过一些实际的例子来说明问题,而减少理论方面的问题的描述,因为,相关的理论的东西,可以在其它地方找到。 我们先来看一个例子,我的电脑装有1G的RAM,1G以后的物理内存地址空间都是外部设备IO在系统内存地址空间上的映射。/proc/iomem描述了系统中所有的设备I/O在内存地址空间上的映射。我们来看地址从1G开始的第一个设备在/proc/iomem中是如何描述的:40000000-400003ff : 0000:00:1f.1 这是一个PCI设备,40000000-400003ff是它所映射的内存地址空间,占据了内存地址空间的1024 bytes的位置,而0000:00:1f.1则是一个PCI外设的地址,它以冒号和逗号分隔为4个部分,第一个16位表示域,第二个8位表示一个总线编号,第三个5位表示一个设备号,最后是3位,表示功能号。 因为PCI规范允许单个系统拥有高达256个总线,所以总线编号是8位。但对于大型系统而言,这是不够的,所以,引入了域的概念,每个PCI域可以拥有最多256个总线,每个总线上可支持32个设备,所以设备号是5位,而每个设备上最多可有8种功能,所以功能号是3位。由此,我们可以得出上述的PCI设备的地址是0号域0号总线上的31号设备上的1号功能。那上述的这个PCI设备到底是什么呢?下面是我的电脑上的lspci命令的输出: 00:00.0 Host bridge: Intel Corporation 82845 845 (Brookdale) Chipset Host Bridge (rev 04) 00:01.0 PCI bridge: Intel Corporation 82845 845 (Brookdale) Chipset AGP Bridge(rev 04) 00:1d.0 USB Controller: Intel Corporation 82801CA/CAM USB (Hub #1) (rev 02) 00:1d.1 USB Controller: Intel Corporation 82801CA/CAM USB (Hub #2) (rev 02) 00:1e.0 PCI bridge: Intel Corporation 82801 Mobile PCI Bridge (rev 42) 00:1f.0 ISA bridge: Intel Corporation 82801CAM ISA Bridge (LPC) (rev 02) 00:1f.1 IDE interface: Intel Corporation 82801CAM IDE U100 (rev 02) 00:1f.3 SMBus: Intel Corporation 82801CA/CAM SMBus Controller (rev 02) 00:1f.5 Multimedia audio controller:Intel Corporation 82801CA/CAM AC'97 Audio Controller (rev 02) 00:1f.6 Modem: Intel Corporation 82801CA/CAM AC'97 Modem Controller (rev 02) 01:00.0 VGA compatible controller: nVidia Corporation NV17 [GeForce4 420 Go](rev a3) 02:00.0 FireWire (IEEE 1394): VIA Technologies, Inc. IEEE 1394 Host Controller(rev 46)

USB WDM 设备驱动程序

USB WDM 设备驱动程序DriverStudio 引言 随着微机技术水平的日益提高,传统的计算接口已经不能满足当前计算机高速发展的需求,计算机业界迫切需要新的通用型、高速总线接口。通用外设接口标准USB应运而生。USB,全称为通用串行总线(Universal Serial Bus),它是Compaq、IBM等PC大厂商联合开发的一种新型的、基于令牌的、高速的串行总线标准。开发者要设计USB设备接口,就必须首先了解USB协议,在此基础上有针对性的开发USB设备驱动程序。 USB简介 在众多的PC机总线中,USB以其突出的优点独树一帜:①使用方便。支持热拔插,不涉及中断请求(IRQ)冲突等问题,能真正做到“即插即用”。②传输速率高。目前的USB 2.0协议速度高达480Mbps 。③易于扩展。通过使用Hub扩展可连接多达127个外设。④使用灵活。USB共有4种传输模式:控制(control)、同步(Synchronization)、中断(interrupt)、批量(bulk),以适应不同设备的需要。⑤独立供电。正由于上述优点,开发USB接口的设备已成为一种发展趋势。 一个完整的USB系统包括主机系统和USB设备。所有的传输事务都是由主机发起的。一个主机系统又可以分为以下几个层次结构,如图1所示:

图1 USB 互连通信模型 USB总线接口包括USB主控制器和根集线器,其中USB主控制器负责处理主机与设备之间电气和协议层的互连,根集线器提供USB设备连接点。USB系统使用USB主控制器来管理主机和USB设备之间的数据传输,另外它也负责管理USB资源,如带宽等。应用软件不能直接访问USB设备硬件,而通过USB系统和USB总线接口与USB设备进行交互。 USB设备包含一些向主机软件提供一系列USB设备的特征和能力的信息的设备描述符,用来配置设备和定位USB设备驱动程序。这些信息确保了主机以正确的方式访问设备。通常,一个设备有一个或多个配置(Configuration)来控制其行为。配置是接口(Interface)的集合,接口指出软件应该如何访问硬件。接口又是端点(endpoint)的集合,每一个与USB交换数据的硬件就为端点,它是作为通信管道的一个终点。图1显示了一个多层次结构的通信模型,它表明了端点和管道所扮演的角色。 WDM驱动程序和USB驱动程序的分层结构 设备驱动程序实际上是指一系列控制硬件设备的函数,是操作系统中控制和连接硬件的关键模块。它提供连接到计算机的硬件设备的软件接口。

软件、驱动安装方法.

2.1 Quartus II 软件的安装 TD-EDA 实验系统使用Quartus II 集成开发环境Quartus II 4.2 版本,为了使Quartus II 软件 的性能达到最佳,建议计算机的最低配置如下: (1) 奔腾II 400MHz、512MB 以上系统内存; (2) 大于1G 的安装Quartus II 软件所需的最小硬盘空间; (3) Microsoft Windows NT4.0(Service Pack 4 以上)、Windows2000 或Windows XP 操作系统。 注意:Quartus II 软件不支持Windows98 操作系统。 (4) 用于ByteBlaster II 或ByteBlaster MV 下载电缆的并行口(LPT 口); (5) Microsoft IE5.0 以上浏览器; (6) TCP/IP 网络协议; (7) 网卡一块。 注意:Quartus II 软件必须在安装有网卡的PC 上使用。 用户在确保计算机满足上述配置后就可以安装Quartus II 软件,下面简单介绍Quartus II 4.2 版软件的安装过程: 1. 将Quartus II 设计软件的光盘放入计算机的光驱,从资源管理器进入光盘驱动器,双击Quartus II 目录下的install.exe 文件,出现如图2-1-1 所示的Quartus II 安装界面。 图2-1-1 Quartus II 安装界面 2. 点击”Install Quartus II and Related Software”按钮进入如图2-1-2 所示的安装Quartus II 软

PCI驱动编程基本框架

Linux将所有外部设备看成是一类特殊文件,称之为“设备文件”,如果说系统调用是Linux 内核和应用程序之间的接口,那么设备驱动程序则可以看成是Linux内核与外部设备之间的接口。设备驱动程序向应用程序屏蔽了硬件在实现上的细节,使得应用程序可以像操作普通文件一样来操作外部设备。 1. 字符设备和块设备 Linux抽象了对硬件的处理,所有的硬件设备都可以像普通文件一样来看待:它们可以使用和操作文件相同的、标准的系统调用接口来完成打开、关闭、读写和I/O控制操作,而驱动程序的主要任务也就是要实现这些系统调用函数。Linux系统中的所有硬件设备都使用一个特殊的设备文件来表示,例如,系统中的第一个IDE硬盘使用/dev/hda表示。每个设备文件对应有两个设备号:一个是主设备号,标识该设备的种类,也标识了该设备所使用的驱动程序;另一个是次设备号,标识使用同一设备驱动程序的不同硬件设备。设备文件的主设备号必须与设备驱动程序在登录该设备时申请的主设备号一致,否则用户进程将无法访问到设备驱动程序。 在Linux操作系统下有两类主要的设备文件:一类是字符设备,另一类则是块设备。字符设备是以字节为单位逐个进行I/O操作的设备,在对字符设备发出读写请求时,实际的硬件I/O紧接着就发生了,一般来说字符设备中的缓存是可有可无的,而且也不支持随机访问。块设备则是利用一块系统内存作为缓冲区,当用户进程对设备进行读写请求时,驱动程序先查看缓冲区中的内容,如果缓冲区中的数据能满足用户的要求就返回相应的数据,否则就调用相应的请求函数来进行实际的I/O操作。块设备主要是针对磁盘等慢速设备设计的,其目的是避免耗费过多的CPU时间来等待操作的完成。一般说来,PCI卡通常都属于字符设备。 2. 设备驱动程序接口 Linux中的I/O子系统向内核中的其他部分提供了一个统一的标准设备接口,这是通过include/linux/fs.h中的数据结构file_operations来完成的: struct file_operations { struct module *owner; loff_t (*llseek) (struct file *, loff_t, int); ssize_t (*read) (struct file *, char __user *, size_t, loff_t *); ssize_t (*write) (struct file *, const char __user *, size_t, loff_t *);

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上的串口和并口。

设备驱动程序到底是啥-起啥作用-如何安装-如何检查设备的驱动程序安装正常

设备驱动程序到底是啥,起啥作用,如何安装,如何检查设备的驱动程序安装正常? “Device Driver”,全称为“设备驱动程序”是一种可以使计算机英文名为和设备通信的特殊程驱动是让电脑硬件工作的软件,来自英文driver。序从设备管理器里自己指定安装 如果驱动程序文件里没有Autorun自启动也没有有“Setup.exe”安装可执行文件怎么办?这时我们就要自己指定驱动程序文件,手动安装了。 我们可以从设备管理器中来自己指定驱动程序的位置,然后进行安装。当然这个方法要事先准备好所要安装的驱动程序,该方法还适用于更新新版本的驱动程序。 首先从控制面板进入“系统属性”,然后依次点击“硬件”——“设备管理器”。 如图,网卡是没有安装驱动程序的设备,其前面会有感叹号“!”标示。. 右键点击该设备,然后选择“更新驱动程序”。

接着就会弹出一个“硬件更新向导”,我们既然知道了它是属于什么型号的设备,而且还有它的驱动程序,选择“从列表或指定位置安装”。. 如果驱动程序在光盘或软盘里,在接着在弹出的窗口里把“搜索可移动媒体”勾上就行,如果在硬盘里,则把“在搜索中包括这个位置”前面的复选框勾上,然后点“浏览”。接着找到咱们准备好的驱动程序文件夹,要注意的是很多硬件厂商会把其生产的很多类型的硬件设备驱动都压制在一张盘中,而且还会有不同的操作系统版本,如For Win2K(Win2000)和For WinXP的,要注意选择正确的设备和操作系统版本。点“确定”之后,点击“下一步”就行了。

而且还会有不同的操有时候里面会有多个设备,接着就找到咱们准备好的驱动程序文件夹,的,注意选择正确的设备和操作系统)和For WinXPWin2000For Win2K作系统版本,如(版本。点“确定”之后,点击“下一步”就行了。 Windows 95/98/Me——要查看1401 PCI接口设置,选择开始-设置-控制面 板-系统,打开一个有四个选项卡的窗口;选中设备管理器。在已安装设备树上可以看到1401接口图标。1401节点上加框的号表示存在一个设备:点击 这个符号显示CED 1401接口。 Windows NT 2000/XP——选择开始-设置-控制面板,点击系统图标,可以 查看1401 PCI接口设置。选中硬件选项卡,点击设备管理器按钮,显示硬件设备树。1401接口图标会出现在一个节点上,旁边有一个加框的号,表示这 里存在一个设备。点击这里显示CED 1401 接口图标。

PCI设备的WDM驱动程序设计-9052

PCI设备的WDM驱动程序设计 柳泉罗耀华柳华伟 摘要:本文详细地讨论了利用DDK开发PCI设备的WDM驱动程序的设计原理、方法及在设计中注意事项,实现了以芯片PCI9052开发的PCI卡的具有内存和I/O读写及中断处理的WDM驱动程序。 关键字:PCI,WDM,驱动程序,DDK 在Windows操作系统中,为了保证系统的安全性和可移植性,对应用程序对硬件的操作进行了限制,尤其Windows 2000和Windows XP,不支持直接对系统的硬件资源的操作。因而在设计开发PCI设备时,需要开发相应的驱动程序来实现对PCI设备的操作,用户应用程序通过驱动程序来访问PCI设备。 由于计算机硬件设备都存在不同的特点,因此各种设备的驱动程序也都有自己的特点,比如PCI设备、USB设备等等。尽管在整体框架中基本相同,但设备功能上不同,因此本文以PCI桥芯片PCI9052开发的PCI卡为硬件设备,来探讨PCI设备的驱动程序的开发。 1.驱动程序类型和开发工具的选择 在WINDOWS操作系统下,支持PCI总线及其设备的驱动程序类型有支持Windows 98/95的VxD、支持Windows NT的NT式驱动程序和支持Windows 2000、Windows XP 和Windows 98的WDM(Windows Driver Model)。前两种驱动程序类型由于其支持的操作系统的逐渐淘汰而淘汰。现在主流的操作系统是Windows 2000和Windows XP,因此开发PCI设备的驱动程序最好的方案是WDM驱动程序。在一个系统中开发出WDM 驱动程序,稍加修改即可在其他系统中编译运行。 WDM是在Windows NT驱动程序体系的基础上发展而来的,修改或增加了即插即用、电源管理等功能,使之适应硬件和用户的要求。 开发WDM驱动程序的主要工具是微软为各操作系统提供的开发软件包Device Driver Kits(DDK) ,该软件包为驱动程序开发者提供了用于驱动程序开发的资源文件、编译连接程序、开发技术文档等。还有第三方提供的开发工具:NuMega公司的DriverStudio和Jungo公司的WinDriver,这些工具是在DDK的基础上为方便开发用户而进行开发的工具。在使用中,虽然利用DDK开发驱动程序难度较大,但是代码非常简洁,结构清晰,效率也高。利用第三方开发工具使用简单,开发速度较快,但对于驱动程序的理解和深入开发不如DDK。因此选择DDK开发PCI设备驱动程序,虽然开始会觉得非常复杂,但从执行效率和功能上会更有利。 2.PCI设备驱动程序的特点 在开发驱动程序之前对PCI总线和硬件设备进行了解是十分必要的,而且还要详细地掌握PCI设备的特性以及PCI设备驱动程序在设备程序栈的关系等,以便进行WDM 驱动程序的设计。

如何写驱动程序

我这里重点的介绍如何写驱动程序,对于一些应用程序我就不做介绍了,因为我对于那些高层的东西写得很少。倘若再讲,有班门弄斧之嫌,呵呵! 作为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操作,处理中断和执行特定的设备要求的任何差错处理。

相关主题