




已阅读5页,还剩6页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
ISA数据采集卡的USB集成扩展桥接器摘要:这是一个集成扩展总线桥接器,它把传统的ISA(工业标准架构)数据传输总线和USB(通用串行总线)总线连接在一起,实现了ISA数据采集卡外置。主要的数据传输功能由Cypress公司的EZ-USB AN2131Q芯片完成。本文详细介绍了AN2131Q芯片性能,驱动程序开发,固件设计,应用程序通信等内容。USB具有总线支持热拔插、即插即用,易于扩展,占用系统资源少等特点,在系统中表现出很高的性能。而这些技术能够很容易的扩展到测控领域,而ISA总线的外设卡在测控领域应用十分广泛。关键词:AN2131Q,数据采集,ISA,USB1. 绪论在使用设备电源供电的情况PC环境中的各种标准扩展总线系统的有效性是一个十分重要的因素。最初的PC扩展总线支持8位数据总线(ISA),但很快扩展到支持支持16位总线(EISA),尽管作为一种增强型的总线标准,PCI总线具有很好的性能,但ISA和EISA卡在控制和测量系统中仍然在使用,并且能够从供应商那里得到。USB总线提供真正的即插即用性能使得这种情况得以改变。USB总线成为主机同时和各种可用外设的事实上的未来标准,这些外设共享由主机预先设定的,基于令牌的协议USB带宽。USB总线集成电脑电话集成,消费,生产等应用,最初被指定为PC架构的工业标准的扩展,并且,和很多其他形式的计算机总线不同,USB总线允许当主机和其他外设运行时,连接、配置、使用、断开外设。USB的主要特点(和串行口数据传输相比有显著的优点)如下:l 设备能够自动识别和配置l 支持外设“热拔插”l 符合标准的即插即用架构l 支持主从之间传输大量数据和信息流l 协议支持采用缓冲区处理的流控制随着个人电脑技术的发展,越来越多的个人电脑不配备ISA插槽,另一不利的因素在于ISA连接器的位置:它们在个人电脑机箱的内部,必须打开机箱,拧下固定螺钉,把板卡准确的插入插槽中,然后重新组装系统。由于在机箱内部,使得电磁干扰(EMI)状况更加复杂,对电源的要求也更高。所有这些方面使得我们需要建立一个USB-ISA桥接器,来连接总线和包括 A/D,D/A,DI/DO的ISA扩展卡。2. USB控制芯片及其架构2.1 USB控制芯片当工程中需要选择一个USB控制器时,可以有很多芯片可以选择,诸如Philips公司的PDIUSBD系列,美国国家半导体公司的USBN9602,另外还可以选择集成USB控制器的微控制器,如Microchip半导体公司的PIC微控制器PIC18F4550,Cypress半导体公司的EZ-USB系列和enCoRe II系列,Freescale半导体公司的MC68H08系列。和其他涉及嵌入式系统的工程一样,最终方案取决于芯片的性能,价格,有效性,和是否易于开发。因为USB协议十分复杂,每个USB设备必须有能够执行USB协议的智能化程度。设备要能够检测和应答USB设备的请求信号以及USB端口的其他事件,并提供总线要发送的数据,和检索总线接收的数据。Cypress半导体公司的EZ-USB AN2100系列芯片把USB外设接口封装在一个紧凑的集成电路中。它提供了一个USB软处理方式(基于RAM),无限制配置,可升级,提供完整的USB数据吞吐量。使用EZ-USB器件进行设计,没有端点数目,缓冲区大小和传输速度的限制。最重要的是,芯片的EZ-USB内核的USB独立性很高,简化了代码,加速了USB的学习过程。图1Cypress EZ-USB架构如图1所示,集成USB收发器和USB总线引脚的D+和D-。串行接口引擎(SIE)对串行数据进行编、解码,进行出错的更正,位填充以及其他的USB信号细节请求.最终和USB接口之间收发字节数据。内置的微处理器是具有较高执行速度和其他附加特性的增强型的8051,它使用内部RAM来存储数据和程序,为EZ-USB系列提供软解决方法。EZ-USB系列使用增强型的SIE/USB接口(称为USB核心),它在8051核之前,本身具有作为一个完整的USB设备的全部功能。增强型的8051内核自动执行很多USB协议,简化了8051代码。另外,24个IO引脚包括16位地址总线和8位数据总线,用来进行扩展外部存储器。可以使用一种快速传输方式直接进行外部逻辑和内部USB FIFO存储器之间的数据传输。快速传输方式,和大量端点资源,使得EZ-USB系列支持的数据传输带宽超过USB协议V1.1版中要求的最大值。3 ISA-USB桥接器的硬件设计我们将展示把一个数据采集卡从ISA总线转移到USB总线的ISA-USB桥的设计。这个传输电路需要完成以下功能:l 当外设要求数据格式转变成ISA形式时,从主机接收USB格式的数据,并传送到数据采集卡。l 当数据包符合USB协议时,接收数据采集卡发来的数据,并传送到主机。这个12位的ISA数据采集卡,提供16路模拟输入,1路模拟输出,24路数字I/O口。这个ISA-USB桥接器通过USB微控制器的固件,从主机接收并传输命令信号,以控制ISA外围采集卡。整个电路包括Cypress EZ-USB AN2131Q 、电源、传输模块、USB固件下载电路和USB外部唤醒电路,晶体振荡电路和总线结点。图2 EZ-USB AN2131Q固件下载电路第一,当EZ-USB出现复位时,EZ-USB内核根据,I2C总线上的外部EEPROM决定怎样运行。第二,一旦8051核运行,它可以访问I2C控制器,作为一般用途。这个特点使得EZ-USB可以使用很多标准的I2C外设。数据采集卡占用8根数据总线和10根地址总线,采用DM74LS373对低8位地址和数据总线分时复用。3.1 ISA-USB桥接器的软件设计A桥接器的固件架构对于开发基于EZ-USB的外围设备,可以采用很多已有EZ-USB程序,提供了用于初始化EZ-USB,执行USB设备的标准请求以及在USB控制器挂起期间进行电源管理的8051代码。剩下的唯一需要做的事就是USB逻辑架构和功能的描述。固件程序结构执行USB外设请求的基本功能。通过把代码和Anchor提供的钩子相连接,使得我们能够开发功能完备的USB设备,框架执行一个简单的循环任务,程序开始,初始化所有内部声明的变量,然后调用用户初始化函数TD_Init(),根据返回值初始化USB接口到未配置状态并使能中断。然后开始延时,直到接收到端点0的SETUP包。一旦检测到SETUP包 ,程序框架开始调度交互式任务。任务分配器按预先设定的顺序重复执行以下任务。*调用用户函数TD_Init();*确定标准设备请求是否被挂起,如果有,分析接收到的命令并做出相应的应答。默认地,对于给定的标准请求,会作出USB定义的应答。但是,程序框架同时提供了连接到分析器的钩子,允许采用用户代码来处理指定的设备请求。*确定USB内核是否报告了一个USB挂起事件。如果有,则调用用户函数TD_Suspend()。根据返回值来检测简单事件,如果没有检测到,则会将处理器置挂起状态;如果检测到了,则调用TD_Resume(),然后继续执行第三步。B请求命令函数固件程序框架采用Keil C51编译器和相应工具编写,提供了接口函数,以简化用户代码的编写。为了通过EZ-USB进行控制传输,固件程序框架定义了B1和B2两个请求,这种请求能够被添加在头文件EZUSB.h的宏定义识别。如下所示:#define SC_ISAWrite0xB1#define SC_ISAWrite0xB2这两个子函数在主程序FW.c中相应的请求函数SetupCommand()中,如下所示:BOOL DR_ISAWrite(void) /Send Data to ISA portBOOL DR_ISARead(void) /read Data from ISA port子函数的主要部分简述如下:Unsigned char aah,aal,cc;aah=SETUPDAT1;aal=SETUPDAT2;cc=SETUPDAT3;OUT0BUF0 = 0XB1;OUT0BC = 1;OEA = 0XFF;OEB = 0XFF;OEC = 0XFF;OUTC = 0XFF;OUTB = 0X30;OUTA = aal;OUTB = 0X30&aah;OUTC = 0XEF;OUTA = cc;OUTB = 0X70;OUTC = 0XFF;EP0CS |= bmBIT1;return(TRUE);BOOL DR_ISARead(void) unsigned char aah,aal,cc;aah=SETUPDAT3; aal=SETUPDAT2;cc=0x20; /write the control word 0x20ISA_Write(aah,aal+4,cc);cc=0x00; /Select the CH00ISA_Write(aah,aal,cc);cc=0x00; /Start tranISA_Write(aah,aal+1,cc);cc=ISA_Read(aah,aal+1); /Judge the finished bitif(cc&0x80)=0x80) aah=0x02; aal=0x82; IN0BUF0=ISA_Read(aah,aal+2); aah=0x02; aal=0x83;IN0BUF1=ISA_Read(aah,aal+3); EP0CS |= bmBIT1;return(TRUE);C.桥接器的WDM驱动程序硬件驱动程序是使应用程序访问硬件设备的软件组件。硬件驱动程序使用户使用的应用程序不必了解跟设备通信的硬件的物理连接,信号和协议等。硬件驱动程序将应用层的程序翻译成描述硬件细节的代码。应用程序使用操作系统支持的函数和硬件驱动程序通信。硬件细节代码处理需要访问外围电路的协议部分,这些协议包括检测状态信号的状态,在适当的时间反转控制信号等。WDM驱动程序是一种即插即用的驱动程序,它还涉及电源管理协议,和Win98,Win2000具有可靠的兼容性。USB设备的WDM驱动程序采用分层驱动程序模块(如图所示),其中第一个驱动模块完成一部分通信功能。因为具有通信任务的硬件在完成这些任务的过程中会用到相同的驱动程序,所以把通信分层能够提高效率。顶层包含一个管理应用程序和较低层总线驱动程序的驱动函数,这个函数包含使硬件正常工作的所有结节。它负责初始化IO操作,处理当IO操作完成时出现的中断,提供一种用户对设备进行各种合理控制的方式。底层包含管理客户机驱动和硬件进行通信的总线驱动。客户机驱动程序与总线驱动程序之间可能存在一个或多个过滤器驱动程序,较高层的过滤器驱动能够监控和修改应用程序和客户机驱动之间的通信,较低层的过滤器驱动能够监控和修改客户机驱动和总线驱动之间的通信。EZ-USB通用驱动程序是一种能够用来和基于EZ-USB的外设进行联接的通用设备驱动程序。驱动程序为普通的USB设备请求和数据传输提供了一种用户方式接口。并且为USB设备驱动开发提供了示例代码。作为USB驱动开发的起点,我们可以用这个通用USB驱动程序开发常规或小型的驱动程序。USB设备驱动是通过VID(Vendor ID,供货商ID)和PID(Product ID, 产品ID)来加载的, VID和 PID作为设备描述符的一部分传递到Windows,Windows用VID/PID在INF文件中找到适当的设备驱动程序Windows的INF文件在设备第一次连接到操作系统时,把VID/PID及其指定的驱动程序联系起来。随后,这些信息存储到注册表中,使得以后进行设备连接时速度更快且不需要用户参与。下面是INF文件的一部分:Cypress%USBVID_0547&PID_2131.DeviceDesc%=EZUSB.Dev, USBVID_0547&PID_2131EZUSB.Files.Extezusb.sysEZUSB.Files.Infezusbw2k.InfStringsCypress=Cypress SemiconductorUSBVID_0547&PID_2131.DeviceDesc=CypressEZ-USB (2131Q/2131S/2135S) - USB-ISAEZUSB.SvcDesc=Cypress General Purpose USB Driver(ezusb.sys)所有访问EZ-USB通用驱动程序的用户方式都是通过I/O控制来调用的。首先,应用程序通过调用Win32函数CreatFile()来获得一个设备驱动程序句柄,然后通过CreatFile()函数返回的句柄调用DeviceIoControl()来提交IO控制代码,并联接输入缓存和输出缓存。EZ-USB通用驱动程序能够和多个EZ-USB设备进行通信,它为每个连接到主机的EZ-USB设备创建一个动态连接,动态连接的形式为ezusb-i,其中i是从0开始的索引号。在调用CreatFile()获取设备驱动程序句柄时会用到这个动态连接号。CreatFile()真正做的就是获取设备驱动程序为设备对象创建的句柄。下面这个代码示例展示了如何获取EZ-USB设备eausb-0的句柄。HANDLE DeviceHandle;DeviceHandle = CreateFile(.ezusb-0,GENERIC_WRITE,FILE_SHARE_WRITE,NULL,OPEN_EXISTING,0,NULL);用户方式应用程序用Win32函数DeviceIoControl()向设备驱动程序发送请求。下面的代码实例展示了如何向EZ-USB通用驱动程序提交请求,来读取USB设备描述符。它使用了CreatFile()返回的设备句柄。bResult = DeviceIoControl (HANDLE DeviceHandle,DWORD dwIoControlCode,LPVOID lpInBuffer,DWORD nInBufferSize,LPVOID lpOutBuffer,DWORD nOutBufferSize, LPDWORD lpByteReturned,LPOVERLAPPED lpOverLapped,);IO控制代码dwIoControlCode及其相应的输入输出结构定义在头文件EZUSBSYS.H中。标准的USB结构定义在WDM DDK提供的USB100.H文件中。IOCTL_EZUSB _VENDOR_OR_ CLASS_REQUEST在ISA驱动中用来向控制端点发送指定的供货商或设备类请求。D动态链接库动态链接库(DLL)是一种担当共享函数库角色的可执行文件。若一个函数不是进程本身可执行代码的一部分,动态链接库为进程提供了一种调用这个函数的方法,DLL中包含了一个或多个为使用他们的进程编译,链接,存储的函数,这些函数的可执行文件位于DLL中。DLL使共享数据和资源变得更容易。多个应用程序可以同时访问内存中单独一份DLL的内容。用动态链接替代静态链接有几个优点。DLL节省内存,减少了数据交换,节省磁盘空间,程序升级更加方便,提供售后支持,提供一种扩展MFC类库的机制,支持多语言程序,易于创建国际版本。DLL中包含一个输出列表,这个输出列表中有DLL输出到其他可执行文件的每个函数的名字,这些函数都可以被其他可执行文件访问,是DLL的入口。DLL中的任何其他的函数都是DLL私有的,外部可执行文件不能访问。DLL可以采用两种方法输出函数:*创建一个模块定义文件(.def文件),创建DLL时用这个文件。采用这种方式从DLL输出函数是按顺序而非名称。*使用函数定义中的关键字_declspec(dllexport)。输出函数的主要接口Output()和Input()是像下面这样定义的:extern C int _stdcall Outp(int address,int content) HANDLE hDriver=NULL;hDriver=hOpenDevice(); if(!hDriver) return 0;if(!VendorOutCmmd(hDriver,address,content)return 1;if(!CloseDevice(hDriver) return 2;return 3; extern C int _stdcall Inp(int address) HANDLE hDriver=NULL; hDriver=hOpenDevice(); if(!hDriver) return 0; if(!VendorInCmmd(hDriver,address) return 1; if(!CloseDevice(hDriver) return 2; return 3;上面中的函数VendorOutCmmd()和VendorInCmmd()向ISA总线传送读写请求的,这两个函数都与VendorCmmd()函数相同。
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 人大硕士考试题库及答案
- 梯形课件简介图
- 梭伦改革选修课件
- 桥面防腐知识培训内容课件
- 2025年继电保护员中级考试知识点梳理与复习计划
- 2025年初入IT行业软件开发工程师技术面试模拟题集及答案解析
- 2025年护师考试完整版试题及答案
- 2025年能源行业后勤集团工程总监竞聘面试模拟题及解析
- 桥梁三维建模知识培训课件
- 2025年碳足迹评价师专业题库高级篇
- 普通心理学第六版PPT完整全套教学课件
- 员工个人职业健康监护档案
- 《护理伦理学》教学大纲
- 老年学概论(第3版)PPT完整全套教学课件
- (完整版)Hamilton汉密尔顿焦虑量表
- 检验科实验室安全应急预案
- 浙江大学高分子化学第章课件绪论
- 景观生态学课件
- 教育教学理论试题与答案
- 净化装饰与机电安装工程URS
- 丁苯橡胶乳液聚合生产工艺
评论
0/150
提交评论