微波EDA网,见证研发工程师的成长!
首页 > 应用设计 > 工业电子 > USB技术在情报指挥系统维修模拟器中的应用

USB技术在情报指挥系统维修模拟器中的应用

时间:07-25 来源:互联网 点击:
4、 主机程序  
  
主机程序主要用于发送用户命令和参数,接收USB设备的运行状态和处理结果。本系统的主机程序用VC++6.0编写实现,因为采用的是控制传输,用到的主要函数是CreateFile()和DeviceIoControl()。前者用于获得设备句柄,其本质是先由设备驱动器生成一个句柄,然后将这个句柄分配给外设。获得设备句柄后,用DeviceIoControl()对设备进行读写。主要程序代码如下:  

DeviceHANDLE=CreateFile("\\\\.\\ezusb-0",  
  GENERIC_WRITE,  
  FILE_SHARE_WRITE,  
  NULL,  
  OPEN_EXISTING,  
  0,  
  NULL);  
If (DeviceHANDLE==INVALID_HANDLE_VALUE)  
MessageBox("无法创建设备","Information Box",MB_OK|MB_ICONINFORMATION);  
else  
bResult=DeviceIoControl(DeviceHANDLE,  
IOCTL_EZUSB_VENDOR_OR_CLASS_REQUEST,  
&myrequest,  
sizeof(VENDOR_OR_CLASS_REQUEST_CONTROL),  
returndata,  
n,  
&nBytes,  
NULL);  
在本系统中,主机发送给外设最多的是VENDOR_OR_CLASS_REQUEST_CONTROL类型的请求,其结构定义如下:  
typedef struct _VENDOR_OR_CLASS_REQUEST_CONTROL  
{  
UCHAR direction; //传输方向,0为主机到设备,1为设备到主机  
UCHAR requestType; //请求类型,0为用户,1为类  
UCHAR recepient; //接收者类型,0为设备,1为接口,2为端点,3为其他  
UCHAR requestTypeReservedBits;   
UCHAR request;   
USHORT value;   
USHORT index;   
};  
  
其中后四个参数分别对应于设备请求命令的bRequestType、bRequest、wValue和wIndex(具体定义参考文献[1]),因为发送的是用户自己的设备请求命令而非标准设备请求命令,所以bRequestType的值可设为0;且bRequest的值不能与标准设备请求命令的bRequest值相冲突;双字节的value和index可用来传递主机给USB设备的参数。  

5、 驱动程序  
  
要实现USB设备的固件下载和重枚举需要编写两个驱动程序,通用驱动(GPD)和固件装载驱动。前者完成主机与外设的通信和控制,一般不用重新编写,可直接采用Cypress公司提供的ezusb.sys。后者负责在外设连到主机时将正确的驱动程序装载到AN2131QC的RAM中,完成对外设的重新设置。主机根据新的设置安装通用驱动,重新枚举外设为一个新的USB设备。固件装载驱动的开发过程如下:  

(1)新建一个目录dev_io,将Cypress\usb\drivers\ezloader目录下的文件复制到该目录下。  
(2)打开该目录下的sources文件,将TARGETNAME=ezloader改为TARGETNAME=dev_io。  
(3)利用hex2c将dev_io.hex转换为dev_io.c: hex2c dev_io.hex dev_io.c  
(4)将fireware.c中的fireware[]数组用dev_io.c中的fireware[]数组替换。  
(5)进入C:\NTDDK\BIN目录,在命令行方式下键入SETENV C:\NTDDK回车,此时显示设置环境完成,然后返回dev_io运行BUILD –c,这时会在dev_io\lib\i386\free或checked目录下生成我们需要的固件装载设备驱动程序,将该驱动程序复制到c:\windows\system32\drivers目录下。  
(6)为了使该驱动程序正确工作,必须为它写一个安装信息文件,即.inf文件。它将设备的VID和PID绑定到特定的设备驱动程序上。可仿照开发包提供的inf文件编写,具体步骤参见文献[5]。  

6、结束语  
  
本文从工作原理、硬件设计、固件程序、主机程序和驱动程序五个方面系统论述了情报指挥系统维修模拟训练器中USB接口开发的全过程,并给出了基于控制传输的USB系统设计方法,为今后的维修模拟训练系统开发提供了一种规范、快捷的接口设计方法。  
  
本文的创新观点主要有两点:1、与传统的VXI、PXI等总线相比,在情报指挥系统维修模拟训练器中采用USB总线作为仿真单体和单体计算机之间的接口能简化硬件,即插即用,使仿真单体具有便携能力。2、USB接口支持多达127个外设的能力使系统具有很强的单体扩展能力,而且支持多个单体同时工作

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top