(完整版)以太网Phy的驱动概念

(完整版)以太网Phy的驱动概念
(完整版)以太网Phy的驱动概念

我想很多人都考虑过,当同一块板卡上的两块网口PHY芯片对连的时候,能不能省略两个网络变压器而直接对连呢,答案当然是肯定的。

不过我实际操作过后,发现里面还是有很多陷阱,现在给大家一一道来。

首先我们必须知道一件事情,网口PHY芯片对于TX与RX的驱动方式有电压驱动和电流驱动之分。最简单的一个识别方式就是看其推荐原理图,如果网络变压器的中心抽头需要提供一个VCC(3.3V、2.5V等等,下同)电源的就是电压驱动,如果是直接加一个对地电容就可以的就是电流驱动。

现在我们来精简电路。(由于两块PHY芯片靠的很近,故在此不考虑阻抗匹配的问题,如果情况不同,请自行考虑,下同)

最原始的情形就是使用两个网络变压器,然后TX与TX交叉连接,也就是正常的连接方式。

再精简成最实用的情况,如上图所示,使用电容隔离,加入偏置电流。

其中连接千兆PHY时,电容取值0.01uF,百兆PHY时,电容取值0.1uF,网上有一个图使用的是10uF的电容,我觉得太大了。

其中电阻我实测时使用的是49.9ohm,取值的原则应该是考虑其驱动能力以及阻抗匹配的要求。(我认为此处应该使用电感更为合理,但是我没有合适的,所以没有测过,我实测了一个60ohm 500mA的磁珠,不通,示波器观察波形发现信号幅度过小,网上有一个图使用

的是30ohm的电阻,我觉得还是49.9ohm更为合理,有兴趣的朋友可以试试不同的方案)

有人可能会问,能再精简一下么?

我的答案是看情况。

1、如果你使用的PHY芯片的中心抽头电压VCC一致的话(对于电压驱动型PHY),可以省略电容,TX与RX直连即可,电阻也可以节省一半。

特别注意:万一VCC电压不一致的话,连接失败事小,烧芯片事大,所以注意确认。

2、如果你使用的是电流驱动型PHY的话,连接到中心抽头的电阻也可省略,因为本来就不需要嘛,呵呵。

最后总结一下:如果你使用的是电流驱动型PHY,TX与RX交叉连接即可,如果你使用的是电压驱动型PHY,必须给TX与RX提供一个偏置电压,如果两块PHY芯片的偏置电压不一致,中间需用电容隔开

监控软件设备驱动程序的编程与实现

监控软件设备驱动程序的编程与实现 0 前言 在专业监控软件出现以前,自动控制系统集成人员的一个重要任务就是编写专门的系统上位监控程序。但是,在实际工程中我们发现:一方面,由于各编程人员的水平参差不齐,许多软件的功能和可靠性都存在问题;另一方面,由于每个编程人员的编程习惯和编程思路都不同,程序的可读性和功能的扩展性都比较差。因此,功能强大、实用面广的专业监控软件就应运而生。如MCGS监控软件、组态王控软件等。由于现场智能仪表、采集板的多种多样,监控软件自带的设备驱动程序毕竟有限,因此编制设备驱动程序就成了自控系统集成工程师的重要工作之一。 本文以北京昆仑通态公司开发的MCGS为例来说明监控软件设备驱动程序的一般思路。MCGS是基于Windows95和WindowsNT平台,为用户提供了从数据采集到数据处理、报警处理、流程控制、动画显示、报表输出等解决实际工程问题的完整方案和操作工具。MCGS允许用户在VisualBasic中操作MCGS中的对象,提供了一套开放的可扩充接口,用户可根据自己的需要用VB编制特定的功能构件来扩充系统的功能。 1接口原理 许多组态软件提供了设备驱动程序软件开发包,支持用户用VB、VC、Delphi等高级编程语言编制设备驱动程序。MCGS组态软件驱动程序编程原理框图如图1所示: 几乎所有的PLC、智能仪表、采集板卡都提供了驱动软件,有的在说明书中还提供了驱动软件的核心代码、函数或数据结构。而监控软件也提供了开放性的可扩充接口,一般包括属性函数、方法函数、IO端口操作函数和串口操作函数等。在运行模式下,监控软件定时或在事件激发时调用设备驱动程序,而设备驱动程序根据需要,再调用设备核心函数。例如,MCGS在组态模式下按在线帮助按钮就会调用GetDevHelp接口,显示设备构件的在线帮助;按内部属性按钮时就会调用SetDevPage接口,显示设备构件的特定属性页。在运行环境下,MCGS首先调用一次InitDevRun接口对设备进行一些必须的初始化工作。

设备驱动程序

驱动程序 驱动程序一般指的是设备驱动程序(Device Driver),是一种可以使计算机和设备通信的特殊程序。相当于硬件的接口,操作系统只有通过这个接口,才能控制硬件设备的工作,假如某设备的驱动程序未能正确安装,便不能正常工作。 因此,驱动程序被比作“硬件的灵魂”、“硬件的主宰”、和“硬件和系统之间的桥梁”等。 中文名 驱动程序 外文名 Device Driver 全称 设备驱动程序 性质 可使计算机和设备通信的特殊程序 目录 1定义 2作用 3界定 ?正式版 ?认证版 ?第三方 ?修改版 ?测试版 4驱动程序的开发 ?微软平台 ?Unix平台 5安装顺序 6inf文件 1定义 驱动程序(Device Driver)全称为“设备驱动程序”,是一种可以使计算机和设备通信的特殊程序,可以说相当于硬件的接口,操作系统只能通过这个接口,才能控制硬件设备的工作,假如某设备的驱动程序未能正确安装,便不能正常工作。 惠普显卡驱动安装 正因为这个原因,驱动程序在系统中的所占的地位十分重要,一般当操作系统安装完毕后,首要的便是安装硬件设备的驱动程序。不过,大多数情况下,我们并不需要安装所有硬件设备的驱动程序,例如硬盘、显示器、光驱等就不需要安装驱动程序,而显卡、声卡、扫描仪、摄像头、Modem等就需要安装驱动程序。另外,不同版本的操作系统对硬件设

备的支持也是不同的,一般情况下版本越高所支持的硬件设备也越多,例如笔者使用了Windows XP,装好系统后一个驱动程序也不用安装。 设备驱动程序用来将硬件本身的功能告诉操作系统,完成硬件设备电子信号与操作系统及软件的高级编程语言之间的互相翻译。当操作系统需要使用某个硬件时,比如:让声卡播放音乐,它会先发送相应指令到声卡驱动程序,声卡驱动程序接收到后,马上将其翻译成声卡才能听懂的电子信号命令,从而让声卡播放音乐。 所以简单的说,驱动程序提供了硬件到操作系统的一个接口以及协调二者之间的关系,而因为驱动程序有如此重要的作用,所以人们都称“驱动程序是硬件的灵魂”、“硬件的主宰”,同时驱动程序也被形象的称为“硬件和系统之间的桥梁”。 戴尔电脑驱动盘 驱动程序即添加到操作系统中的一小块代码,其中包含有关硬件设备的信息。有了此信息,计算机就可以与设备进行通信。驱动程序是硬件厂商根据操作系统编写的配置文件,可以说没有驱动程序,计算机中的硬件就无法工作。操作系统不同,硬件的驱动程序也不同,各个硬件厂商为了保证硬件的兼容性及增强硬件的功能会不断地升级驱动程序。如:Nvidia显卡芯片公司平均每个月会升级显卡驱动程序2-3次。驱动程序是硬件的一部分,当你安装新硬件时,驱动程序是一项不可或缺的重要元件。凡是安装一个原本不属于你电脑中的硬件设备时,系统就会要求你安装驱动程序,将新的硬件与电脑系统连接起来。驱动程序扮演沟通的角色,把硬件的功能告诉电脑系统,并且也将系统的指令传达给硬件,让它开始工作。 当你在安装新硬件时总会被要求放入“这种硬件的驱动程序”,很多人这时就开始头痛。不是找不到驱动程序的盘片,就是找不到文件的位置,或是根本不知道什么是驱动程序。比如安装打印机这类的硬件外设,并不是把连接线接上就算完成,如果你这时候开始使用,系统会告诉你,找不到驱动程序。怎么办呢参照说明书也未必就能顺利安装。其实在安装方面还是有一定的惯例与通则可寻的,这些都可以帮你做到无障碍安装。 在Windows系统中,需要安装主板、光驱、显卡、声卡等一套完整的驱动程序。如果你需要外接别的硬件设备,则还要安装相应的驱动程序,如:外接游戏硬件要安装手柄、方向盘、摇杆、跳舞毯等的驱动程序,外接打印机要安装打印机驱动程序,上网或接入局域网要安装网卡、Modem甚至ISDN、ADSL的驱动程序。说了这么多的驱动程序,你是否有一点头痛了。下面就介绍Windows系统中各种的不同硬件设备的驱动程序,希望能让你拨云见日。 在Windows 9x下,驱动程序按照其提供的硬件支持可以分为:声卡驱动程序、显卡驱动程序、鼠标驱动程序、主板驱动程序、网络设备驱动程序、打印机驱动程序、扫描仪驱动程序等等。为什么没有CPU、内存驱动程序呢因为CPU和内存无需驱动程序便可使用,不仅如此,绝大多数键盘、鼠标、硬盘、软驱、显示器和主板上的标准设备都可以用Windows 自带的标准驱动程序来驱动,当然其它特定功能除外。如果你需要在Windows系统中的DOS 模式下使用光驱,那么还需要在DOS模式下安装光驱驱动程序。多数显卡、声卡、网卡等内置扩展卡和打印机、扫描仪、外置Modem等外设都需要安装与设备型号相符的驱动程序,否则无法发挥其部分或全部功能。驱动程序一般可通过三种途径得到,一是购买的硬件附

触摸屏接口硬件编写驱动程序

尽管触摸屏正在迅速普及开来,但大多数开发人员以前从来没有开发过触摸屏产品。本文详细介绍了触摸屏产品的设计步骤,指导读者了解使触摸屏首次工作需要的软硬件细节。 触摸屏如今随处可见。工业控制系统、消费电子产品,甚至医疗设备上很多都装备了触摸屏输入装置。我们平时不经意间都会用到触摸屏。在ATM机上取款、签署包裹,办理登机手续或查找电话号码时都可能会用到触摸屏。 本文介绍了二种较新的CPU,它们都内建了对触摸屏输入的支持。本文将介绍如何编写软件驱动程序,从而能够使用这些微处理器配置、校准触摸屏以及对触摸屏输入持续响应。最终将提供可免费下载和使用的工作代码,作为读者进一步设计的基础。 触摸屏作为输入手段的优点和缺点 没有一种输入方式是十全十美的,对某些特定的应用和产品类型来说,触摸屏不是最好的输入手段。为了让读者清楚的了解触摸屏的特性,下面先概括使用触摸屏作为输入手段的优点和缺点。 首先是优点:触摸屏不可否认的具有酷的感觉,立刻就能使产品的使用变得更有乐趣。同时触摸屏也非常直观。当用户想要选择A选项时,他伸出手指碰一下A 选项就可以了。这还不够直观吗?连两岁的婴儿都知道怎样伸手去触摸他(或她)想要的东西。 最后要说的是,触摸屏作为输入装置和系统固定在了一起。如果用户忘记遥控器或鼠标放的位置,就会无法进行输入。而如果具有触摸屏的设备放在用户前面,用户马上就可以用触摸屏进行输入。 再说缺点,触摸屏可能会在不合适的场合下被错误的使用。这里我是指对安全性要求严格的设备,对于这些设备,如果没有适当的预防措施,使用触摸屏会非常危险。下面我将概括一些最明显的潜在的问题,如果读者想作更进一步的了解,可以参考更多的资料。 第一个问题是视差,即屏幕上看到的对象的位置与其在触摸面板上的实际有效位置之间的差异。图1说明了这个问题。我能想到的最佳例子是典型的“免下 车”ATM机。这种ATM机不会根据汽车的高度升高或降低自己的高度,因此如果你坐在较高的SUV或卡车里,那么你就会从抬高的位置俯视显示屏。为了保护昂贵的显示器件免受恶意破坏,ATM机都会在用户和显示屏之间放置几层强化玻璃。 触摸屏是不能这样保护的。如果真这样做的话,用户就无法进行触摸了。因此触摸屏放在表层上,而显示屏放在表层下的几层玻璃后面。这就造成了触摸层和显示层之间的物理隔离。如果用户以某个角度观看屏幕,就意味着用户按压触摸屏进行选择的位置会与用户接口软件预期的输入位置之间存在一定的距离偏差。

驱动程序的接口设计

驱动程序的接口设计 WinCE下的驱动皆以动态链接库的形式存在。驱动实现中可以调用所有的标准API。WinCE的两种驱动模型——本机驱动模型和流接口驱动模型——其中本机驱动模型用于低级、内置设备,实现一组特定的接口函数;而流接口驱动模型是基本的驱动类型,提供一组通用设备接口,适用于多种设备。本设计采用的ADC驱动为数据采集驱动,是整个数据采集系统的核心。首先介绍几个流接口驱动的接口函数: (1)ADC_Init: 函数原型:DWORD ADC_Init(LPCTSTR Identifier) 功能描述:软件资源初始化,硬件地址空间映射,硬件初始化,中断注册。 参数描述:Identifier为字符串指针,指向本驱动在注册表标识符路径键值。 实现要点:本函数的关键部分在于对硬件地址空间的映射,通Virtualalloc,Viirtualcopy将I/O寄存器、中断寄存器、PWM寄存器和存储器地址空间映射到系统内存空中去;此外还要对硬件进行系统启动后的第一次初始化,包括中断硬件初始化和注册、fifo的清零和采集的禁止等。注意为保证系统的稳定和低功耗,在本函数运行后,数据采集器处于禁止中断和电源关闭状态。 具体使用:ADC_Init会把设备内容指针传递给ADC_Open。 (2)ADC_Deinit: 函数原型:BOOL ADC_Deinit(PADC_Info pContext) 功能描述:软件资源释放,硬件反初始化,中断屏蔽。 参数描述:pContext是驱动软件结构体指针。 实现要点:本函数为ADC_Init的逆向操作。 具体使用:释放了ADC_Init中分配的资源。 (3)ADC_Open: 函数原型:DWORD ADC_Open(DWORD pContext,DWORD AccessCode,DWORD ShareMode) 功能描述:打开设备,AD上电,禁止中断,禁止触发,清除FIFO,数据缓冲区初始化。 参数描述:pContext是驱动软件结构体指针;AccessCode为读写访问权限。 制模式码:ShareMode为共享访问权限控制模式码。 应用接口:CreateFile 实现要点:本函数主要功能是开启设备电源,并确保其初始化状态可靠,因此其中部分操作与系统初始化阶段类似。注意在本操作结束后,采集器仍处于禁

嵌入式系统接口设计与Linux驱动程序开发

嵌入式系统接口设计和Linux驱动程序开发 书名:嵌入式系统接口设计和Linux驱动程序开发 作者:刘淼 出版社:北京航天航空大学出版社 ISBN:9787810778619 定价:39.00 元 出版日 2006-5-1 期: 编辑推荐 Linux是源码开放的操作系统,它发展迅速,爱好者众多,同时也是主流的嵌入式操作系统之一。以ARM 为核心的处理器使用广泛,成本低廉,软件支持好,也是当今市场占有率最高的32位嵌入式处理器。本书Linux和ARM处理器平台为例,结合两大主流软件和硬件,讲述嵌入系统开发的相关知识,是对深入学习嵌入式系统很有借鉴意义的书。 内容简介 本书针对ARM处理器为核心的主流嵌入式系统平台,主要讲述嵌入式Linux驱动程序的设计和开发过程。内容同时涵盖嵌入式系统的软硬件两个方面:一方面是嵌入式系统常用的硬件接口时序、电气特性等内容的分析;另一方面讲述对应硬件的Linux驱动程序实现方法。本书共分为16章。第1、2章介绍嵌入式系统和Linux驱动程序的基础性知识。从第3章开始,详细讲述硬件平台及其对应的Linux驱动程序。硬件包括I/O口、CAN总线、触摸屏、I2CPS/2、异步串口、音频、显示、IDE、PCMCIA、USB、以太网以及Flash 的使用等内容。软件涉及针对上述硬件的各种驱动程序在Linux下的体系结构,Linux的字符设备、块设备和网络设备驱动程序,ARM Linux的中断处理,BootLoader和内核的启动过程等。 本书可作为机器人技术、机电控制系统、信息家电、工业控制、手持设备、智能玩具、医疗仪器等方面嵌入式系统开发和使用的参考书,也可作为高等院校有关嵌入式系统教学的本科生或研究生的教材。 作者简介 刘焱,吉林省吉林市人。2000年开始从事嵌入式系统方面的研发工作,参加过多项国家863、自然基金研究项目,熟练掌握ARM等RISC微处理器系统的硬件设计及LinuxWinCEVxWorks等操作系统的软件设计.尤其擅长硬件接口和驱动程序等系统底层架构设计。先后主持过基于S3C4480、S3C2410、PXA270等多款嵌入式教学实验平台及基于HMS30C7202.AT91 RM9200的工业测控系统的开发工作,作为主要研究人员完成的嵌入式数控系统已在企业成功使用。曾担任过清华大学软件学院、北京航空航天大学软件学院嵌入式系统课程的实验教学工作及南开大学软件学院的嵌入式系统专业课程教学工作。现任中国电子学会嵌入式系统培训中心ESTC认证讲师。 目录 第1章典型的嵌入式系统体系结构 1.1嵌入式系统概述1 1.2嵌入式系统的组成1 1.2.1嵌入式平台的硬件架构2 1.2.2板级支持包和嵌入式系统2 1.2.3嵌入式系统上的使用程序3 1.3嵌入式系统的开发流程和优势3 1.4嵌入式系统的方案选择5

Windows驱动开发入门

接触windows驱动开发有一个月了,感觉Windows驱动编程并不像传说中的那么神秘。为了更好地为以后的学习打下基础,记录下来这些学习心得,也为像跟我一样致力于驱动开发却苦于没有门路的菜鸟朋友们抛个砖,引个玉。 我的开发环境:Windows xp 主机+ VMW ARE虚拟机(windows 2003 server系统)。编译环境:WinDDK6001.18002。代码编辑工具:SourceInsight。IDE:VS2005/VC6.0。调试工具:WinDBG,DbgView.exe, SRVINSTW.EXE 上面所有工具均来自互联网。 对于初学者,DbgView.exe和SRVINSTW.EXE是非常简单有用的两个工具,一定要装上。前者用于查看日志信息,后者用于加载驱动。 下面从最简单的helloworld说起吧。Follow me。 驱动程序的入口函数叫做DriverEntry(PDRIVER_OBJECT pDriverObj,PUNICODE_STRING pRegisgryString)。两个参数,一个是驱动对象,代表该驱动程序;另一个跟注册表相关,是驱动程序在注册表中的服务名,暂时不用管它。DriverEntry 类似于C语言中的main函数。它跟main的差别就是,main完全按照顺序调用的方法执行,所有东西都按照程序员预先设定的顺序依次发生;而DriverEntry则有它自己的规则,程序员只需要填写各个子例程,至于何时调用,谁先调,由操作系统决定。我想这主要是因为驱动偏底层,而底层与硬件打交道,硬件很多都是通过中断来与操作系统通信,中断的话就比较随机了。但到了上层应用程序,我们是看不到中断的影子的。说到中断,驱动程序中可以人为添加软中断,__asm int 3或者Int_3();前者是32位操作系统用的,后者是64位用的。64位驱动不允许内嵌汇编。下面是我的一个helloworld的源码:

实时数据库与驱动程序开发接口-解析

实时数据库与驱动程序开发接口 V1.0 2006/12/29发布 1引言 根据整个组态的结构描述,在驱动程序与实时数据库之间交换的内容包括采集的实时数据及由实时数据库向驱动发送的控制命令串,驱动程序要求实时数据库或其他驱动支持的功能。 2实现方式 具体的实现方式是能过共享内存的方式进行数据传送。系统驱动所使用的共享内存全部编号使用,编号从0开始顺序递增,不同的驱动使用不同的共享内存编号,一般一个驱动使用一个共享内存,特殊情况下一个驱动可以使用一个以上的共享内存号。系统提供若干函数对共享内存的创建及使用进行支持。并且提供完整的温巡驱动程序,使用纯C语言编写。二次开发人员可以阅读,参照完成其他驱动的编写工作。另外对每一个驱动的开发需要在drive目录下建立一个单独的文件存储驱动的应用程序与设置文件.以omron为例,需在drive下建立omron 目录.对每一个驱动程序写一个readme.txt文件和一个config.txt文件来描述开发的目的及驱动的用法及驱动程序的参数设置. 系统占用的共享享内存编号有如下几个, 其他程序请不要占用. 100 声音驱动使用 102 短信程序使用 103 电话语音报警使用 80web驱动使用 3驱动程序编写说明

3.1 数据区 驱动程序采集的量一般分为两种形式一种是实时数据量如遥信,遥测与遥脉等. 另一种类型是结构量,如SOE, 保护动作记录等。 实时数据量采用0 - 1999进行编号, 驱动程序开发人员可自行安排其中的某一段为遥信,遥测或遥脉, 例如0 - 100 为遥信, 101-200 为遥脉, 201 - 300 为遥测.对于遥信多的,将更多的编号分配给遥信,对于遥测多的将更多的编号分配给遥测。采集上来的量在组态的参数配置中按驱动编写的情况进行配置. 3.2 上传结构变量 结构型变量采用如下方法进行传送,系统提供若干个结构串位置,当将指定形式的若干个结构串放入结构串中时,同时将串个数告诉实时数据库。则实时数据库程序读入所有的串,并根据指定的格式进行存盘操作或命令操作。结构串的格式一般为一个特征码附加若干有效字串参数。 3.3 命令区 驱动程序从实时数据库中接收的内容一般是命令串,命令串中包括命令特征码及命令附带的数据,当收到退出命令时驱动程序应自动安全地退出. 退出命令是命令字符串"EXIT"。 3.4 下行结构变量 下传结构变量一般是由实时数据库传送到驱动程序的下行结构变量。接收下行结构变量的程序一般有声音报警,电话报警,及调度程序等。 4类接口说明 4.1 支持函数文件列表 1)ramdrive.h 2)ramdrive.c 4.2 使用步骤 1)使用方法bool CreateRam( int ramid ); 完成共享内存的建立,参数为数据共享区的编号. 2)设置实时数据 void SetValue( int id, int iValue ) id 编号iValue 实时值

Windows驱动程序开发环境配置

Windows驱动程序开发笔记 一、WDK与DDK环境 最新版的WDK 微软已经不提供下载了这里:https://https://www.360docs.net/doc/f41560579.html,/ 可以下并且这里有好多好东东! 不要走进一个误区:下最新版的就好,虽然最新版是Windows Driver Kit (WDK) 7_0_0,支持windows7,vista 2003 xp等但是它的意思是指在windows7操作系统下安装能编写针对windows xp vista的驱动程序, 但是不能在xp 2003环境下安装Windows Driver Kit (WDK) 7_0_0这个高版本,否则你在build的时候会有好多好多的问题. 上文build指:首先安装好WDK/DDK,然后进入"开始"->"所有程序"->"Windows Driver Kits"->"WDK XXXX.XXXX.X" ->"Windows XP"->"x86 Checked Build Environment"在弹出来的命令行窗口中输入"Build",让它自动生成所需要的库 如果你是要给xp下的开发环境还是老老实实的找针对xp的老版DDK吧,并且xp无WDK 版只有DDK版build自己的demo 有个常见问题: 'jvc' 不是内部或外部命令,也不是可运行的程序。 解决办法:去掉build路径中的空格。 二、下载 WDK 开发包的步骤 1、访问Microsoft Connect Web site站点 2、使用微软 Passport 账户登录站点 3、登录进入之后,点击站点目录链接 4、在左侧的类别列表中选择开发人员工具,在右侧打开的类别:开发人员工具目录中找到Windows Driver Kit (WDK) and Windows Driver Framework (WDF)并添加到您的控制面板中 5、添加该项完毕后,选择您的控制面板,就可以看到新添加进来的项了。 6、点击Windows Driver Kit (WDK) and Windows Driver Framework (WDF),看到下面有下载链接,OK,下载开始。下载后的文件名为: 6.1.6001.18002.081017-1400_wdksp-WDK18002SP_EN_DVD.iso将近600M大小。

WINDOWS驱动编程

WDM驱动程序开发之读写设备寄存器:KIoRange类 2009-11-09 14:05 WDM驱动程序开发之读写设备寄存器:KIoRange类收藏 KIoRange类: 一、Overview KIoRange类将一系列特殊的外围总线的地址映射到CPU总线的地址空间。CPU总线上的地址即可能在CPU的I/O空间,也可能在CPU的内存空间,这取决于平台和外围总线的控制方式。考虑到可移植性,所有对I/O周期(I/O cycle)进行译码的设备驱动程序必须用这个类对I/O的位置(location)进行正确的访问(access)。KIoRange是KPeripheralAddress类的派生类。 一旦映射关系建立起来,驱动程序就用KIoRange类的成员函数去控制设备的I/O寄存器。这个类提供了8位、16位和32位I/O访问控制的函数。这些函数是以内联(in-line)函数方式来使用的,它们调用系统内相应的宏来产生依赖于平台的代码。 对I/O位置(location)进行访问的另一种备选方案是创建一个KIoRegister 的实例。这要通过取得一个KIoRange对象的数组元素来实现。 为了访问一系列外围总线内存空间的地址,需要用KMemoryRange类。 二、Member Functions 1、KIoRange - Constructor (4 forms) 构造函数 【函数原型】 FORM 1: KIoRange( void ); FORM 2: (NTDDK Only) KIoRange( INTERFACE_TYPE IntfType, ULONG BusNumber , ULONGLONG BaseBusAddress, ULONG Count, BOOLEAN MapToSystemVirtual =TRUE ); FORM 3 (WDM): KIoRange( ULONGLONG CpuPhysicalAddress, BOOLEAN InCpuIoSpace, ULONG Count, BOOLEAN MapToSystemVirtual =TRUE

基于ARM的通用IO接口驱动程序设计

西安文理学院机械电子工程系 课程设计任务书 学生姓名张聪聪专业班级 09级自动化(1)班学号08013090122 指导教师雷俊红职称讲师教研室自动化 课程自动化专业课程设计 题目 基于ARM的通用I/O接口驱动程序设计 任务与要求 利用ARM实验箱上的资源设计一个LED灯驱动。 设计要求: 1)搭建交叉编译环境 2)通过NFS网络文件系统建立共享目录 3)LED按照1S的时间间隔亮灭,实现闪烁的效果 开始日期 2011.12.05 完成日期 2011.12.14 2011年 12 月 5 日

基于ARM的通用I/O接口驱动程序设计 摘要: 目前,基于ARM技术的嵌入式系统几乎已经深入应用到各个领域,是当今32位嵌入式系统应用的主流。ARM在工业控制领域的应用也受到越来越多的关注。随着嵌入式在生活中的应用越来越广泛,可广泛应用于移动设备、网络设备、工控设备、仪器仪表等。Linux 系统本身就是一个优秀的操作系统,再加上他的源代码是开放的,所以就把它作为嵌入式开发的核心原型系统。 嵌入式Linux设备驱动是嵌入式系统中十分重要的部分,我们选择了LED灯的驱动程序开发作为课程设计题目。可以进一步熟悉Linux操作系统及Linux的编程,同时也了解Linux下驱动开发的大体流程。 本次课程设计的LED灯的驱动程序开发大致包括两个部分,他们是交叉编译环境的搭建和驱动程序、应用程序的编写。交叉编译工具使用arm-linux-gcc-4.3.3,使用NFS网络文件系统构成共享目录完成程序的烧写。主要功能就是在已挂载LED驱动程序的情况下,用应用程序让LED间隔1S亮灭以验证驱动程序是否正常。 关键词:ARM;Linux操作系统;驱动程序开发;交叉编译;NFS;LED灯

Windows 内核技术与驱动开发笔记(完整版)

Windows 内核技术与驱动开发笔记 1.简述Driver Entry例程 动程序的某些全局初始化操作只能在第一次被装入时执行一次,而Driver Entry例程就是这个目的。 * Driver Entry是内核模式驱动程序主入口点常用的名字。 * Driver Entry的第一个参数是一个指针,指向一个刚被初始化的驱动程序对象,该对象就代表你的驱动程序。WDM驱动程序的Driver Entry例程应完成对这个对象的初始化并返回。非WDM驱动程序需要做大量额外的工作,它们必须探测自己的硬件,为硬件创建设备对象(用于代表硬件),配置并初始化硬件使其正常工作。 * Driver Entry的第二个参数是设备服务键的键名。这个串不是长期存在的(函数返回后可能消失)。如果以后想使用该串就必须先把它复制到安全的地方。 * 对于WDM驱动程序的Driver Entry例程,其主要工作是把各种函数指针填入驱动程序对象,这些指针为操作系统指明了驱动程序容器中各种例程的位置。 2.简述使用VC进行内核程序编译的步骤 编译方式是使用VC++进行编译 1.用VC新建工程。 2.将两个源文件Driver.h和Driver.cpp拷贝到工程目录中,并添加到工程中。 3.增加新的编译版本。 4.修改工程属性,选择“project | setting”将IterMediate file和Output file 都改为MyDriver_Check。 5.选择C/C++选项卡,将原有的Project Options内容全部删除替换成相关参数。 6.选择Link选项卡,将原有的Project Options内容删除替换成相关Link。 7.修改VC的lib目录和include的目录。 8.在VC中选择tools | options,在弹出的对话框中选择“Directories”选项卡,在“Show directories for”下拉菜单中选择“Include file”菜单。添加DDK的相关路径。 3.简述单机内核调试技术 答:1.下载和安装WinDbg能够调试windows内核模块的调试工具不多,其中一个选择是微软提供的WinDbg 下载WinDbg后直接双击安装包执行安装。 2.安装好虚拟机以后必须把这个虚拟机上的windows设置为调试执行。在被调试系统2000、2003或是xp的情况下打开虚拟机中的windows系统盘。 3.将boot.ini文件最后一行复制一下,并加上新的参数使之以调试的方法启动。重启系统,在启动时就可以看到菜单,可以进入正常windows xp,也可以进入Debug模式的windows xp。 4.设置VMware管道虚拟串口。调试机与被调试机用串口相连,但是有被调试机是虚拟机的情况下,就不可能用真正的串口连接了,但是可以在虚拟机上生成一个用管道虚拟机的串口,从而可以继续内核调试。 4.请画出Windows架构简图

(完整版)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

windows驱动开发 driverstudio 教程

前言 鉴于国内开发人员迫切需要学习驱动开发技术,而国内有关驱动开发工具DriverStudio的资料很少,大家在开发过程中遇到很多问题却没处问,没法问.而这些问题却是常见的,甚至是很基础的问题。 有感于此,本站联合北京朗维计算机应用公司编写了本教程。本教程的目的是让一个有一些核心态程序编写经验或对系统有所了解的人学习编写驱动程序。当然,本教程不是DDK中有关驱动方面内容的替换,而只是一个开发环境的介绍和指导。 学习本教程,你应该能熟练地使用本套工具编写基本的驱动程序。当然如果你想能顺利地编写各种各样的驱动的话,你应该有相关的硬件知道和系统核心知识并且要经过必要的训练才能胜任。 如果真心说一句话,DriverStudio并没有对驱动程序开发有什么实质的改变,它和DDk的关系不过是sdk和mfc的关系,但很多人选择了MFC,原因不言自明,方便二字何以说得完呀?你再也不用去关注繁琐的框架实现代码,也不用去考虑让人可怕的实现细节。封装完整的C++函数库让你专注于你要实现的程序逻辑。它包含一套完整调试和性能测试、增强工具,使你的代码更稳定。 说些题外话,作驱动开发很苦,不是一般的人能忍受的,那怕开发一个小小的驱动也要忍受无数次的宕机,有时甚至有些灾难性的事故等着你,所以要有充分的思想准备。当然,在开发的过程中你会有一种彻底控制计算机的满足感,调试开发完毕后的成就感是其它开发工作所不能体会到的。当然,就个人前途来说,作驱动开发能拿到别的开发所不能得到的薪水。而且开发的生命期也会长一些,你不用不断的学习新的开发工具,只需要不断的加深对系统的理解就行了。当然,还有一点是必需的,那就是英文要好,否则永远比国外同行慢半拍。 本人水平不高,所做的工作只要能提起大家学习驱动开发的兴趣,能带领大家入门便心满意足了。在此感谢北京朗维公司(DriverStduio 国内总代理)的大力赞助,特别是感谢技术部的王江涛,市场部的李强两位先生的大力支持。同时要感谢我的女友,可爱的小猫(我对她的呢称)的贴心照顾和支持(一些很好看的图片就出自她手:))。在此我也要感谢论坛各大版主的鼎力支持和广大网友的关怀。 DriverStudio工具包介绍: DriverStudio 是一套用来简化微软Windows 平台下设备驱动程序的开发,调试和测试的工具包。DriverStudio 当前的版本包括下列工具模块: DriverAgent DriverAgent 为Win32 应用程序提供直接访问硬件的功能。即使你没有任何设备驱动程序开发的经验或经历,你也能编写出DriverAgent应用程序来直接访问硬件设备。DriverAgent 应用程序可以运行在 Windows 98, Windows 95, Windows NT 和 Windows 2000平台上。(当前版本不支持Windows XP平台。) VToolsD VToolsD 是一个用来开发针对Win9X (Windows 95 和 Windows 98)操作系统下设备驱动程序(VxD)

驱动程序与应用程序的接口

驱动程序与应用程序的接口 本文翻译自DriverWorks帮助文件 杨全胜 有两种方式可以让设备和应用程序之间联系: 1.通过为设备创建的一个符号链; 2.通过输出到一个接口 WDM驱动程序建议使用输出到一个接口而不推荐使用创建符号链的方法。这个接口保证PDO的安全,也保证安全地创建一个惟一的、独立于语言的访问设备的方法。 一个应用程序使用Win32APIs来调用设备。在某个Win32 APIs和设备对象的分发函数之间存在一个映射关系。 获得对设备对象访问的第一步就是打开一个设备对象的句柄。 用符号链打开一个设备的句柄 为了打开一个设备,应用程序需要使用CreateFile。如果该设备有一个符号链出口,应用程序可以用下面这个例子的形式打开句柄: hDevice = CreateFile("\\\\.\\OMNIPORT3", GENERIC_READ | GENERIC_WRITE,FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL ,NULL ); 文件路径名的前缀“\\.\”告诉系统本调用希望打开一个设备。这个设备必须有一个符号链,以便应用程序能够打开它。有关细节查看有关Kdevice和CreateLink的内容。在上述调用中第一个参数中前缀后的部分就是这个符号链的名字。 注意:CreatFile中的第一个参数不是Windows 98/2000中驱动程序(.sys文件)的路径。是到设备对象的符号链。 如果使用DriverWizard产生驱动程序,它通常使用类KunitizedName来构成设备的符号链。这意味着符号链名有一个附加的数字,通常是0。例如:如果链接名称的主干是L “TestDevice”那么在CreateFile中的串就该是“\\\\.\\TestDevice0”。 如果应用程序需要被覆盖的I/O,第六个参数(Flags)必须或上FILE_FLAG_OVERLAPPED。 使用一个输出接口打开句柄 用这种方式打开一个句柄会稍微麻烦一些。DriverWorks库提供两个助手类来使获得对该接口的访问容易一些,这两个类是CDeviceInterface, 和CdeviceInterfaceClass。 CdeviceInterfaceClass类封装了一个设备信息集,该信息集包含了特殊类中的所有设备接口信息。 应用程序能有用CdeviceInterfaceClass类的一个实例来获得一个或更多的CdeviceInterface类的实例。CdeviceInterface类是一个单一设备接口的抽象。它的成员函数DevicePath()返回一个路径名的指针,该指针可以在CreateFile中使用来打开设备。 下面用一个小例子来显示这些类最基本的使用方法: extern GUID TestGuid; HANDLE OpenByInterface( GUID* pClassGuid,

Windows驱动程序框架理解_经典入门

标题: 【原创】Windows驱动程序框架 windows驱动程序入门比较坑爹一点,本文旨在降低入门的门槛。注:下面的主要以NT式驱动为例,部分涉及到WDM驱动的差别会有特别说明。 首先,肯定是配置好对应的开发环境啦,不懂的就百度下吧,这里不再次描述了。 在Console控制台下,我们的有一个入口函数main;在Windows图形界面平台下,有另外一个入口函数Winmain。我们只要在这入口函数里面调用其他相关的函数,程序就会按照我们的意愿跑起来了。在我们用IDE开发的时候,也许你不会发现这些细微之处是如何配置出来的,一般来说我们也不用理会,因为在新建工程的时候,IDE已经帮我们把编译器(Compiler)以及连接器(Linker)的相关参数设置好,在正式编程的时候,我们只要按照规定的框架编程就行了。 同样,在驱动程序也有一个入口函数DriverEntry,这并不是一定的,但这是微软默认的、推荐使用的。在我们配置开发环境的时候我们有机会指定入口函数,这是链接器的参数/entry:"DriverEntry"。 入口函数的声明 代码: DriverEntry主要是对驱动程序进行初始化工作,它由系统进程(System)创建,系统启动的时候System系统进程就被创建了。 驱动加载的时候,系统进程将会创建新的线程,然后调用执行体组件中的对象管理器,创建一个驱动对象(DRIVER_OBJECT)。另外,系统进程还得调用执行体组件中的配置管理程序,查询此驱动程序在注册表中对应项。系统进程在调用驱动程序的Driv erEntry的时候就会将这两个值传到pDriverObject和pRegistryPath。 接下来,我们介绍下上面出现的几个数据结构: typedef LONG NTSTATUS 在驱动开发中,我们应习惯于用NTSTATUS返回信息,NTSTATUS各个位有不同的含义,我们可以也应该用宏NT_SUCCESS来判断是否返回成功。 代码: NTSTAUS的编码意义: 其中 Ser是Serviity的缩写,代表严重程度。 00:成功01:信息10:警告11:错误 C是Customer的缩写,代表自定义的位。

Windows7+WDK+VS2010+VisualDDK驱动开发环境搭建

[置顶]Windows7+WDK+VS2010+VisualDDK驱动开发环境搭建(菜鸟的经验) 分类:驱动开发2011-08-12 23:30 863人阅读评论(3) 收藏举报 自己在研究驱动开发,第一步就是开发环境的搭建,网上已有很多的教程一,我也是按着教程一步一步搭建的,但在搭建过程的过程当中遇到一些问题,也花了我不少时间。 第一个难题就是,我是Windows7+VS2010+WDK的开发环境。 首先我参考了网上的一篇文章:https://www.360docs.net/doc/f41560579.html,/guojingjia2006/archive/2011/03/19/142211.html WINDOWS 7 配置驱动开发环境(wdk7.60) 1. 安装VS2010,WDK7.60 (GRMWDK_EN_7600_1) 2. 新建VC 控制台项目(选择为空项目)

3. 新建项目配置“driver” ,点击下拉按钮-点击(配置管理器) 输入名称(driver)点击确定就可以了,其他的不要动哦!

完成后的效果! 点击确定按钮之后呈现出来的画面

鼠标右击新建的driver属性,会弹出以下窗口! 4. 设置VC++路径 <我把wdk安装在E盘下> a. 配置可执行文件目 录:E:\WinDDK\7600.16385.1\bin\x86;

b. 配置包含目录: E:\WinDDK\7600.16385.1\inc\ddk E:\WinDDK\7600.16385.1\inc\ E:\WinDDK\7600.16385.1\inc\api c. 配置库目 录: E:\WinDDK\7600.16385.1\lib\win7\i3865 新建C/C++文件不然无C/C++设置选项 <刚开始我们创建了一个空的项目所以项目里没有 c++文件,现在要做的就是在空的项目-源文件-添加一个新建项c++文件> 常规 目标文件扩展名:.sys //必选 6. 设置C/C++选项 常规选项卡 1 调试信息格式(C7 兼容(/Z7) //可选 2 警告等级(2 级(/W2) //可选 3 将警告视为错误(是(/wx) //可选

相关文档
最新文档