亚洲免费av电影一区二区三区,日韩爱爱视频,51精品视频一区二区三区,91视频爱爱,日韩欧美在线播放视频,中文字幕少妇AV,亚洲电影中文字幕,久久久久亚洲av成人网址,久久综合视频网站,国产在线不卡免费播放

        ?

        基于WDM的CPCI多串口數(shù)據(jù)通信卡驅(qū)動程序設計

        2015-09-18 13:04:01龔俊張京王璐
        軟件導刊 2015年8期

        龔俊 張京 王璐

        摘要:介紹Windows XP系統(tǒng)下,基于WDM架構(gòu)的CPCI多串口數(shù)據(jù)通信卡驅(qū)動程序的設計及實現(xiàn)方法,并分析WDM架構(gòu)下的多串口卡設備的驅(qū)動層次結(jié)構(gòu)、總線驅(qū)動關(guān)鍵IRP事件的處理機制。最后,探討其驅(qū)動程序安裝及調(diào)試。

        關(guān)鍵詞:CPCI;WDM;多串口數(shù)據(jù)通信卡;Windows XP

        DOIDOI:10.11907/rjdk.151822

        中圖分類號:TP319

        文獻標識碼:A 文章編號文章編號:16727800(2015)008011503

        0 引言

        CPCI是PICMG(國際工業(yè)計算機制造者聯(lián)合會)組織于1994年提出的高性能工業(yè)計算機總線標準。CPCI總線以PCI電氣規(guī)范為基礎,解決了VME等總線技術(shù)與PCI總線不兼容的問題,其與傳統(tǒng)PCI總線完全兼容,使得基于PC的x86架構(gòu)等技術(shù)能在工業(yè)領域廣泛使用。同時由于其接口作了重大改進,使得采用CPCI架構(gòu)技術(shù)的工控電腦具有高可靠性、高密度優(yōu)點。

        本文CPCI多串口數(shù)據(jù)通信卡由西南自動化研究所自主研發(fā)設計生產(chǎn),具有8通道RS232/422/485接口,各通道均可通過撥碼開關(guān)進行協(xié)議間切換。硬件采用PLX9054橋與CPLD組合的方案,實現(xiàn)ST16C554串口控制器與CPCI總線間的數(shù)據(jù)訪問,CPLD邏輯負責將8個串口的寄存器操作地址空間、中斷分別映射到PCI可操作地址空間及中斷向量上,供串口功能驅(qū)動進行使用。硬件結(jié)構(gòu)框圖如圖1所示。

        1 驅(qū)動程序框架

        1.1 WDM驅(qū)動架構(gòu)

        WDM(Windows Driver Mode)是微軟公司定義的驅(qū)動設計規(guī)范,其基于模塊化設計思想,使得驅(qū)動開發(fā)更加規(guī)范可靠。WDM定義了一個基本模型,處理所有類型的數(shù)據(jù),擁有總線驅(qū)動和類驅(qū)動。WDM 驅(qū)動體系定義驅(qū)動程序?qū)哟危ㄒ妶D2),將各層次的驅(qū)動程序按一定順序排列起來。

        圖1 硬件結(jié)構(gòu)[HJ]

        圖2 WDM中設備對象和驅(qū)動程序的層次結(jié)構(gòu)

        在單個硬件驅(qū)動程序堆棧中,不同位置的驅(qū)動程序扮演著不同的角色。功能驅(qū)動程序管理FDO所代表的設備,總線驅(qū)動程序管理計算機與PDO所代表設備的連接,過濾器驅(qū)動程序用于監(jiān)視和修改IRP流[1]。

        當總線驅(qū)動程序枚舉硬件時,其作用相當于一個普通的功能驅(qū)動程序。檢測到新硬件后,它改變?yōu)榭偩€驅(qū)動程序角色,并為找到的硬件創(chuàng)建PDO,最終由PnP管理器負責加載該PDO的驅(qū)動程序。

        1.2 CPCI多串口數(shù)據(jù)通信卡驅(qū)動架構(gòu)

        一般一個設備的驅(qū)動程序至少包括兩個驅(qū)動程序: 一個是總線驅(qū)動程序,另一個是功能驅(qū)動程序??偩€驅(qū)動程序通常由系統(tǒng)供應商提供,負責管理硬件與計算機的連接[2]。功能驅(qū)動程序,即通常所說的設備驅(qū)動程序,負責指揮硬件工作,例如初始化IO 請求等[3]。

        在CPCI多串口數(shù)據(jù)通信卡驅(qū)動架構(gòu)中,通信卡驅(qū)動程序也是由總線設備驅(qū)動和串口設備驅(qū)動組合而成??偩€設備驅(qū)動負責枚舉出當前板卡上的全部串口,并為每個串口分配其所需要的硬件IO地址及中斷資源,負責處理每個子串口驅(qū)動各類型IRP請求。功能驅(qū)動則負責完成串口控制器的初始化、響應串口中斷,接收與發(fā)送串口緩存區(qū)數(shù)據(jù),對串口控制參數(shù)進行配置[4]。

        1.3 標準文件操作

        相比利用第三方工具開發(fā)出來的非標驅(qū)動程序,選用WDM架構(gòu)開發(fā)的串口驅(qū)動,開發(fā)人員可直接使用標準的Windows系統(tǒng)文件操作函數(shù)CreateFile、ReadFile、WriteFile、CloseFile等即可對每個串口進行配置、數(shù)據(jù)接收、數(shù)據(jù)發(fā)送及關(guān)閉操作。同時還可支持目前市面上大部分第三方開發(fā)的標準串口應用程序(如串口助手、串口精靈等),帶來極大便利。

        2 驅(qū)動程序設計與實現(xiàn)

        與單一功能的CPCI設備驅(qū)動開發(fā)相比,多串口數(shù)據(jù)通信卡驅(qū)動開發(fā)的難點在于對設備總線驅(qū)動的設計,該驅(qū)動既要完成其本身的總線功能角色,又要提供方法與串口功能驅(qū)動進行數(shù)據(jù)交互。

        2.1 總線設備驅(qū)動

        本文針對多串口數(shù)據(jù)通信卡驅(qū)動中總線設備驅(qū)動處理的幾類關(guān)鍵IRP流程進行分析。

        2.1.1 IRP_MN_QUERY_INTERFACE處理流程

        串口設備驅(qū)動程序通過向總線設備驅(qū)動程序發(fā)送IRP_MN_QUERY_INTERFACE請求獲得一個指向總線設備接口描述符的指針。串口在設備啟動和停止時調(diào)用總線設備驅(qū)動程序中的函數(shù)來獲得和釋放總線設備所擁有的資源??偩€設備驅(qū)動通過定義GUID為串口功能驅(qū)動程序提供接口,并與之互通。

        2.1.2 IRP_MN_QUERY_ID處理流程

        總線設備驅(qū)動要處理的最重要的PnP請求是IRP_MN_QUERY_ID。PnP管理器以多種形式發(fā)出此請求,用于獲取設備標識符,而這些標識符能定位子設備的INF文件。響應此請求只需要返回一個包含設備標識符的值。邏輯查詢串口代碼如下(驅(qū)動中定義為CHILDTYPEA)則返回*SWCOM01。

        static NTSTATUS HandleQueryId(PDEVICE_OBJECT pdo,PIRP Irp)

        {

        case BusQueryDeviceID:

        if (pdx->flags & CHILDTYPEA)

        idstring = LDRIVERNAME L"*SWCOM01"

        }

        2.1.3 IRP_MN_START_DEVICE處理流程

        PnP管理器通常使用IRP_MN_START_DEVICE來通知功能驅(qū)動程序,其硬件被賦予I/O資源,以及指導功能驅(qū)動程序作必要的硬件或軟件設置,以便設備能正常工作。當前總線設備驅(qū)動程序在該IRP處理例程中,讀取CPLD為各個串口分配的IO空間地址及中斷號資源,初始化PLX9054橋芯片的中斷使能參數(shù)配置,并最終調(diào)用IoCreateDevice函數(shù)為8個串口創(chuàng)建出獨立的PDO對象,函數(shù)調(diào)用例程如下:

        status = IoCreateDevice(pdx->DriverObject,sizeof(PDO_EXTENSION),NULL,

        FILE_DEVICE_SERIAL_PORT,F(xiàn)ILE_AUTOGENERATED_DEVICE_NAME,F(xiàn)ALSE,&child);

        if (!NT_SUCCESS(status))

        {

        KdPrint((DRIVERNAME " - IoCreateDevice (child) failed - %Xn",status));

        return status;

        }

        2.1.4 IRP_MN_QUERY_DEVICE_RELATIONS處理流程

        當多串口數(shù)據(jù)通信卡插入機箱背板CPCI插槽后,Windows標準總線的驅(qū)動程序檢測到設備,然后PnP管理器就像配置任何普通CPCI/PCI設備一樣配置板卡。啟動板卡后,PnP管理器向板卡的總線設備驅(qū)動發(fā)送一個帶IRP_MN_QUERY_DEVICE_RELATIONS副功能碼的PnP請求,以了解當前數(shù)據(jù)通信卡內(nèi)部總線關(guān)系,判斷其是否含有子設備。總線設備驅(qū)動處理該IRP請求后,告知PnP管理器當前板卡上包含的8個獨立串口。

        2.1.5 其它IRP

        除上述幾種IRP處理例程外,總線驅(qū)動實際開發(fā)中還實現(xiàn)了包含IRP_MN_QUERY_CAPABILITIES、IRP_MN_STOP_DEVICE、IRP_MN_REMOVE_DEVICE等通常WDM驅(qū)動所必須的處理例程,確保該驅(qū)動能完全覆蓋串口功能設備驅(qū)動的IRP請求。

        2.2 串口功能驅(qū)動程序

        串口功能驅(qū)動主要參考微軟公司的配套Windows XP DDK中自帶的單個串口設備樣例代碼。在此基礎上,配合總線設備驅(qū)動架構(gòu),在創(chuàng)建設備時加入與總線驅(qū)動相對應的接口函數(shù)代碼,實現(xiàn)兩個驅(qū)動間的功能接口對接、多串口端口枚舉等功能。

        在中斷處理上,根據(jù)板卡多串口共享中斷的特點,CPLD邏輯在判斷出當前中斷來源于具體的某個串口后,將CPLD中斷狀態(tài)寄存器置位。各串口驅(qū)動實例的中斷處理函數(shù)ISR首先在中斷觸發(fā)后,對CPLD中斷狀態(tài)寄存器進行判斷,若非本串口中斷類型,則直接返回不作處理,等待下一次中斷產(chǎn)生時再判斷。若是本串口的中斷位被置,將進行對應中斷方式的數(shù)據(jù)發(fā)送、接收,完成后中斷位被自動清除。

        3 驅(qū)動程序開發(fā)調(diào)試環(huán)境

        CPCI多串口通信卡驅(qū)動程序采用微軟公司提供的Windows XP的DDK驅(qū)動開發(fā)環(huán)境進行驅(qū)動開發(fā)編譯,使用build命令在DDK開發(fā)環(huán)境命令行下進行編譯。

        驅(qū)動調(diào)試時,借助微軟公司提供的調(diào)試軟件DebugView,通過檢查關(guān)鍵處理流程代碼處有無對應調(diào)試信息輸出,完成驅(qū)動調(diào)用過程調(diào)試。此外,利用DriverStudio中的Windows系統(tǒng)底層調(diào)試工具SoftIce在驅(qū)動內(nèi)部加入斷點,可針對驅(qū)動程序開發(fā)過程中遇到的數(shù)據(jù)超界、內(nèi)存訪問異常等嚴重錯誤進行單步斷點跟蹤調(diào)試,準確定位驅(qū)動中錯誤所在的位置。

        4 驅(qū)動程序安裝使用

        在插入多串口通信卡后,啟動系統(tǒng)進入Windows桌面,系統(tǒng)會提示找到其它PCI橋設備,然后自動查找驅(qū)動程序,將安裝路徑指向驅(qū)動包路徑,便可自動安裝完成全部串口,安裝完成后的設備管理器顯示如圖3所示。

        圖3 驅(qū)動安裝后設備管理器顯示

        5 驅(qū)動程序測試

        由于本串口驅(qū)動遵循了標準的WDM架構(gòu)的串口驅(qū)動開發(fā)架構(gòu),因此可利用標準的串口測試程序進行測試,提高整個板卡的通用性及易用性。

        硬件測試環(huán)境利用一臺配有Intel i7-3555主板的標準x86 架構(gòu)的CPCI機箱,裝入CPCI多串口卡后,將配套的測試線纜與MOXA公司的兩臺uPort 1450型號多串口測試儀器的8個串口進行互連。

        軟件測試環(huán)境采用Windows XP系統(tǒng),安裝完成多串口通信卡的驅(qū)動程序及uPort 1450設備的驅(qū)動后,測試軟件選用Access Port標準串口測試軟件,版本號v1.37。

        測試時,分別在RS232、RS422和RS485三種工作模式下,波特率選用9600、19200、38400、57600和115200五種常用波特率,生成15個測試項,在執(zhí)行測試項時,多串口通信卡上的8個串口與兩臺uPort 1450的8個串口同時開始進行數(shù)據(jù)收發(fā),進一步驗證板卡上串口并行工作能力。

        測試結(jié)束后,通過比較發(fā)送源數(shù)據(jù)與接收實際數(shù)據(jù)的個數(shù),將發(fā)送數(shù)據(jù)文件和接收后轉(zhuǎn)存的數(shù)據(jù)文件進行MD5校驗計算后發(fā)現(xiàn):多串口通信卡上的8個串口在全部測試過程中的數(shù)據(jù)通信均無丟數(shù)、錯數(shù)現(xiàn)象,從而可知該CPCI多串口通信卡所使用的驅(qū)動程序完全滿足標準串口的功能及性能要求。

        6 結(jié)語

        本文以基于CPCI總線的多串口通信卡為例,介紹了總線驅(qū)動開發(fā)中的關(guān)鍵處理流程的處理方法。目前該多串口通信卡已經(jīng)在本所多個橫向及縱向項目中的設備上得以應用,效果良好。

        CPCI總線形式的各類板卡目前已經(jīng)廣泛應用于智能交通、航空航天、工業(yè)現(xiàn)場控制、軍事系統(tǒng)等領域,在硬件設計時,往往考慮到成本、結(jié)構(gòu)及用戶定制化的要求,會出現(xiàn)越來越多的集成多種功能模塊的CPCI板卡。本文多串口通信卡的多功能設備驅(qū)動架構(gòu)將得到更為廣泛應用及推廣。

        參考文獻:

        [1] WALTER ONEY.Programming the microsoft windows driver mode second edition[M].Microsoft Press,2002

        [2] 田澤,劉娟,王綺卉.基于WDM 的PCIE 驅(qū)動設計和實現(xiàn)[J].軟件導刊,2010(4):910.

        [3] 張建新.Windows 2000內(nèi)核結(jié)構(gòu)的分析及驅(qū)動程序的編制[J].計算機工程與應用,2012(10):121123.

        [4] 田澤,劉娟,王綺卉.基于WDM 的PCIE 驅(qū)動設計和實現(xiàn)[J].軟件導刊,2010,9(4):2930.

        (責任編輯:陳福時)

        永久无码在线观看| 久草青青91在线播放| 久久久亚洲av波多野结衣| 97精品超碰一区二区三区| 理论片87福利理论电影| 亚洲午夜久久久久中文字幕久| 亚洲av成人久久精品| 中文字字幕在线中文乱码解| 手机看黄av免费网址| 国产色秀视频在线播放| 欧美中文字幕在线看| 亚洲处破女av一区二区| 人妖一区二区三区在线| 久久久久国色av免费观看性色| 国产精品沙发午睡系列990531| 97福利视频| 日韩精品一级在线视频| 久久女人精品天堂av影院麻| av无码一区二区三区| 男女啪啪免费体验区| 国产高清白浆| 字幕网中文字幕精品一区| 国产激情久久久久久熟女老人| 性欧美videofree高清精品| 亚洲国产精品久久久久久网站| 国产麻豆放荡av激情演绎| 中文字幕久久久人妻人区| 99久久精品国产一区二区| 亚洲欧美日韩国产综合一区二区| 欧美日韩一二三区高在线| 丝袜美腿诱惑区在线播放| 女人张开腿让男人桶爽| 国产人妻久久精品二区三区特黄 | 无码中文日韩Av| 亚洲高清在线视频网站| 中文字日产幕码三区国产| 丰满少妇高潮惨叫久久久一| 亚洲性无码av在线| 按摩女内射少妇一二三区| 国产精品三区四区亚洲av| 亚洲精品无码永久在线观看你懂的 |