数控机床RS232-USB接口转接技术研究及实现_第1页
数控机床RS232-USB接口转接技术研究及实现_第2页
数控机床RS232-USB接口转接技术研究及实现_第3页
数控机床RS232-USB接口转接技术研究及实现_第4页
数控机床RS232-USB接口转接技术研究及实现_第5页
已阅读5页,还剩41页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

数控机床RS232-USB接口转接技术研究及实现摘要:本文提出一种USB接口到RS232接口无缝转换的接口转换器的设计方案,该方案基于单片机实现,能使传统设备直接使用其原有的RS232接口与主机的USB总线接口进行双向数据传输。该方案具有双向缓冲功能,具有即插即用、使用方便、性价比高等特点。主要讨论了PC机外设接口的现状分析;与本方案相关的USB接口规范;实现USB-RS232接口转换器的硬件设计细节;固件程序的设计细节;关键词:通用串行总线,RS232接口,单片机,转换器。IResearchandimplementationofRS232-USBinterfacetransfertechnologyforNCmachinetoolAbstract:ThefollowingarticledeliversadesignproposalfromUSBconnectionswitchtoRS232seamlesstransformationswitch,whichenablestraditionalequipmenttouseformerRS232connectionswitchtorealizethebidirectionaldatatransmissionwiththeUSBbusconnectionswitch.Andthisproposalhassuchfunctionsofbidirectionalcushionsasplugandplay,easytooperate,highratioofperformance-to-price.ThearticlemainlydiscussesthecurrentsituationofperipheraldeviceconnectionofPCmachine:relativelawsofUSBconnection;designdetailsofrealizingthetransmissionfromUSBtoRS232connectionswitch;designdetailsoffirmware;Keywords:generalserialbus,RS232interface,microcontroller,converter.II目录1引言.11.1USB接口,RS232接口及其应用.11.2RS232与USB转换器的意义.11.3本论文的主要工作.22USB通用串行总线协议.32.1USB系统的描述.32.1.1USB总线结构.32.1.2主机.32.1.3USB硬件结构.32.1.4数据的传输.32.1.5USB总线的协议.42.2RS232接口描述.42.2.1RS232的特点.42.2.2RS232的分类.42.3小结.53USB-RS232接口转换器的硬件电路设计.63.1系统设计要求.63.2方案的选择.63.3AT90USB1286芯片介绍.73.3.1AT90USB1286芯片特性介绍.73.3.2AT90USB1286的操作命令.73.480C528单片机介绍.93.4.180C528的主要特点.93.4.2单片机的复位电路和晶振电路.103.4.3MAX232电平转换电路作用.113.5接口转换器的硬件电路设计.123.5.1硬件系统框图.123.5小结.134系统的软件设计.144.1USB转串口设备端的程序设计.14III4.2驱动程序开发环境-WINDDK的使用.174.3USB驱动程序、虚拟串口的实现方法.174.4使用DDK设计USB转串口驱动程序.214.4.1USB转串口的驱动程序基本框架.214.4.2makefile文件与source文件.234.4.3修改安装驱动用的inf文件.24参考文献.26致谢.27附录A系统电路原理图.28附录B部分源程序.2901引言1.1USB接口,RS232接口及其应用USB-计算机串行接口,是由4家公司在1996年提出来的,到1997年出现标准的外设,1999年介绍了USB2.0的规范,其主要特点是传输速度高达120Mbps到240Mbps,并适用于打印机等存储设备。目前,使用USB外设越来越广泛,比如Appel和Windoes都对其提供了很高的支持,USB的使用也相当方便,比如现在的手机,数码相机,USB网卡,摄像头,充电器等都用到USB接口。RS232,主要的作用在于终端数据和通讯数据之间的数据对换,让各种各样的设备进行数据转换。当前,RS-232的数据通讯速度在0到20000bps之间。在电气特性明确的规定中有相关问题,由于大多是生产厂商都生产与其相兼容的通讯设备,所以在微机通讯接口方面得到了很广泛的运用。1.2RS232与USB转换器的意义USB-计算机串行接口,在当前应用在很多地方,但还是有很多地方不足,因此还需要原有的串行总线接口。USB主要面向软件的总线,还有其自己复杂的协议,但它没有DMA(直接存储访问),IO地址等,并且要实现USB的正常运转,必须要满足以下条件,第一点:需要程序激发,然后发出访问。第二点:主机应驱动程序然后完成管理设备等工作。第三点:硬件要与USB总线连接。所以在进行使用USB接口时,要做大量的工作,比如要完成软件,硬件等设计等工作,不过RS-232使用起来非常方便,自身系统会驱动设备,不需要大量的硬件和软件设计,软件只要设计好传输速度和位就好。但是由于RS-232也存在很多的局限性,在进行数据在主机上进行存储的时候其传输的最大速度也不过只有0.115Mbps,同时只能传输15米,所以在那些精度高,速度快的传输里面就不行,如果那样传输的话会导致时间过长而导致数据的损失。不过采用并口传输(速度是串口的8倍),尽管速度提高了,但1是由于接口太复杂,与主机接口比较少的特性相违背,所以要找一个比较好的办法,最终找到USB接口,很好的解决主机个数有限的问题。USB接口有很多的优点:第一点:USB具有很高的传输速率,其最高可以达到12Mbps,比标准的串口(115kbps)快上100倍左右,比标准并口快上10倍左右,而USB2.0更快。而且USB设备所有的处理都是由主机处理,不需要占太多的系统存储空间。还有I/O的存储空间第二点:实现USB的成本非常的廉价,所以在现实生活中用于很多的外设。而且USB数据线还可以自己供电,一些功率不大的外围设备可以用其供电,那就不需要其他的电源啦。而且在USB的叙述中一台计算机最高可以达到127个外设。第三点:对于USB的通讯,可以使计算机与数据采集系统的数据对换有很广的应用,现在很多的计算机都是用到USB作为接口。在当前,有大量的仪器仪表,控制设备还用到RS232的串行接口,而要将其立即变换成USB,很明显成本及实施方面有很多的问题,为了让USB广泛的应用到现实生活中,很有必要开发出RS232-USB接口的转换器,如果将其应用到现实生活中,会使很多传统的设备不需要改造,即可使USB总线接口与RS232直接实现双向数据传输。以上是实施USB-RS232接口转换的意义之一另外,在今后的发展中,USB接口也会成为很常用的嵌入式系统主流通讯工具。1.3本论文的主要工作本人主要的工作是根据现在的主流,将RS232串行接口与USB总线接口结合,设计出RS232-USB接口转换器本人会从硬件电路的设计,还有固件设计来分析RS232-USB转换器设计。22USB通用串行总线协议2.1USB系统的描述USB数据总线是为了解决计算机在与设备相连时时不具有随意插,随意拔,还有解决传统数据传输的速度慢,效率低,不能自动对点等缺点。因此USB具有数据传输速度快,还有只带电源,扩充起来容易等功能,是一个新型的接口。USB通用串行线是由3个部分组成的,分别为主机,USB总线上的设备,还有USB构成。2.1.1USB总线结构从USB物理连接上讲,其连接啦设备和主机,它的特点很有特点,有很高的层次性,还有其结构像星型,在星型中心,有很多的网络集线器,线县相连形成拓扑结构。2.1.2主机一般情况下,在一个USB系统中,只有主机一个,而且是有其发起的,但是在一台计算机中,主机可不止一个,在主机控制中,它的控制很广,有硬件,软件等,在主机上,有集成线,可以连接别的线,从而与外面的设备相连。2.1.3USB硬件结构USB一共有4根电缆,它们的作用是有两根用来电源,另外两根则用作串行通道,对于速度要求比较低的外设设备,USB以两种速度进行传输数据,当遇到低速的外设设备时,USB以1500bps速度传输,当遇到要求速度高的外设设备时,USB的传输速度为12Mbps,而且USB会自动调整。一般USB在USB系统中控制着令牌,设备通过发送令牌,然后USB检测到,然后发送给主机数据来完成。32.1.4数据的传输USB为主机软件的实现提供啦通道,并且有4中方式:中断,等时,控制,数据块4种传输方式中断传输:如键盘设备,在与主机进行传输时,量不大,且无周期,不过速度要很快。数据块传输:传输数据要以块的方式要求量大。比如打印机等。控制传输类型:支持外设与主机间的控制。等时传输:支持计算机和电话机之间传输,支持有规律,且传输速率不变的外设与主机传输。2.1.5USB总线的协议设备与主机之间的数据的传输方式主要是由USB总线协议规定的,规定啦它们是怎么传输的,USB总线还有规定啦传输结构,还有位,包等结构2.2RS232接口描述2.2.1RS232的特点1.电压与电平:RS232的信号线上的电压为负逻辑,意思就是当逻辑0时,则电压的大小为3到15V,反之当是1时为负,但是TTL电路恰好与其相反,为5V,所以需要电平的转换。2.传输速率:它的传输速率较低一般最高也只有1500bpbs。3.传输的距离:传输距离短,最高只有15米2.2.2RS232的分类RS232根据引脚的分为两类:第一类为DB9:1.DCD表示载波检测42.RXD表示接收数据3.TXD表示发送数据4DTR表示数据终端准备好5.SGND表示信号地线6.DSR表示数据准备好7.RTS表示请求发送8.CTS表示清除发送9.RI表示振铃提示还有一类是为DB25,而本设计采用的是第一种DB92.3小结本章主要是介绍啦USB的结构,还有其传输方式,以及USB协议,然后介绍啦RS232的特点以及分类。53USB-RS232接口转换器的硬件电路设计3.1系统设计要求本系统需要实现两大功能:第一点:USB设备功能的实现,用USB接PC的USB口,对应的RS232口接RS232的设备,通过以上的连接,实现USB和RS232之间的转换第二点:USB主机功能的实现,将U盘接在USB接口上,RS232设备接入RS232口中那么最后会将RS232中的数据存到U盘中。具体设计考虑的要素有:1、良好的兼容性;在USB总线协议的条件下,兼容大部分移动硬盘。2、实现USB主机和设备功能模块作为设备使用时,能够完成主机的传输请求。3、实现USB/RS232/485的接口转换由于要实现RS232与USB数据之间的转换,所以必须要遵守各自的协议。4、要方便用户扩展为啦使用户方便扩展,应保留用户的接口5、低功耗要求模块在保证驱动能力的情况下要尽量减少功耗以节省能源6、成本要求在保证功能的情况下,尽可能降低成本。3.2方案的选择一共有3中方案,第一种为传统的USB接口转换芯片,第二种为利用集成USB模块的微处理器,第三种为利用单片机+USB主机控制器。本设计采用的是方案3:该方案的优点在于不需要计算机,而是直接用单片机来实现数据的传输,6实现主机的功能,这个系统完全可以自给自足。还有可以随意在外围器件的配置上加上其他模块来实现需要的功能。该方案可以选择不同的单片机作为芯片来实现自己的需要,不过基本硬件都差不多,只是考虑单片机的速度是否足够快和内存足够大,还有弄出一些协议来达到简化。3.3AT90USB1286芯片介绍3.3.1AT90USB1286芯片特性介绍1、符合USB全速规范。2、内部集成了SIEFIFO存储器收发器以及电压调整器。3、接口灵活,可与任何CPU实现高速并行连接,速度2M字节/秒。4、具有直接内存存取DMA功能。5、内部集成320字节的FIFO存储器用作数据缓冲区。6、主端点配置双缓冲结构,增加B数据吞吐量。7、在批处理和同步模式下实现1M字节/秒的USB数据传输速率。8、设备挂起时可控制LazyClock输出。9、可用软件控制是否连接到USB总线。10、具有GoodLink技术的连接LED指示器,USB通讯时LED闪烁,方便调试。11、输出时钟的频率可用软件控制。12、内部具有上电复位和低电压复位电路。13、双电源工作,3.30.3V或3.65.5V。3.3.2AT90USB1286的操作命令单片机通过发送操作命令给AT90USB1286,完成对AT90USB1286的控制,命令一共有15种,分述如下:1、设置地址/使能命令:7设定设备地址,允许芯片工作。2、设置端点使能命令:允许端点工作。3、设置模式命令:确定时钟分频系数,软连接功能,端点工作模式,中断模式。4、DMA设置命令DMA方式设置。5、读中断寄存器命令:指示中断的来源。6、读最后处理状态命令:读取芯片的最后处理状态,向芯片发出读最后处理状态命令后,再向芯片发读请求,所得到的就是端点的最后处理状态。这个命令同时还将中断寄存器中的位清零。7、选择端点命令:选择设备的端点,以进行下一步的缓冲区操作。8、设置端点状态命令:设定端点的工作状态。9、缓冲区清零命令:芯片接收到数据包后,内部的缓冲区满标志将置1,如果单片机将数据读出,单片机要调用清缓冲区命令,将缓冲区释放,这样才能接收新的数据。10、使缓冲区有效命令:单片机把数据写入缓冲区后,要设置缓冲区满标志,这样,当芯片接收到IN包时,数据会自动组织成数据包,返回主机。11、读缓冲区命令:单片机读D12的内部缓冲区时,先向芯片发读缓冲区命令,接着再读D12,就可得到数据。12、写缓冲区命令:单片机在把数据送到D12的内部缓冲区前,应先发写缓冲区命令。13、应答设置命令:SETUP信息包到来时,单片机要发送应答设备命令,这样SETUP的内容才能保8留在D12的缓冲区中。14、发送恢复命令:唤醒设备。15、读当前帧号命令:读总线的当前帧号。3.480C528单片机介绍USB-RS232接口转换器的核心电路由单片机组成,根据设计方案的要求,对单片机有以下的要求。1、单片机应具有看门狗电路,提高系统的可靠性。2、单片机应具有程序存储器。3、单片机应具有内部定时器,作程序定时之用。4、单片机应具有大容量的数据存储器。5、为与D12连接,单片机应具有外部扩展总线。6、单片机应具有UART异步串行接口。7、单片机的程序存储器应具有硬件加密功能,防止硬件被复制。8、单片机工作速度要快、价格低、功耗低、可靠性高、抗干扰能力强。9、单片机应支持高级语言编程。3.4.180C528的主要特点1、增强型8051CPU指令代码完全兼容8051。同时支持C51编程。2、内8kROM(可扩充64kB外部存储器)4、32个双向I/O口5、256x8bit内部RAM(可扩充64kB外部存储器)6、3个16位可编程定时/计数器7、时钟频率3.5-12/24/33MHz8、5.0V工作电压9、全双工串行通信口10、4层优先级中断结构989C528各引脚如下图3.1所示:图3.180C528单片机3.4.2单片机的复位电路和晶振电路的设计如下图所示3.2所示:图3.2复位和晶振电路图10图3.2复位电路和晶振电路图复位电路:单片机的复位电路就是在单片机受到环境干扰时,按下自身按钮就可以让程序重头开始执行。复位电路的工作原理:如图所示,电容的大小设置为22uf,电阻的大小为10k,需要的时间为两者相乘。如果按下开关,电容就会处于一种短路的状态,那么电容就会释放出之前的电量,这个时候电阻的电量增加,所以单片机的RST接收到高电平,就会产生复位。单片机的晶振电路及其工作原理:单片机的晶振作用是为单片机系统系统提供其所需的时钟信号,其提供的频率越高,速度就越快。3.4.3MAX232电平转换电路作用如下图所示为其转换的电路图3.3图3.3电平转化电路11目的:89C52单片机自带一串口,不过是TTL电平的,而计算机上的串口为CMOS电平,因此需要接上MAX232,将其转化为CMOS电平。串口传输需要速率较快,整个系统要求工作地时钟频率较高,因而采用22.1184MHz的晶振,还加快啦传输速度,以保证数据不损失。3.5接口转换器的硬件电路设计根据USB-RS232接口转换器的设计方案,设计了USB-RS232接口转换器的硬件电路框图和具体的电路图。3.5.1硬件系统框图选定USB通信芯片与单片机后,接下来就是把芯片连接成电路,完整的电路原理图如图3.4:图3.4电路图123.5小结本章首先分析了USB-RS232接口转换器的设计方案。然后介绍了所选用的USB接口芯片AT90USB1286的特点及操作命令,给出了与单片机的连接电路。接着介绍了所选用的单片机芯片80c52最后实现了接口转换器的硬件电路,给出了具体的硬件电路图,包括单片机电路、USB接口电路、TTL-RS232电平转换电路。134系统的软件设计4.1USB转串口设备端的程序设计硬件电路设计好了,接下来要想使电路运行起来,在此电路中,首先要通过单片机实现对AT90USB1286芯片的控制,就是控制它的驱动程序,还需要控制的是单片机的驱动。来构成一个协议的框架。一般来说,要实现USB转串口,有两种可行的方法:一种是使用USB协议规定的CDC类中的抽象模型(abstractcontrolmodel)子类中的通用AT命令(commonATcommands)协议,此方案不需要开发相应的驱动程序。第二种:就是需要用户自己开发程序来驱动,自己定义USB协议,但是操作起来比较困难,但相对于第一种会比较变通。不过两种的通讯方式是差不多的,最大的不同就在于它们的怎么叙述不同,可以通过89C52控制程序实现图4.1设备端程序流程图初始化部分,程序就开始工作,它的主要工作是:初始化串口,读出ID然后用程序的方式来控制USB的断开和连接。141)USB-CDC类设备的描述符如下:设备描述符(18字节)0x12,0x01,0x10,0x01,0x02,0x00,0x00,0x10,0x99,0x99,0x99,0x99,0x00,0x01,0x01,0x020x03,0x01以下是配置描述符集合()配置描述符(9字节)0x09,0x02,0x43,0x00,0x02,0x01,0x00,0x80,0x32CDC类接口描述符(9字节)0x09,0x04,0x00,0x00,0x01,0x02,0x02,0x01,0x00,功能描述符(19字节)HeaderFunctionalDescriptor0x05,0x24,0x00,0x10,0x01CallManagementFunctionalDescriptor0x05,0x24,0x01,0x00,0x00AbstractControlManagementFunctionalDescriptor0x04,0x24,0x02,0x02UnionFunctionalDescriptor0x05,0x24,0x06,0x00,0x01接口0的端点描述符(7字节)0x07,0x05,0x81,0x03,0x10,0x00,0x0A接口1(数据接口)的接口描述符(9字节)0x09,0x04,0x01,0x00,0x02,0x0A,0x00,0x00,0x00批量输入端点2描述符(7字节)0x07,0x05,0x82,0x02,0x40,0x00,0x00批量输出端点2描述符(7字节)0x07,0x05,0x02,0x02,0x40,0x00,0x00配置好设备的描述符后,主机应该可以成功地识别该设备了,但USB转串口设备还不能算完成。还需要实现对端点的数据处理:首选要实再对SET_CONTROL_LINE_STATESET_LINE_CONING和GET_LINE_CONING请求的处理,另外,要实现对串口数据的处理,即将串口接收到的数据发送到端点2,将端点2接收到的数据发送到串口,数据代码如下:15if(ConfigValue!=0)if(Ep2InIsBusy=0)/判断端点2是否空闲SendUartDataToEp2();/调用函数将缓冲区数据发送到端点2if(UsbEp2ByteCount!=0)/端点2接收缓冲区中还有数据未发送,则发送到串口/发送一字节到串口UartPutChar(UsbEp2BufferUsbEp2BufferOutputPoint);UsbEp2BufferOutputPoint+;/发送位置后移1UsbEp2ByteCount-;/计数值减1到现在,USB转串基本完成,然后单片机接收到程序,并在主机端装上驱动程序后(Windows操作系统自带有USB-CDC类驱动,用户无需开发,只需提供一个安装驱动用的INF文件),即可产生一个虚拟串口了,(2)自定义USB类设备的描述符如下:设备描述符(18字节)0x12,0x01,0x10,0x01,0xFF,0x00,0x00,0x10,0x99,0x99,0x99,0x99,0x00,0x01,0x01,0x02,0x03,0x01配置描述符集合(32字节)配置描述符(9字节)0x09,0x02,sizeof(ConfigurationDescriptor)&0xFF,(sizeof(ConfigurationDescriptor)8)&0xFF,0x01,0x01,0x00,0x80,0x32,接口描述符(9字节)0x09,0x04,0x00,0x00,0x02,0x00,0x00,0x00,0x00批量输入端点2描述符(7字节)0x07,0x05,0x82,0x02,0x40,0x00,0x00批量输出端点2描述符(7字节)0x07,0x05,0x02,0x02,0x40,0x00,0x0016语言描述符此处略去。4.2驱动程序开发环境WinDDK的使用WDM(WindowsDriverModel)是Microsoft提出的一种全新的设备驱动程序模型。它是在WindowsNT内核驱动模型(Kernel-modelDriverModel)的基础上发展起来的,增加了对即插即用(PnP)、高级电源管理(PowerManagement)、Windows管理接口(WMI)的支持,更重要的是,WDM是一种通用的驱动模式,提供了包括USB、IEEE1394、和HID等在内的一系列驱动程序类。在Windows98和Windows2000/XP中,WDM驱动程序均可正常使用。4.3USB驱动程序、虚拟串口的实现方法DDK提供了构造URB的内核函数UsbBuildGetDescritorRequest,在功能驱动中,所有与USB的通信,都需要用这个函数创建URB,并通过IRP发送到底层USB总线驱动,其声明如下:VOIDUsbBuildGetDescritorRequest(INOUTPURBUrb,INUSHORTLength,INUCHARDescriptorType,INUCHARIndex,INUSHORTLanguageId,INPVOIDTransferBufferOPTIONAL,INPMDLTransferBufferMDLOPTIONAL,INULONGTransferBufferLength,INPURBLinkOPTIONAL);URB:用来输出的URB结构的指针。Length:用来描述该URB结构的大小。17DescriptorType:描述该URB的类型。它可以是USB_DEVICE_DESCRIPTOR_TYPE、USB_CONFIGURATION_DESCRIPTOR_TYPE和USB_STRING_DESCRIPTOR_TYPE。Index:用来描述设备描述符的索引。LanguageId:用来描述语言ID。TransferBuffer:如果用缓冲区读取设备,TransferBuffer是缓冲区内存的指针。TransferBufferMDL:如果用直接读取内存时,TransferBufferMDL是直接读取内存时MDL的指针。TransferBufferLength:对于该URB所操作内存的大小。功能驱动将URB包构造完毕后,就可以发送到底层总线驱动上了,URB包要和一个IRP相关联起来,这就需要用IoBuildDeviceControlRequest创建一个IO控制码的IRP,然后将URB作为IRP的参数,用IoCallDriver将URB发送到底层总线驱动上。与一般的驱动类似,USB驱动的初始化入口函数为DriverEntry,在该函数中,分别指定各个IRP的派遣函数地址、指定AddDevice例程函数地址、指定Unload例程函数地址等。在AddDevice例程中,创建功能设备对像,然后将该对象挂载在总线设备对像之上,从而形成设备栈。另外为设备创建一个设备链接,以便于应用程序可以找到这个设备。插拔USB设备时会与4个IRP相关,即IRP_MN_START_DEVICE、IRP_MN_STOP_DEVICE、IRP_MN_EJECT、IRP_MN_SURPRISE_REMOVAL。其中,IRP_MN_START_DEVICE消息是当驱动争取加载并运行时,操作系统的PnP管理器会将这个IRP发往设备驱动。当获得这个IRP后,USB驱动需要获得USB设备类别描述符,如设备描述符、配置描述符、接口描述符、端点描述符等。并通过这些描述符有用的信息,记录在设备扩展中。IRP_MN_STOP_DEVICE是设备关闭前,PnP管理器发出的IRP。USB驱动获得这个IRP时,应该尽快结束当前执行的IRP,并将其逐个取消掉。另外,在设备扩展中还应该有表示当前状态的变量,当IRP_MN_STOP_DEVICE来临时,将当前状态记录成停止状态。IRP_MN_EJECT是设备被正常弹出,而IRP_MN_SURPRISE_REMOVAL则是设备非自然弹出,有可能是意外掉电或者强行18拔出等。在这种IRP到来的时候,应该强迫所有未完成的读写IRP结束并取消,并且将当前设备状态设置成设备被拔掉。USB设备大部分数据的传送是通过Bulk管道来传输的,Bulk管理的读取是在IRP_MJ_READ各IRP_MJ_WRITE的派遣函数中,应用程序可以通过ReadFile、WriteFile等API对设备进行操作。在IRP_MJ_READ各IRP_MJ_WRITE的派遣例程中设置了完成例程,其原理是将读写的大小分成单位为BULKUSB_MAX_TRANSFER_SIZE的若干块,依次将请求发往底层USB总线驱动。虚拟串口就是当本地并没有对应的串口硬件设备,而为应用层提供串口设备一样的系统调用接口,以兼容原本使用本地串口的应用软件的“虚”设备。本文作者给出了一种在Windows平台上实现虚拟串口的方法,由此实现的“串口”具有真实串口完全相同的系统调用接口。DDK对串口驱动提供了专门接口。只要编写的驱动满足这些接口,并按照串口标准的命名方法,不管是真实的还是虚拟的串口设备,Windows操作系统都会认为这个设备是一个标准的串口设备。用标准的串口调试工具都可以与这个设备进行通信。串口驱动的入口函数依然是DriverEntry,并在其中指定各种IRP的派遣函数、AddDevice例程、Unload例程等。其中在AddDevice例程中,需要创建设备对像,创建完设备对象之后,需要将设备对象指定一个符号链接,以便客户程序(串口调试工具)能够识别,该符号以COM开头,并接一个数字就可以了。编写串口驱动的核心是对应用程序发出的IO控制码和读写命令(即接口)进行处理。这些控制码分别是:(1)、IOCTL_SERIAL_SET_QUEUE_SIZE这个控制码是应用程序向驱动请求设置串口驱动内部的缓冲区大小,它是向驱动传递SERIAL_QUEUE_SIZE数据结构来进行设置的。对于虚拟串口驱动来说,这是不需要关心的。(2)、IOCTL_SERIAL_GET_BAUD_RATE应用程序向驱动程序IOCTL_SERIAL_GET_BAUD_RATE命令,这主要是询问驱动这个设备的波特率。驱动应该回应给应用程序SERIAL_BAUD_RATE的数据结构来通知波特率的数值。19(3)、IOCTL_SERIAL_GET_LINE_CONTROL应用程序向驱动程序IOCTL_SERIAL_GET_LINE_CONTROL命令,这要是为了返回串口的行控制信息,行控制信息用SERIAL_LINE_CONTROL数据结构表示typedefstruct_SERIAL_LINE_CONTROLUCHARStopBits;UCHARParity;UCHARWordLength;SERIAL_LINE_CONTROL,*PSERIAL_LINE_CONTROL;(4)、IOCTL_SERIAL_GET_CHARS这个命令是应用程序向驱动请求特殊字符,用来与控制信号握手,用数据结构SERIAL_CHARS表示Typedefstruct_SERIAL_CHARSUCHAREofChar;UCHARErrorChar;UCHARBreakChar;UCHAREventChar;UCHARXonChar;UCHARXoffChar;SERIAL_CHARS,*PSERIAL_CHARS;其中EofChar代表是否是传送结束、ErrorChar代表是否传送中有错误、BreakChar代表是否传送有停止等。(5)、IOCTL_SERIAL_GET_HANDFLOW这个命令是负责向驱动程序获得串口驱动的握手信号,握手信号用SERIAL_HANDFLOW数据结构表示。Typedefstruct_SERIAL_HANDFLOWULONGControlHandShake;ULONGFlowReplace;ULONGXonLimit;ULONGXoffLimit;SERIAL_HANDFLOW,*PSERIAL_HANDFLOW;(6)、IOCTL_SERIAL_SET_WAIT_MASK20这个命令主要是设置串口驱动的某些事件发生时,需要向应用程序通知。这些事件包括以下几种事件:#defineSERIAL_EV_RXCHAR0x0001#defineSERIAL_EV_RXFLAG0x0002#defineSERIAL_EV_TXEMPTY0x0004#defineSERIAL_EV_CTS0x0008#defineSERIAL_EV_DSR0x0010#defineSERIAL_EV_RLSD0x0020#defineSERIAL_EV_BREAK0x0040#defineSERIAL_EV_ERR0x0080(7)、IOCTL_SERIAL_WAIT_ON_MASK这个IO控制码是最重要的一个,当应用程序通过前面几个IO控制码初始化好后,就会发送这个请求。在驱动程序中,应该阻塞在那里返回PENDING状态,而不是完成这个IRP。当IOCTL_SERIAL_WAIT_ON_MASK设置的事件中的一项发生时,阻塞状态改为完成,并通知应用程序究竟是哪种事件发生了。串口驱动程序完成处理IO控制码之后,接下来就是对读写IRP进行处理了,对于写IRP的派遣函数中,主要写的数据存储在设备扩展中,以便以后读的时候将这些内容返回应用程序,另个使阻塞的IO控制苏醒过来,调用DriverCheckEvents函数阻塞IRP完成,使应用程序的线程得以继续运行。并且这个线程还知道了SERIAL_EV_RXCHAR和SERIAL_EV_RX80FULL事件的到来,从而发起一个读请求,传送到驱动程序中就是读IRP。在读IRP派遣函数中,负责将存储在设备扩展中的数据通过IRP传送到应用程序。214.4使用DDK设计USB转串口驱动程序4.4.1USB转串口的驱动程序基本框架与一般的应用程序流程类似,USB转串口的驱动程序流程也可分为初始化、数据处理、判断是结束设备等部分。驱动程序流程图如下图4.2所示:图4.2驱动程序流程图系统初始化:此部分主要DriverEntry函数来处理。DriverEntry是驱动程序的入口点,该函数由I/O系统直接调用。在函数中获取设备的注册表信息、并对以下的IRP指定相应的派遣函数:DriverObject-MajorFunctionIRP_MJ_CREATE=USB2COM_Create;DriverObject-MajorFunctionIRP_MJ_CLOSE=USB2COM_Close;DriverObject-DriverUnload=USB2COM_Unload;/用户模式DeviceIoControl()调用此例程22DriverObject-MajorFunctionIRP_MJ_DEVICE_CONTROL=USB2COM_ProcessIOCTL;/用户模式ReadFile()/WriteFile()调用此例程DriverObject-MajorFunctionIRP_MJ_WRITE=USB2COM_Write;DriverObject-MajorFunctionIRP_MJ_READ=USB2COM_Read;/系统PNP与电源管理请求处理例程DriverObject-MajorFunctionIRP_MJ_SYSTEM_CONTROL=USB2COM_ProcessSysControlIrp;DriverObject-MajorFunctionIRP_MJ_PNP=USB2COM_ProcessPnPIrp;DriverObject-MajorFunctionIRP_MJ_POWER=USB2COM_ProcessPowerIrp;指定IRP派遣函数后,接下来AddDevice例程创建设备对象/当设备插入时会调用此例程DriverObject-DriverExtension-AddDevice=USB2COM_PnPAddDevice;对USB设备而言,首先要检查设备是否已启用,如有必要复位设备所在的端口。使用IOCTL_INTERNAL_USB_GET_PORT_ST和IOCTL_INTERNAL_USB_RESET_PORT来构造IRP,并将NextIrpStack-Parameters.Others.Argument1置为NULL,进而调用IoCallDriver发送。接下来就是用合适的配置弄设备和初始化通道,并用它们填充USBD_INTERFACE_LIST_ENTRY类型的数组,即接口描述符列表;再将接口描述符列表作为参数,调用函数USBD_CreateConfigurationRequestEx构造配置设备接口的URB,并发送,完成设备接口的配置。至此,初始化工作完成。4.4.2makefile文件与source文件大多数情况下,makefile文件只需写入如下内容即可:!INCLUDE$(NTMAKEENV)makefile.def以上语句的含义是包含了DDK目录中的makefile.def在这里还需要编写的一个文件source,本项目的source文件内容如下:TARGETNAME=usb2rs232TARGETTYPE=DRIVER23DRIVERTYPE=WDMTARGETPATH=objTARGETLIBS=$(DDK_LIB_PATH)usbd.lib、USE_MAPSYM=1USER_C_FLAGS=/FAcsSOURCES=usb2com.rcdbg.cusb.cpnp.cpower.cioctl.crw.cserial.cbuf.cwaitmask.cpurge.cTARGETNAME:描述目标驱动程序的名称。TARGETTYPE:描述目标代码生成的类别。TARGETTYPE=DRIVER意味着是生成驱动,如果TARGETTYPE=PROGRAM,则编译成Win32程序。TARGETPATH:指示目标代码生成的路径。TARGETLIBS:设置目标代码所需要的库。SOURCES:指定此工程所有的源文件,只指定C文件或者C+文件,不需指定H文件。4.4.3修改安装驱动用的inf文件在驱动安装时,要规定INF,该文件包括拉很多的信息如ID号,还有设备名等。在version节,Class类为端号,GUID为端口类的GUID。Class=Ports24ClassGuid=4D36E978-E325-11CE-BFC1-08002BE10318在Pro节,需要指定硬件匹配的ID号,要本题中为PID与VID均为9999%DeviceDesc%=ComPort,USBVID_9999&PID_9999在DestinationDirs节为目标文件夹的位置,12为system32目录DefaultDestDir=12在Strings节,指定一些供显示用的字符串,可按自己的需要来修改,不影响驱动的安装。Pro=TankUSBtoRS232PORT.Pro.Disk=USBtoCOMInstalltionDisketteDeviceDesc=USBtoCOMPortSerial.SVCDESC=USB-COMVirtualComPortdriver安装好设备驱动后,在电脑上就可以访问此虚拟的串口设备了,如用串口调试助手,如同操作普通串口一样,打开COM4然后进行数据的传送。25参考文献1张宏USB接口设计电子科技大学出版社,2002:122马伟,邵贝贝OTG补充协议开辟USB应用的新篇章电子产品世界,2002,6(A):68-693RodgerRicheyUSB的设计要素今日电子,2008,11:42444邵贝贝,马伟开发“嵌入式主机”扩展移动数据存储和交换的应用领域今日电子,2003,(2):33345李肇庆,廖峰,刘建存USB接口技术国防工业出版社,20046曹国飞嵌入式USB主机接111的设计:(硕士学位论文)哈尔滨哈尔滨理工大学2006:1107JanAxelsonUniversalSerialBusCompleteUSA:LakeviewResearch,19998张建华USB主机MassStorage类的实现交通科技与经济,2006,4:70-719萧踞雄,翁铁成,宋中庆USB技术及应用设计清华大学出版社,20032610胡晓军,张爱成USB接口开发技术西安电子科技大学出版社,200511杨波.网络安全理论与应用M.北京:电子工业出版社,200012屡段钢.加密与解密M.北京:电子工业出版社,200313尤晋元

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论