基于1394b总线仿真设备的WDM驱动开发

时间:2016-10-15来源:网络

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内部通信速率由逻辑控制完成。

基于1394b总线仿真设备的WDM驱动开发

FPGA逻辑功能框如图2所示,FPGA逻辑对PCI/PCIe总线协议和1394b总线进行协议封装以及协议解析;对内存空间,IO空间以及中断号等进行划分;对操作寄存器进行定义;对发送数据的DM口,接收数据的GRF口进行控制;开放LINK和PHY的软件访问权限,便于实现远程访问功能;对DPRAM进行双口切换操作,以保证数据通信的可靠性;设计退避算法防止总线竞争失败数据丢失;支持DMA操作,实现通信的实时性。

基于1394b总线仿真设备的WDM驱动开发

2 驱动设计

驱动程序是硬件厂商根据硬件工作环境的操作系统编写的配置文件,其运行于操作系统内核态,是设备与计算机交互的桥梁,它把硬件的功能告诉操作系统,同时也将系统

的指令传达给硬件。驱动软件分为软件驱动和硬件驱动。软件驱动是把工作最终交给CPU处理,对CPU依赖性比较高,对操作系统影响比较大;而硬件驱动能够最大化的避免CPU的调度,提高硬件资源的利用率、增加传输的实时性、减少设备对计算机的依赖性等。

本设备驱动程序采用硬件驱动,开发工具为DDK(Device Development Kit),调试工具为Debug view,其工作流程如图3所示。

基于1394b总线仿真设备的WDM驱动开发

由于Windows是多任务非实时的操作系统,每个进程占用处理器的时间应小于50微秒,如果需要长时间的硬件访问应采用系统线程的方法,本设计采用三余度三个内核线程对数据处理用以保证访问的准确性。由于该设备硬件的快捷性和软件的延时性,并且突发大数据量传输发生概率比较高。所以驱动程序在发送模块上使用了乒乓原理,在接收模块使用了循环队列,保证数据能够平滑的通信,在突发大数据量操作时保证了数据的完整性和确定性。由于中断函数(wdmISR)的系统优先级最高,其工作占用CPU资源能够影响到整个系统的运行,所以中断需尽可能的简短、尽可能避免使用浮点操作、尽可能的将处理移交给任务处理。所以设计了中断延时处理函数DPC(Deferred Procedure Call)对系统进行资源合理利用保证通信的有效性。中断服务程序功能框图如图4所示。

基于1394b总线仿真设备的WDM驱动开发

串行处理:为了提高硬件资源利用率以及设备工作的安全性。本设备设计为三余度(两个余度为主节点,一个余度为备用节点)一体设备,三节点能够独立进行工作。1394b总线协议允许发送物理层包访问远程节点,并且能够通过远程访问包对设备节点进行远程控制。所以当任意一个主节点出现故障,备用节点可以通过远程命令断开故障主节点,从而启用备用节点,增加设备运行的安全性。

单功能多设备的运行对驱动程序而言每个设备都有自己的内存空间、I/O空间以及中断号,运行互不影响。软件对硬件的操作,在串行处理方面只需要对操作进行排队处理,就能够避免软件对硬件的并行操作。而三余度多功能多样性设备的运行对驱动而言,使用的可能有很多的共享资源(如DMA等资源),并且软件对3个余度的操作有可能是并行的,驱动软件设计在节点间共享资源进行加锁处理保证通信的独立性及确定性。

串行处理能够有效的避免资源访问冲突,能够以不同优先级级别控制各个功能,能够以不同频率控制各个功能,有效的提高了软件对硬件操作的安全性。该驱动设计了节点间公共资源访问设置互斥信号量(KeWaitForMultipleObjects),只有信号的拥有者才能释放信号量。同时设计了保护节点内共享资源的保护措施,如中断挂接IoCionnect Intei Tupt函数下的自旋锁。对上层操作进行堆栈处理,保证操作的有效性,并且对该操作进行风险评估(如对链路层操作可能影响设备收发数据操作),达到对硬件的全面保护。

内核线程:由于该设备应用于通信方面,突发性大数据量传输发生率比较高,而windows环境下每个进程占用处理器的时间应小于50微秒,所以该驱动在PNP(Plug and Play)

为每个节点设置一个线程(PsCreateSvstemThread)对突发的大数据量数据进行平滑处理,以保证数据平稳的交由上层,该线程为事件驱动类型。并且通过KeCetCurrentThread和KeSetPriorityThread调整线程优先级。

当中断发生,中断处理函数记录中断状态并清除中断,判断中断是否为空,如果不为空则通过IoRequestDpc请求DPC,同时把相应的中断状态传给DPC。DPC通过中断状态判断中断类型和发生中断的节点,并且置位对应线程的线程事件。线程触发后,从阻塞态变为就绪态,当该进程得到处理器资源,调用数据处理函数处理数据。

DMA:Windows是多任务非实时的操作系统,而DMA可以有效的避免CPU的调度而节省时间,提高设备的实时性。系统要求DMA的使用率尽可能的减少并且尽可能的快捷。本设计使用硬件侧DMA,由FPGA逻辑实现,DMA控制由驱动控制。

驱动软件对DMA进行初始化,当中断服务程序被调用,驱动程序根据DPRAM的0、1区标志获取新数据存放区域,并从该区获取新数据的刷新标记。如有新数据,则服务程序申请DMA资源,获取到DMA资源后,锁定DMA资源并启动(DMA源地址、目的地址、数据搬运长度、控制命令)I/O端口到主存区的DMA。DMA完成后上报完整中断并释放DMA资源。当上层调用IRP_MJ_DEVICE_CONTROL对DPRAM进行写操作时,驱动程序判断用户该次操作的DPRAM的内存大小,如果在32K~2048K字节之间,则启动主存区到I/O端口的DMA,如果大于则分次启动DMA,如果小于32K字节则单拍或者多拍操作。操作流程与启动接收DMA相同,操作完成则上报中断。

循环队列:快捷性是硬件的特性之一,而应用层相对于硬件是及其缓慢的。并且由于PCI数据包封包的影响,其总线实际带宽只有133 Mbps/s,而本1394b设备支持S100Mbps

和S400Mbps两种传输速率。所以为避免设备长时间工作带来内存递增、内存泄漏以及突发大数据量给PCI总线通信超负荷运转造成数据丢失现象,驱动利用IoAllocateMdl申请一块3M的内存区,供硬件软件交互循环利用的循环队列用以保证传输的有可靠性,以及安全性。

当中断服务程序被调用时,驱动启动DMA或者读写寄存器操作把数据从指定DPRAM区搬运到主存区,更新新的数据指针并通过软中断方式通知上层软件。上层软件通过Deviee IoCo ntrol对设备进行控制,当应用层对驱动进行操作时,驱动根据写指针与读指针的差值提供可操作的内存块给上层软件。

乒乓原理:乒乓原理不仅能够提高带宽的利用率,并且能够有效避免硬件与软件操作冲突情况的出现,并且避免了资源访问冲突的重试耗时,提高传输的有效性、实时性。驱动收发模块乒乓操作如图5和图6所示。

基于1394b总线仿真设备的WDM驱动开发

发送模块中,驱动软件与应用层交互,采用两块地址内存区。内存块操作由用户层软件操作,操作完成后切换内存区并通知驱动最新数据存放位置。驱动软件与硬件交互也采用两块DPRAM区。DPRAM的0、1区的切换操作由驱动软件进行操作,数据更新完毕的DPRAM交由逻辑处理并进行换区操作。

接收模块中,驱动软件设计循环队列与上层软件进行交互。硬件与驱动软件交互同样采用乒乓原理,该操作由硬件逻辑操作,驱动软件根据最新数据存放的DPRAM区,以及消

息新旧标记来进行数据处理。处理完成后完成数据新旧标志切换,并软中断方式通知应用层有新数据到达,应用层驱动返回的地址指针和内存大小获取最新数据。

3 验证分析

本设备提供DLL(Dynamic Link Library),采用Microsoft Visual Studio 2008专业版开发,封装为标准的动态链接库。提供Demo程序,图7为CC(Control computer)的发送数据窗口测试图,图8为RN(Remote Node)的接收数据的窗口测试图。

基于1394b总线仿真设备的WDM驱动开发

由上图可见驱动程序实现了1394b的S400 Mbps速率和PCI的S133 Mbps速率的跨速率通信数据不丢失,避免了软硬件交互产生的误码,使在S100 Mbps通信速率下平均带宽达到79.2 Mbps,在S400Mbps通信速率下平均带宽达到231.7 Mbps,实现了数据延时控制在us级别,实现了操作的准确性,保证了数据传输的确定性。

4 结束语

自2011年中国面临着国外大规模技术转移封锁以来,国内自研设备百花齐放,尤其是软件硬化无疑已经成为焦点。作为硬件灵魂的驱动程序越来越受到人们的重视。本文根据软硬件的特性进行软硬件工作协调,提高了硬件资源的利用率,提高了仿真通信的实时性,确定性,可靠性。由于需求要求该设备为PCI总线设备,通信的带宽受到限制,所以准备利用PCIe总线和实时操作系统提高设备的通信带宽。

关键词: 串行处理 DMA 循环队列 乒乓原理

加入微信
获取电子行业最新资讯
搜索微信公众号:EEPW

或用微信扫描左侧二维码

相关文章

查看电脑版