新聞中心

EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 基于1394b總線仿真設(shè)備的WDM驅(qū)動(dòng)開發(fā)

基于1394b總線仿真設(shè)備的WDM驅(qū)動(dòng)開發(fā)

作者: 時(shí)間:2016-10-15 來源:網(wǎng)絡(luò) 收藏

IEEE-1394b總線協(xié)議具有實(shí)時(shí)性、可靠性、確定性等特性,這些特性使其在點(diǎn)對點(diǎn)通信方面表現(xiàn)突出。IEEE-1394b作為F22猛禽戰(zhàn)機(jī)的總線,同時(shí)也使用在F35、NASA的航天飛機(jī)上以及DV設(shè)備上。而總線的仿真驗(yàn)證設(shè)備需要圖形化的界面軟件,這就要求其工作環(huán)境支持PC機(jī)環(huán)境。作為硬件與軟件橋梁的驅(qū)動(dòng)程序主要工作是保證軟硬件協(xié)調(diào)工作,提供安全簡單的操作接口,保證通信數(shù)據(jù)的可靠性、實(shí)時(shí)性、確定性等。

本文引用地址:http://m.butianyuan.cn/article/201610/307352.htm

1 硬件系統(tǒng)簡介

圖1是以Xilinx的V6系列的FPGA為核心的硬件框圖。該設(shè)備具有3個(gè)余度,并且三余度之間能夠獨(dú)立工作,互不影響。硬件采用三路Link和PHY芯片,三路獨(dú)立供電。由于仿真設(shè)備運(yùn)行的環(huán)境的封閉性,從而設(shè)計(jì)軟件和硬件兩種供電控制開關(guān)。軟件電源控制信號(hào)由FPGA控制可編程的電源控制芯片來遠(yuǎn)程控制設(shè)備。設(shè)備供電無需外接電源,直接利用PC機(jī)的PCI或者PCIe總線插槽供電,硬件提供電源管理系統(tǒng)進(jìn)行電壓轉(zhuǎn)換。該設(shè)備支持速率S100Mbps和S400Mbps,硬件提供S100Mbps和S400Mbps端口速率切換按鈕,F(xiàn)PGA內(nèi)部通信速率由邏輯控制完成。

基于1394b總線仿真設(shè)備的WDM驅(qū)動(dòng)開發(fā)

FPGA邏輯功能框如圖2所示,F(xiàn)PGA邏輯對PCI/PCIe總線協(xié)議和1394b總線進(jìn)行協(xié)議封裝以及協(xié)議解析;對內(nèi)存空間,IO空間以及中斷號(hào)等進(jìn)行劃分;對操作寄存器進(jìn)行定義;對發(fā)送數(shù)據(jù)的DM口,接收數(shù)據(jù)的GRF口進(jìn)行控制;開放LINK和PHY的軟件訪問權(quán)限,便于實(shí)現(xiàn)遠(yuǎn)程訪問功能;對DPRAM進(jìn)行雙口切換操作,以保證數(shù)據(jù)通信的可靠性;設(shè)計(jì)退避算法防止總線競爭失敗數(shù)據(jù)丟失;支持操作,實(shí)現(xiàn)通信的實(shí)時(shí)性。

基于1394b總線仿真設(shè)備的WDM驅(qū)動(dòng)開發(fā)

2 驅(qū)動(dòng)設(shè)計(jì)

驅(qū)動(dòng)程序是硬件廠商根據(jù)硬件工作環(huán)境的操作系統(tǒng)編寫的配置文件,其運(yùn)行于操作系統(tǒng)內(nèi)核態(tài),是設(shè)備與計(jì)算機(jī)交互的橋梁,它把硬件的功能告訴操作系統(tǒng),同時(shí)也將系統(tǒng)

的指令傳達(dá)給硬件。驅(qū)動(dòng)軟件分為軟件驅(qū)動(dòng)和硬件驅(qū)動(dòng)。軟件驅(qū)動(dòng)是把工作最終交給CPU處理,對CPU依賴性比較高,對操作系統(tǒng)影響比較大;而硬件驅(qū)動(dòng)能夠最大化的避免CPU的調(diào)度,提高硬件資源的利用率、增加傳輸?shù)膶?shí)時(shí)性、減少設(shè)備對計(jì)算機(jī)的依賴性等。

本設(shè)備驅(qū)動(dòng)程序采用硬件驅(qū)動(dòng),開發(fā)工具為DDK(Device Development Kit),調(diào)試工具為Debug view,其工作流程如圖3所示。

基于1394b總線仿真設(shè)備的WDM驅(qū)動(dòng)開發(fā)

由于Windows是多任務(wù)非實(shí)時(shí)的操作系統(tǒng),每個(gè)進(jìn)程占用處理器的時(shí)間應(yīng)小于50微秒,如果需要長時(shí)間的硬件訪問應(yīng)采用系統(tǒng)線程的方法,本設(shè)計(jì)采用三余度三個(gè)內(nèi)核線程對數(shù)據(jù)處理用以保證訪問的準(zhǔn)確性。由于該設(shè)備硬件的快捷性和軟件的延時(shí)性,并且突發(fā)大數(shù)據(jù)量傳輸發(fā)生概率比較高。所以驅(qū)動(dòng)程序在發(fā)送模塊上使用了,在接收模塊使用了,保證數(shù)據(jù)能夠平滑的通信,在突發(fā)大數(shù)據(jù)量操作時(shí)保證了數(shù)據(jù)的完整性和確定性。由于中斷函數(shù)(wdmISR)的系統(tǒng)優(yōu)先級(jí)最高,其工作占用CPU資源能夠影響到整個(gè)系統(tǒng)的運(yùn)行,所以中斷需盡可能的簡短、盡可能避免使用浮點(diǎn)操作、盡可能的將處理移交給任務(wù)處理。所以設(shè)計(jì)了中斷延時(shí)處理函數(shù)DPC(Deferred Procedure Call)對系統(tǒng)進(jìn)行資源合理利用保證通信的有效性。中斷服務(wù)程序功能框圖如圖4所示。

基于1394b總線仿真設(shè)備的WDM驅(qū)動(dòng)開發(fā)

:為了提高硬件資源利用率以及設(shè)備工作的安全性。本設(shè)備設(shè)計(jì)為三余度(兩個(gè)余度為主節(jié)點(diǎn),一個(gè)余度為備用節(jié)點(diǎn))一體設(shè)備,三節(jié)點(diǎn)能夠獨(dú)立進(jìn)行工作。1394b總線協(xié)議允許發(fā)送物理層包訪問遠(yuǎn)程節(jié)點(diǎn),并且能夠通過遠(yuǎn)程訪問包對設(shè)備節(jié)點(diǎn)進(jìn)行遠(yuǎn)程控制。所以當(dāng)任意一個(gè)主節(jié)點(diǎn)出現(xiàn)故障,備用節(jié)點(diǎn)可以通過遠(yuǎn)程命令斷開故障主節(jié)點(diǎn),從而啟用備用節(jié)點(diǎn),增加設(shè)備運(yùn)行的安全性。

單功能多設(shè)備的運(yùn)行對驅(qū)動(dòng)程序而言每個(gè)設(shè)備都有自己的內(nèi)存空間、I/O空間以及中斷號(hào),運(yùn)行互不影響。軟件對硬件的操作,在方面只需要對操作進(jìn)行排隊(duì)處理,就能夠避免軟件對硬件的并行操作。而三余度多功能多樣性設(shè)備的運(yùn)行對驅(qū)動(dòng)而言,使用的可能有很多的共享資源(如等資源),并且軟件對3個(gè)余度的操作有可能是并行的,驅(qū)動(dòng)軟件設(shè)計(jì)在節(jié)點(diǎn)間共享資源進(jìn)行加鎖處理保證通信的獨(dú)立性及確定性。

能夠有效的避免資源訪問沖突,能夠以不同優(yōu)先級(jí)級(jí)別控制各個(gè)功能,能夠以不同頻率控制各個(gè)功能,有效的提高了軟件對硬件操作的安全性。該驅(qū)動(dòng)設(shè)計(jì)了節(jié)點(diǎn)間公共資源訪問設(shè)置互斥信號(hào)量(KeWaitForMultipleObjects),只有信號(hào)的擁有者才能釋放信號(hào)量。同時(shí)設(shè)計(jì)了保護(hù)節(jié)點(diǎn)內(nèi)共享資源的保護(hù)措施,如中斷掛接IoCionnect Intei Tupt函數(shù)下的自旋鎖。對上層操作進(jìn)行堆棧處理,保證操作的有效性,并且對該操作進(jìn)行風(fēng)險(xiǎn)評估(如對鏈路層操作可能影響設(shè)備收發(fā)數(shù)據(jù)操作),達(dá)到對硬件的全面保護(hù)。

內(nèi)核線程:由于該設(shè)備應(yīng)用于通信方面,突發(fā)性大數(shù)據(jù)量傳輸發(fā)生率比較高,而windows環(huán)境下每個(gè)進(jìn)程占用處理器的時(shí)間應(yīng)小于50微秒,所以該驅(qū)動(dòng)在PNP(Plug and Play)

為每個(gè)節(jié)點(diǎn)設(shè)置一個(gè)線程(PsCreateSvstemThread)對突發(fā)的大數(shù)據(jù)量數(shù)據(jù)進(jìn)行平滑處理,以保證數(shù)據(jù)平穩(wěn)的交由上層,該線程為事件驅(qū)動(dòng)類型。并且通過KeCetCurrentThread和KeSetPriorityThread調(diào)整線程優(yōu)先級(jí)。

當(dāng)中斷發(fā)生,中斷處理函數(shù)記錄中斷狀態(tài)并清除中斷,判斷中斷是否為空,如果不為空則通過IoRequestDpc請求DPC,同時(shí)把相應(yīng)的中斷狀態(tài)傳給DPC。DPC通過中斷狀態(tài)判斷中斷類型和發(fā)生中斷的節(jié)點(diǎn),并且置位對應(yīng)線程的線程事件。線程觸發(fā)后,從阻塞態(tài)變?yōu)榫途w態(tài),當(dāng)該進(jìn)程得到處理器資源,調(diào)用數(shù)據(jù)處理函數(shù)處理數(shù)據(jù)。

:Windows是多任務(wù)非實(shí)時(shí)的操作系統(tǒng),而DMA可以有效的避免CPU的調(diào)度而節(jié)省時(shí)間,提高設(shè)備的實(shí)時(shí)性。系統(tǒng)要求DMA的使用率盡可能的減少并且盡可能的快捷。本設(shè)計(jì)使用硬件側(cè)DMA,由FPGA邏輯實(shí)現(xiàn),DMA控制由驅(qū)動(dòng)控制。

驅(qū)動(dòng)軟件對DMA進(jìn)行初始化,當(dāng)中斷服務(wù)程序被調(diào)用,驅(qū)動(dòng)程序根據(jù)DPRAM的0、1區(qū)標(biāo)志獲取新數(shù)據(jù)存放區(qū)域,并從該區(qū)獲取新數(shù)據(jù)的刷新標(biāo)記。如有新數(shù)據(jù),則服務(wù)程序申請DMA資源,獲取到DMA資源后,鎖定DMA資源并啟動(dòng)(DMA源地址、目的地址、數(shù)據(jù)搬運(yùn)長度、控制命令)I/O端口到主存區(qū)的DMA。DMA完成后上報(bào)完整中斷并釋放DMA資源。當(dāng)上層調(diào)用IRP_MJ_DEVICE_CONTROL對DPRAM進(jìn)行寫操作時(shí),驅(qū)動(dòng)程序判斷用戶該次操作的DPRAM的內(nèi)存大小,如果在32K~2048K字節(jié)之間,則啟動(dòng)主存區(qū)到I/O端口的DMA,如果大于則分次啟動(dòng)DMA,如果小于32K字節(jié)則單拍或者多拍操作。操作流程與啟動(dòng)接收DMA相同,操作完成則上報(bào)中斷。

:快捷性是硬件的特性之一,而應(yīng)用層相對于硬件是及其緩慢的。并且由于PCI數(shù)據(jù)包封包的影響,其總線實(shí)際帶寬只有133 Mbps/s,而本1394b設(shè)備支持S100Mbps

和S400Mbps兩種傳輸速率。所以為避免設(shè)備長時(shí)間工作帶來內(nèi)存遞增、內(nèi)存泄漏以及突發(fā)大數(shù)據(jù)量給PCI總線通信超負(fù)荷運(yùn)轉(zhuǎn)造成數(shù)據(jù)丟失現(xiàn)象,驅(qū)動(dòng)利用IoAllocateMdl申請一塊3M的內(nèi)存區(qū),供硬件軟件交互循環(huán)利用的用以保證傳輸?shù)挠锌煽啃裕约鞍踩浴?/p>

當(dāng)中斷服務(wù)程序被調(diào)用時(shí),驅(qū)動(dòng)啟動(dòng)DMA或者讀寫寄存器操作把數(shù)據(jù)從指定DPRAM區(qū)搬運(yùn)到主存區(qū),更新新的數(shù)據(jù)指針并通過軟中斷方式通知上層軟件。上層軟件通過Deviee IoCo ntrol對設(shè)備進(jìn)行控制,當(dāng)應(yīng)用層對驅(qū)動(dòng)進(jìn)行操作時(shí),驅(qū)動(dòng)根據(jù)寫指針與讀指針的差值提供可操作的內(nèi)存塊給上層軟件。

不僅能夠提高帶寬的利用率,并且能夠有效避免硬件與軟件操作沖突情況的出現(xiàn),并且避免了資源訪問沖突的重試耗時(shí),提高傳輸?shù)挠行?、?shí)時(shí)性。驅(qū)動(dòng)收發(fā)模塊乒乓操作如圖5和圖6所示。

基于1394b總線仿真設(shè)備的WDM驅(qū)動(dòng)開發(fā)

發(fā)送模塊中,驅(qū)動(dòng)軟件與應(yīng)用層交互,采用兩塊地址內(nèi)存區(qū)。內(nèi)存塊操作由用戶層軟件操作,操作完成后切換內(nèi)存區(qū)并通知驅(qū)動(dòng)最新數(shù)據(jù)存放位置。驅(qū)動(dòng)軟件與硬件交互也采用兩塊DPRAM區(qū)。DPRAM的0、1區(qū)的切換操作由驅(qū)動(dòng)軟件進(jìn)行操作,數(shù)據(jù)更新完畢的DPRAM交由邏輯處理并進(jìn)行換區(qū)操作。

接收模塊中,驅(qū)動(dòng)軟件設(shè)計(jì)循環(huán)隊(duì)列與上層軟件進(jìn)行交互。硬件與驅(qū)動(dòng)軟件交互同樣采用乒乓原理,該操作由硬件邏輯操作,驅(qū)動(dòng)軟件根據(jù)最新數(shù)據(jù)存放的DPRAM區(qū),以及消

息新舊標(biāo)記來進(jìn)行數(shù)據(jù)處理。處理完成后完成數(shù)據(jù)新舊標(biāo)志切換,并軟中斷方式通知應(yīng)用層有新數(shù)據(jù)到達(dá),應(yīng)用層驅(qū)動(dòng)返回的地址指針和內(nèi)存大小獲取最新數(shù)據(jù)。

3 驗(yàn)證分析

本設(shè)備提供DLL(Dynamic Link Library),采用Microsoft Visual Studio 2008專業(yè)版開發(fā),封裝為標(biāo)準(zhǔn)的動(dòng)態(tài)鏈接庫。提供Demo程序,圖7為CC(Control computer)的發(fā)送數(shù)據(jù)窗口測試圖,圖8為RN(Remote Node)的接收數(shù)據(jù)的窗口測試圖。

基于1394b總線仿真設(shè)備的WDM驅(qū)動(dòng)開發(fā)

由上圖可見驅(qū)動(dòng)程序?qū)崿F(xiàn)了1394b的S400 Mbps速率和PCI的S133 Mbps速率的跨速率通信數(shù)據(jù)不丟失,避免了軟硬件交互產(chǎn)生的誤碼,使在S100 Mbps通信速率下平均帶寬達(dá)到79.2 Mbps,在S400Mbps通信速率下平均帶寬達(dá)到231.7 Mbps,實(shí)現(xiàn)了數(shù)據(jù)延時(shí)控制在us級(jí)別,實(shí)現(xiàn)了操作的準(zhǔn)確性,保證了數(shù)據(jù)傳輸?shù)拇_定性。

4 結(jié)束語

自2011年中國面臨著國外大規(guī)模技術(shù)轉(zhuǎn)移封鎖以來,國內(nèi)自研設(shè)備百花齊放,尤其是軟件硬化無疑已經(jīng)成為焦點(diǎn)。作為硬件靈魂的驅(qū)動(dòng)程序越來越受到人們的重視。本文根據(jù)軟硬件的特性進(jìn)行軟硬件工作協(xié)調(diào),提高了硬件資源的利用率,提高了仿真通信的實(shí)時(shí)性,確定性,可靠性。由于需求要求該設(shè)備為PCI總線設(shè)備,通信的帶寬受到限制,所以準(zhǔn)備利用PCIe總線和實(shí)時(shí)操作系統(tǒng)提高設(shè)備的通信帶寬。



評論


相關(guān)推薦

技術(shù)專區(qū)

關(guān)閉