微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 模拟电路设计 > 基于USB的ARINC429总线接口模块设计

基于USB的ARINC429总线接口模块设计

时间:07-15 来源:世界电子元器件 点击:
USB固件程序设计

  USB接口芯片是底层硬件的基础,是接口模块与PC机通信的硬件桥梁,良好的USB固件程序设计是接口模块能够稳定可靠工作的保证。USB固件程序设计结构如图5所示。

  USB固件程序设计由主程序(Main.c),写数据程序(Function.c),读数据中断服务子程序(Isq)以及控制传输(Vendor)等四部分组成。

  主程序Main.c主要负责USB接口芯片的初始化工作。主要有端口的初始化、中断的初始化、USB设备的列举和重列举等工作。Main.c的设计结构如图6所示。

  写数据程序Function.c采用了USB接口芯片CY68013数据总线操作方式,将图3 Buffer中的ARINC429数据字写到FPGA的RAM中。
  
  读数据中断服务子程序(Isq)主要负责接口模块读取ARINC429总线数据,并根据USB接口芯片的中断引脚来标记429数据字的通道号。

  控制传输(Vendor)主要是灵活地控制接口模块的发送模式。接口模块共有单次发送、多次发送以及循环发送等三种发送模式。三种发送模式可以满足多种ARINC429数据发送需要。其中,多次发送模式和循环发送模式可以设定ARINC429数据字与数据字之间的字间隔,并可以设定一组ARINC429数据字的循环周期。这种设计方式体现了接口模块的灵活方便特性。

  USB设备驱动程序设计

  USB设备驱动程序是利用Compuware公司的DriverStudio 3.2开发的。DriverStudio 3.2主要用来开发Windows 2000和Windows XP的驱动程序。利用这个工具的开发向导,可以生成一个USB驱动程序框架。USB驱动程序设计简化结构如图7所示。

  USB设备驱动程序基本由五部分组成,图4中显示了四部分。入口例程(DriverEntry Routine)、即插即用例程(PnP Routine)和卸载例程(Unload Routine)主要负责接口模块的内存资源分配和释放等工作。下面将详细介绍与接口模块数据传输关系紧密的分发例程(Distribute Routine)。

  分发例程主要由Create,Read,Write,IOCTL以及Close等五部分函数组成。Close函数主要负责关闭设备句柄,调用卸载例程,并释放设备内存资源(这个函数在图中并未列出)。其它四部分与上层应用程序的接口函数分别为CreateFile,ReadFile,WriteFile和DeviceIoControl。

  Create函数主要负责获取对接口模块进行操作的程序句柄,该句柄在即插即用例程中指定。

  Read函数负责读ARINC429数据。当应用程序通过调用ReadFile发一个IRP到驱动程序时,驱动程序先检测读取数据长度是否大于已设定的端点传输最大字节。如大于,则仅分配长度为最大字节的内存空间;如小于或等于,则按该数据长度分配内存区。然后USB设备驱动程序再将此IRP向下传递给下层驱动程序,最后由底层驱动程序将ARINC429数据写到已分配的内存空间供应用程序读取,并返回一个函数值和已读取多少字节的变量给应用程序判断。Write函数操作与Read函数类似,只是传输方向相反。

  IOCTL函数负责接口模块的控制命令传输。当需要指定接口模块发送模式或循环发送时的字间隔和帧周期时,应用程序通过调用DeviceIoControl发一个IRP给驱动程序。驱动程序收到此IRP时,将通过USB控制管道把接口模块控制命令传输给USB接口芯片。

  结论

  经测试表明,接口模块与现在市场上出售的多种429总线接口设备进行了多路429总线数据传输。本设计利用USB即插即用、FPGA可配置性等特点,方便了ARINC429总线与计算机之间的数据传输,并提高了接口模块数据传输的灵活性,这在对ARINC429电子设备的测试中有较高的实用价值。

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

网站地图

Top