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个外设的能力使系统具有很强的单体扩展能力,而且支持多个单体同时工作
主机程序主要用于发送用户命令和参数,接收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个外设的能力使系统具有很强的单体扩展能力,而且支持多个单体同时工作
USB 仿真 触摸屏 总线 显示器 电路 Cypress 收发器 电流 电压 电容 电阻 Keil PXI 相关文章:
- 用电子技术最大化太阳能电池板输出功率(05-18)
- 2009视频监控:网络化及其推动的几大趋势(06-03)
- 与MSP430 USI端口配合使用ADS8361(06-18)
- 辰汉电子推出低成本快速量产视频监控方案+4路输入方案(06-24)
- 用于风力发电设备的连接器的简易安装与维护(06-21)
- 解读USB-IF电池充电规范(10-27)
