基于1394b总线仿真设备的WDM驱动开发
IEEE-1394b总线协议具有实时性、可靠性、确定性等特性,这些特性使其在点对点通信方面表现突出。IEEE-1394b作为F22猛禽战机的总线,同时也使用在F35、NASA的航天飞机上以及DV设备上。而总线的仿真验证设备需要图形化的界面软件,这就要求其工作环境支持PC机环境。作为硬件与软件桥梁的驱动程序主要工作是保证软硬件协调工作,提供安全简单的操作接口,保证通信数据的可靠性、实时性、确定性等。
1 硬件系统简介
图1是以Xilinx的V6系列的FPGA为核心的硬件框图。该设备具有3个余度,并且三余度之间能够独立工作,互不影响。硬件采用三路Link和PHY芯片,三路独立供电。由于仿真设备运行的环境的封闭性,从而设计软件和硬件两种供电控制开关。软件电源控制信号由FPGA控制可编程的电源控制芯片来远程控制设备。设备供电无需外接电源,直接利用PC机的PCI或者PCIe总线插槽供电,硬件提供电源管理系统进行电压转换。该设备支持速率S100Mbps和S400Mbps,硬件提供S100Mbps和S400Mbps端口速率切换按钮,FPGA内部通信速率由逻辑控制完成。
FPGA逻辑功能框如图2所示,FPGA逻辑对PCI/PCIe总线协议和1394b总线进行协议封装以及协议解析;对内存空间,IO空间以及中断号等进行划分;对操作寄存器进行定义;对发送数据的DM口,接收数据的GRF口进行控制;开放LINK和PHY的软件访问权限,便于实现远程访问功能;对DPRAM进行双口切换操作,以保证数据通信的可靠性;设计退避算法防止总线竞争失败数据丢失;支持DMA操作,实现通信的实时性。
2 驱动设计
驱动程序是硬件厂商根据硬件工作环境的操作系统编写的配置文件,其运行于操作系统内核态,是设备与计算机交互的桥梁,它把硬件的功能告诉操作系统,同时也将系统
的指令传达给硬件。驱动软件分为软件驱动和硬件驱动。软件驱动是把工作最终交给CPU处理,对CPU依赖性比较高,对操作系统影响比较大;而硬件驱动能够最大化的避免CPU的调度,提高硬件资源的利用率、增加传输的实时性、减少设备对计算机的依赖性等。
本设备驱动程序采用硬件驱动,开发工具为DDK(Device Development Kit),调试工具为Debug view,其工作流程如图3所示。
由于Windows是多任务非实时的操作系统,每个进程占用处理器的时间应小于50微秒,如果需要长时间的硬件访问应采用系统线程的方法,本设计采用三余度三个内核线程对数据处理用以保证访问的准确性。由于该设备硬件的快捷性和软件的延时性,并且突发大数据量传输发生概率比较高。所以驱动程序在发送模块上使用了乒乓原理,在接收模块使用了循环队列,保证数据能够平滑的通信,在突发大数据量操作时保证了数据的完整性和确定性。由于中断函数(wdmISR)的系统优先级最高,其工作占用CPU资源能够影响到整个系统的运行,所以中断需尽可能的简短、尽可能避免使用浮点操作、尽可能的将处理移交给任务处理。所以设计了中断延时处理函数DPC(Deferred Procedure Call)对系统进行资源合理利用保证通信的有效性。中断服务程序功能框图如图4所示。
串行处理:为了提高硬件资源利用率以及设备工作的安全性。本设备设计为三余度(两个余度为主节点,一个余度为备用节点)一体设备,三节点能够独立进行工作。1394b总线协议允许发送物理层包访问远程节点,并且能够通过远程访问包对设备节点进行远程控制。所以当任意一个主节点出现故障,备用节点可以通过远程命令断开故障主节点,从而启用备用节点,增加设备运行的安全性。
单功能多设备的运行对驱动程序而言每个设备都有自己的内存空间、I/O空间以及中断号,运行互不影响。软件对硬件的操作,在串行处理方面只需要对操作进行排队处理,就能够避免软件对硬件的并行操作。而三余度多功能多样性设备的运行对驱动而言,使用的可能有很多的共享资源(如DMA等资源),并且软件对3个余度的操作有可能是并行的,驱动软件设计在节点间共享资源进行加锁处理保证通信的独立性及确定性。
串行处理能够有效的避免资源访问冲突,能够以不同优先级级别控制各个功能,能够以不同频率控制各个功能,有效的提高了软件对硬件操作的安全性。该驱动设计了节点间公共资源访问设置互斥信号量(KeWaitForMultipleObjects),只有信号的拥有者才能释放信号量。同时设计了保护节点内共享资源的保护措施,如中断挂接IoCionnect Intei Tupt函数下的自旋锁。对上层操作进行堆栈处理,保证操作的有效性,并且对该操作进行风险评估(如对链路层操作可能影响设备收发数据操作),达到对硬件的全面保护。
内核线程:由于该设备应用于通信
- 可编程图形芯片进入并行计算领域(06-06)
- Linux嵌入式系统开发平台选型探讨(11-09)
- CDMA2000基带信号发生器的FPGA+DSP实现(05-29)
- DSP中DMA操作的无阻塞请求实现(06-18)
- DSP嵌入式视频监测(06-02)
- 基于VxWorks的系统故障快速恢复设计(01-12)