基于PCI Express總線(xiàn)的雷達數據記錄器驅動(dòng)程序開(kāi)發(fā)
在數據采集系統中,大量的數據必須通過(guò)總線(xiàn)傳到計算機內存中,傳統的PCI總線(xiàn)越來(lái)越不能滿(mǎn)足人們對帶寬增長(cháng)的需要。為解決這一矛盾,PC行業(yè)協(xié)會(huì )和外設廠(chǎng)商一起發(fā)布了PCI Express總線(xiàn)[1]規范,并且于2004年在標準臺式機上得到應用。該技術(shù)可以有效地提高設備至計算機內存的數據傳輸速率。相對于PCI總線(xiàn),它最大的特點(diǎn)是實(shí)現點(diǎn)到點(diǎn)的數據傳輸[2],每個(gè)設備有自己專(zhuān)用的雙向數據通道,數據以包的形式串行傳輸,每個(gè)通道具有單方向250MB/S的數據傳輸速度。多個(gè)通道可以組合在一起形成x1(單通道)、x2、x4、x8、x12、x16和x32的信道以提高帶寬。
在合成孔徑雷達系統中,大量的回波數據需要實(shí)時(shí)記錄下來(lái)以便進(jìn)行事后成像處理。而PCI Express總線(xiàn)高帶寬的優(yōu)點(diǎn)可以很好的滿(mǎn)足高速雷達數據記錄的需要,而要充分發(fā)揮PCI Express總線(xiàn)的作用,驅動(dòng)程序設計是關(guān)鍵。本文介紹了在Windows XP系統下,雷達數據記錄器中PCI Express總線(xiàn)接口芯片PEX8311的驅動(dòng)程序開(kāi)發(fā)。
2 雷達數據記錄器介紹
雷達數據記錄器由一臺服務(wù)器計算機、PCI Express接口卡、SCSI卡和SCSI硬盤(pán)四部分組成,其中PCI Express接口卡的軟硬件自行設計,其它部分采用標準的外購件。雷達數據
通過(guò)PCI Express接口卡傳入計算機內存,計算機再將數據通過(guò)SCSI卡寫(xiě)在SCSI硬盤(pán)上。
PCI Express接口卡采用美國PLX公司推出的PEX8311作為本地總線(xiàn)和PCI Express總線(xiàn)的接口。PEX8311[3]是一款x1的PCI Express接口芯片,本地端總線(xiàn)頻率最高可達66MHZ,數據位寬32bit。PEX8311含有4KB的配置空間,其中前256字節是和PCI設備功能上是兼容的,其余是PCI Express擴展配置空間。本文采用PEX8311的引腳LINTi#接收外部中斷信號,使用DMA通道0進(jìn)行塊DMA方式讀數據。
接口卡的結構框圖如圖1所示,利用差分轉換芯片先將外部差分信號轉換成單端信號,兩塊FIFO的“乒乓”傳輸以實(shí)現數據的連續傳輸,單個(gè)FIFO容量為512KB。在CPLD的控制下,兩塊FIFO的數據輪流通過(guò)PEX8311的DMA通道0傳入計算機。

圖1 PCI Express接口卡框圖
具體工作過(guò)程:當其中一個(gè)FIFO被寫(xiě)滿(mǎn)數據后,在CPLD控制下,外部數據繼續寫(xiě)入另一個(gè)FIFO,同時(shí),CPLD使PEX8311的LINTi#輸入為低電平,這會(huì )產(chǎn)生一個(gè)LINT#中斷,驅動(dòng)程序響應中斷并啟動(dòng)DMA傳輸讀取FIFO中的數據到DMA緩存中。讀完后,驅動(dòng)程序通知應用程序將DMA緩存的數據寫(xiě)到SCSI盤(pán)上。
3 WDM驅動(dòng)程序概述
WDM是一種分層驅動(dòng)程序模型[4],如圖2所示。系統啟動(dòng)時(shí),總線(xiàn)驅動(dòng)程序枚舉總線(xiàn)上的設備,并為每個(gè)設備創(chuàng )建一個(gè)物理設備對象(PDO);然后PnP管理器根據注冊表中的信息查找與這個(gè)PDO相關(guān)的過(guò)濾驅動(dòng)程序和功能驅動(dòng)程序,建立的過(guò)濾設備對象(FIDO)

圖2 WDM分層驅動(dòng)模型
和功能設備對象(FDO),最終,系統完成設備驅動(dòng)的裝入過(guò)程。設備擴展對象是與設備對象關(guān)聯(lián)的另一種重要的數據結構,它是一塊未分頁(yè)的內存,I/O管理器自動(dòng)把它分配給已建立的任何設備擴展對象,可以用它來(lái)保存與設備關(guān)聯(lián)的任何信息,驅動(dòng)程序需要時(shí),只要在設備擴展對象中取出這些資源使用即可。
IRP全名為IO Request Packet,即I/O請求包,是系統創(chuàng )建的一種數據結構。當應用程序對設備操作時(shí),I/O管理器根據具體的請求建立相應的IRP,IRP先被I/O管理器發(fā)送到最上層的驅動(dòng)程序處理,然后依次傳遞給下層的驅動(dòng)程序處理。每層驅動(dòng)程序可以不作任何事情而直接將IRP向下傳遞,也可以直接將該IRP設置為完成狀態(tài)。
4 PEX8311驅動(dòng)程序設計
微軟提供的驅動(dòng)程序開(kāi)發(fā)軟件包DDK(Device Driver Kits)提供了用于驅動(dòng)程序開(kāi)發(fā)的資源文件、編譯連接程序、開(kāi)發(fā)技術(shù)文檔等。第三方開(kāi)發(fā)工具有NuMega公司DriverStudio和Jungo公司的WinDriver,它們對DDK進(jìn)行了封裝,方便用戶(hù)進(jìn)行驅動(dòng)開(kāi)發(fā)。但效率方面不如DDK??紤]到雷達數據記錄的數據率較高,所以本文采用DDK開(kāi)發(fā)PEX8311的驅動(dòng)程序??偩€(xiàn)驅動(dòng)程序由系統提供,過(guò)濾驅動(dòng)程序是可選的。所以本文只設計了PEX8311的功能驅動(dòng)程序(以下簡(jiǎn)稱(chēng)驅動(dòng)程序),它主要由驅動(dòng)程序初始化、數據傳輸初始化、數據傳輸模塊三部分組成。其基本思想是:應用程序與驅動(dòng)程序共享DMA緩存,當驅動(dòng)程序接收到一個(gè)LINT#中斷時(shí),啟動(dòng)DMA讀取FIFO中的數據存在DMA緩存中,每次讀完后,驅動(dòng)程序通過(guò)事件通知應用程序取出DMA緩存中的數據存在SCSI硬盤(pán)上。
4.1 驅動(dòng)程序初始化
DriverEntry是驅動(dòng)程序的入口函數,負責初始化驅動(dòng)程序對象。系統啟動(dòng)時(shí),如果檢測到PEX8311的存在,I/O管理器會(huì )建立一個(gè)未初始化的驅動(dòng)程序對象并將它作為一個(gè)參數傳給DriverEntry。DriverEntry把驅動(dòng)程序其它例程的函數指針裝入到驅動(dòng)程序對象里面。當一個(gè)IRP被發(fā)送到設備時(shí),I/O管理器使用該IRP關(guān)聯(lián)的驅動(dòng)程序對象找到正確的驅動(dòng)程序例程處理。初始化的主要函數指針有:AddDevice、DriverUnload、DispatchCreate、DispatchClose、DispatchIoControl、DispatchCleanup、DispatchPnp、DispatchPower。 合成孔徑雷達相關(guān)文章:合成孔徑雷達原理
評論