《電子技術(shù)應(yīng)用》
您所在的位置:首頁 > 模擬設(shè)計(jì) > 設(shè)計(jì)應(yīng)用 > 基于PCI總線的數(shù)據(jù)采集卡設(shè)計(jì)
基于PCI總線的數(shù)據(jù)采集卡設(shè)計(jì)
摘要: 雖然PCI總線也經(jīng)歷了從PCI,、PCI-X到PCI Express的發(fā)展,,但PCI總線由于存在時(shí)間長,開發(fā)工具,、開發(fā)資料眾多,,在對數(shù)據(jù)吞吐量要求不是很高的工業(yè)控制,、測量領(lǐng)域仍有著頑強(qiáng)的生命力。筆者在學(xué)習(xí)了相關(guān)設(shè)計(jì)資料的基礎(chǔ)上,,設(shè)計(jì)了基于PCI總線的數(shù)據(jù)采集卡,,可以完成8路數(shù)字量I/O及4路差分14位A/D采集功能,。本文將根據(jù)筆者的實(shí)際經(jīng)驗(yàn),介紹PCI接口擴(kuò)展卡的軟硬件設(shè)計(jì)流程,。
Abstract:
Key words :

  0 引言   

 
  隨著計(jì)算機(jī)軟硬件技術(shù)和控制,、測量技術(shù)的不斷發(fā)展,許多工程技術(shù)人員都將PC機(jī)作為控制,、測量開發(fā)的首選平臺,。而PCI(Peripheral Component Interconnect,即外圍部件互連)總線作為一種高性能,、通用的局部總線,,是目前計(jì)算機(jī)插卡式外設(shè)總線的事實(shí)標(biāo)準(zhǔn)。PCI總線具有32/64位總線寬度,。地址線和數(shù)據(jù)線復(fù)用,,支持猝發(fā)傳輸,傳輸速率高達(dá)132MB/s,;系統(tǒng)占用率低,,具有較好的兼容性;有完備的即插即用(PnP)管理體制,,可同時(shí)支持多組外圍設(shè)備,。雖然PCI總線也經(jīng)歷了從PCI、PCI-X到PCI Express的發(fā)展,,但PCI總線由于存在時(shí)間長,,開發(fā)工具、開發(fā)資料眾多,,在對數(shù)據(jù)吞吐量要求不是很高的工業(yè)控制,、測量領(lǐng)域仍有著頑強(qiáng)的生命力。筆者在學(xué)習(xí)了相關(guān)設(shè)計(jì)資料的基礎(chǔ)上,,設(shè)計(jì)了基于PCI總線的數(shù)據(jù)采集卡,可以完成8路數(shù)字量I/O及4路差分14位A/D采集功能,。本文將根據(jù)筆者的實(shí)際經(jīng)驗(yàn),,介紹PCI接口擴(kuò)展卡的軟硬件設(shè)計(jì)流程。

 

1 PCI總線工作方式簡介   

PCI總線標(biāo)準(zhǔn)由intel于1991年提出,,后由PCI-SIG(PCI Special Interest Group)接替了PCI規(guī)范的發(fā)展,。PCI總線是一種時(shí)分復(fù)用的雙向應(yīng)答總線,傳輸發(fā)起方稱為主設(shè)備,,接收方稱為從設(shè)備,。其主要信號定義如下:   RFAME:由主設(shè)備驅(qū)動,為低,,指示一次傳輸?shù)拈_始,。

DEVSEL:由從設(shè)備驅(qū)動,,為低,指示響應(yīng)傳輸請求,。

ADO~AD31:地址,、數(shù)據(jù)復(fù)用信號。PCI總線的數(shù)據(jù)傳輸以幀為單位,,每次傳輸由一個(gè)地址周期和多個(gè)數(shù)據(jù)周期組成,。首先給出本次傳輸?shù)氖椎刂罚竺婢o跟一個(gè)或多個(gè)4字節(jié)寬的數(shù)據(jù),,連續(xù)傳輸多個(gè)數(shù)據(jù)時(shí),,其地址自動遞增。

C/BE0~C/BE3:這4根線在地址傳送周期,,傳輸?shù)氖强偩€命令,,C/BE0~C/BE3的不同組合指示在AD0~AD31上將要進(jìn)行何種類型的操作,其代表的總線命令見表1,;在數(shù)據(jù)傳送周期,,傳輸?shù)氖亲止?jié)始能信號,用來表示在整個(gè)數(shù)據(jù)期間,,AD31~AD0上的哪些字節(jié)為有效數(shù)據(jù),。

IRDY、TRDY:分別表示主設(shè)備準(zhǔn)備好和從設(shè)備準(zhǔn)備好,。在傳輸過程中,,只有IRDY和TRDY同時(shí)有效,傳輸才能繼續(xù),;否則插入等待周期,,用于在不同速度的設(shè)備之間協(xié)調(diào)工作。

表1地址傳送周期時(shí),。C/BE0~C/BE3所代表的總線命令PRSNT1,、PRSNT2:PCI板對電源的請求信息,具體含義見表2,。

將PCI接口卡插入計(jì)算機(jī)插座,,加電后,BIOS會根據(jù)PCI接口卡上的配置信息,,為其分配相應(yīng)的I/O端口,、存儲器空間、中斷及DMA等計(jì)算機(jī)資源,。

2 PCI接口卡的硬件設(shè)計(jì)   

筆者設(shè)計(jì)的PCI數(shù)據(jù)采集卡使用的PCI接口芯片是CH365,,CH365可將32位高速PCI總線轉(zhuǎn)換為簡便易用的類似于ISA總線的8位主動并行接口,支持240字節(jié)的I/O端口映射,、32 K字節(jié)的存儲器映射,、擴(kuò)展ROM以及中斷,。本數(shù)據(jù)采集卡僅使用了I/O端口映射及中斷功能。本PCI數(shù)據(jù)采集卡使用MAXIM公司的4通道14位,、差分,、同時(shí)采樣ADC:MAX1338,實(shí)現(xiàn)A/D轉(zhuǎn)換功能,,并將MAX1338的/EOLC引腳與CH365的INT_REQ引腳相連,,以便在ADC轉(zhuǎn)換完成后,向PC機(jī)發(fā)出中斷申請,。使用兩片74HC273作為輸出,,一片用作8路I/O輸出,另一片用作對MAX1338控制命令的輸出,。使用兩片74HC373作為輸入,,一片用作8路I/O輸入,另一片采集MAX1338的狀態(tài)指示信號,。使用TLP521-4對8路I/O輸入,、輸出進(jìn)行光電隔離。使用74LS138作為地址譯碼,。

在制作印制板時(shí),,CH365的VCC與GND間應(yīng)就近放置容量為0.1 μF高頻、低ESR的多層瓷片電容,,連接PCI總線的電源線引腳可以自由選擇,,但數(shù)量不宜少于4對。CH365屬于高頻數(shù)字電路,,應(yīng)該考慮信號阻抗匹配,,在設(shè)計(jì)PCB板時(shí)需要參考PCI總線規(guī)范。建議CH365的PCI信號線的長度都小于35 mm,,盡量走弧線或者45度線,,避免直角或者銳角走線,并且盡量將信號走線布在元件面,;CH365的PCI時(shí)鐘線CLK的長度盡量保持在50 mm~65 mm之間,,并且不宜靠近其它信號線;在PCB背面保留大面積的接地覆銅,,以減少周邊信號線的干擾,。雖然PCI總線規(guī)范推薦使用四層板,,但考慮成本等因素,,可使用雙面板,雙面覆銅接地,。筆者做的PCI數(shù)據(jù)采集卡即為雙面板,,經(jīng)實(shí)驗(yàn)驗(yàn)證在工業(yè)現(xiàn)場環(huán)境下,,該卡能夠穩(wěn)定工作。

3 PCI接口卡驅(qū)動程序及軟件設(shè)計(jì)   

在Windows系統(tǒng)中,,為避免因不當(dāng)?shù)挠布僮鞫鴮?dǎo)致系統(tǒng)崩潰,,應(yīng)用程序不再具有直接的硬件訪問權(quán),如果要操作硬件,,必須借助設(shè)備驅(qū)動程序,。驅(qū)動程序主要功能是完成對硬件板卡的內(nèi)存映像地址、I/O地址的存取,,并正確處理來自板卡的硬件中斷,。

Microsoft為設(shè)備驅(qū)動程序的編寫提供了“Windows De-vice Drivers Kit”(簡稱DDK)工具,它包含了驅(qū)動開發(fā)所需的各種類型的定義和內(nèi)核函數(shù)庫,。用DDK編制的驅(qū)動程序有很高的運(yùn)行效率,,但是開發(fā)難度大,測試流程繁瑣,。為減輕驅(qū)動開發(fā)者的負(fù)擔(dān),,很多第三方廠商提供了簡化驅(qū)動開發(fā)的軟件。如Numega公司的DriverStudio軟件,,J ungo公司的WinDriver/KernelDriver軟件等,。尤其是WinDriver/KernelDriver不要求開發(fā)者非常熟悉操作系統(tǒng)平臺,掌握核心開發(fā),、調(diào)試知識,,即可在幾分鐘之內(nèi)開發(fā)出相應(yīng)的驅(qū)動程序。但WinDriver的運(yùn)行效率較低,,因此,,在對運(yùn)行效率較高的場合,可使用KernelDriver進(jìn)行開發(fā),,以提高運(yùn)行效率,。

由于本采集卡的數(shù)據(jù)吞吐量不高,因此采用WinDri-ver6.21進(jìn)行驅(qū)動程序的開發(fā),,其開發(fā)過程如下:   

(1)運(yùn)行Windriver程序,,選擇"Create a new driver pro-ject”;   

(2)在彈出的“Select Your Device”窗口中,,從列表中選擇自己的硬件設(shè)備,。由于CH365的默認(rèn)廠商標(biāo)識(Vendor-ID)為4348H,設(shè)備標(biāo)識(DeviceID)為5049H,,因此選中“PCI:VendorID 4348 DeviceID5049”的PCI設(shè)備(如圖1),。

(3)單擊“Generate.INF file”按鈕,產(chǎn)生采集卡的驅(qū)動安裝信息文件,。注意:需選中“Automatically Install the INFfile”復(fù)選框,,以便可以在(4)步中測試采集卡(如圖2),。

(4)在“Define and Test Resources for Your Device”窗口中,設(shè)置采集卡的I/O地址及變量名,,對于即插即用(Plug-and-play)設(shè)備,,Windriver會自動發(fā)現(xiàn)其所用到的硬件資源(如:I/O范圍,存儲器范圍及中斷號等)(如圖3),。在此可對采集卡的I/O地址進(jìn)行讀寫測試,,以便驗(yàn)證硬件設(shè)計(jì)是否正確。

(5)在“Select Code Generation Options”窗口中,,選中合適的開發(fā)語言及開發(fā)平臺,。在此選擇“Ms Developer Studic6,5”(即Microsoft VisualC++6/5),,以便Windriver生成合適的驅(qū)動程序框架及相應(yīng)的API函數(shù)(如圖4),。

(6)保存Windriver產(chǎn)生的驅(qū)動開發(fā)工程后,Windriver會自動打開相應(yīng)的開發(fā)環(huán)境(此處為:Microsoft VisualC++6),,以便開發(fā)人員進(jìn)行后續(xù)開發(fā),。

通過以上步驟,Windriver生成一個(gè)基于Visual C++語言的程序框架,,開發(fā)人員可以在此框架的基礎(chǔ)上進(jìn)行修改,,加入自己的程序,實(shí)現(xiàn)對硬件的操作?,F(xiàn)以筆者編制的程序(工程文件名為ADC)為例進(jìn)行介紹,。

在程序初始化階段,先調(diào)用PCI_Get_WD_handle(),,判斷驅(qū)動程序windrvr6.sys是否已被加載,,如果驅(qū)動程序已被加載,則調(diào)用ADC_LocateAndOpenBoard()函數(shù),,打開數(shù)據(jù)采集卡,。在退出應(yīng)用程序前,需先調(diào)用ADC_Close()函數(shù),,關(guān)閉數(shù)據(jù)采集卡,。

MAX1338和8路I/O的寄存器操作可通過ADC_ReadByte()、ADC_WriteByte()兩個(gè)函數(shù)完成,。對CH365內(nèi)部配置寄存器的讀寫可通過ADC_Read-PCIReg(),、ADC_WritePCIReg()兩個(gè)函數(shù)完成。完成應(yīng)用程序的開發(fā)后,,數(shù)據(jù)采集卡在其他的PC機(jī)上工作時(shí),,需提供windrvr6.sys、windrvr6.inf、wd_utils.dll,、數(shù)據(jù)采集卡的,inf文件以及自己開發(fā)的應(yīng)用程序或DLL,。以便于PC機(jī)安裝相應(yīng)的驅(qū)動程序,,對板卡進(jìn)行配置、操作,。本文根據(jù)筆者的實(shí)踐經(jīng)驗(yàn),,簡要介紹了PCI擴(kuò)展卡的開發(fā)流程,給出了一套快速可行的解決方案,。該方案簡單易行,、調(diào)試方便,可使工程技術(shù)人員迅速掌握PCI總線的開發(fā)技術(shù),,從而設(shè)計(jì)出符合工程需求的PCI擴(kuò)展卡,。

 

 

此內(nèi)容為AET網(wǎng)站原創(chuàng),未經(jīng)授權(quán)禁止轉(zhuǎn)載,。