摘 要:本文介紹了基于CompactPCI總線數字隔離I/O(Input/Output)模塊的實現。通過硬件和驅動的設計,該模塊可以實現數字信號傳輸和隔離的作用,在內場測試系統中起到了實際的作用。
關鍵詞:輸入/輸出 PLX9030 隔離 驅動
1 引言
1PCI總線一個重要的特點是其具有極高的數據傳輸速度,是新一代微機的標準總線,但是PCI的金手指插卡方式不能滿足工業的高機械強度要求。CompactPCI規范是由PICMG制定的,在電氣、邏輯和軟件功能方面與PCI標準完全兼容(PCI規范請詳見參考文獻1),它制定了機械結構上更加堅固耐用的PCI版本,用于工業和嵌入式應用,是一種新的開放的工業計算機標準。本文介紹的基于CompactPCI總線的數字隔離I/O模塊是應用于對抗震性能要求較高的內場測試系統上。
2 CompactPCI總線接口的設計
目前CompactPCI接口卡的設計一般有兩種方法,第一種是基于將PCI接口完全集成到ASIC中,這樣做的好處是集成度高,量產的生產成本低,直接用成熟的核。另一種方法可以根據CompactPCI協議在FPGA中實現CompactPCI總線接口控制器,但是由于CompactPCI總線協議自身的復雜性,要想在短期內做到操作穩定,難度很大。綜合項目需求、成本、開發難易及后續開發等幾個問題考慮,選擇了PLX9030芯片作為設計基于CompactPCI總線的接口芯片。
[align=center]

圖1 PLX9030控制原理示意圖[/align]
2.1 PLX9030實現CompactPCI總線接口設計
如圖2所示,設計主要由三個功能部分組成:一個是PLX9030與CompactPCI總線的接口控制邏輯,一個是它與局部總線的接口控制邏輯,還有一個即是與CompactPCI配置存儲器串行EEPROM的接口控制邏輯。
[align=center]

圖2 PLX9030實現CompactPCI總線接口控制[/align]
PLX9030接口控制芯片把CompactPCI總線和局域總線連接起來,把所有的CompactPCI接口信號做在芯片內部。本模塊局域總線控制單元,用于輸入輸出選通控制,應用簡單譯碼、瑣存和緩沖,最終實現可分別一一控制的16位數據輸入和16位數據輸出,控制原理比較簡單,為了節約板卡空間,用CPLD7128完成。設計方法請詳見參考文獻3。CompactPCI配置存儲器串行EEPROM的接口控制邏輯是設計中的重點。
2.2 配置寄存器
PCI規范規定任何PCI設備必須實現一定數目的配置寄存器,以提供必要的配置信息。 9030對應的串行EEPROM容量需大于2Kbit(128words *16bit),并且需要有地址自增功能,在該課題中選用了93LC66芯片。PLX9030提供了與串行 EEPROM管腳—一對應的接口,只需對應連接即可,如圖2。需要配置的寄存器請詳見參考文獻2。
上電過程中,PLX9030的內部寄存器由PCI BUS的RST#信號復位,并給出響應信號RETRY,在LOCAL BUS上輸出LRESET#信號,檢查串行EEPROM是否存在。如果安裝了EEPROM,PLX9030開始讀串行EEPROM,若讀出的第一個字非FFFFH,則PLX9030繼續讀操作,PLX9030用EEPROM中的值來配置片內的寄存器,否則認為EEPROM無效使用缺省值。對PLX9030來講,EEPROM的前四個字節應該是30H、90H、B5H、10H,其中9030H為設備號,10B5H為廠商號。則PLX930用EEPROM中的值來配置片內的寄存器,否則使用缺省值。
3 模塊隔離電路的設計
隔離是指使用變壓器、光電或電容耦合等方法在被測系統與測試系統之間傳遞信號,避免了直接的電氣或物理連接。光電耦合器以光電轉換原理傳輸信息,它不僅使信息發出端(一次側)與信息接收端(二次側)是電絕緣的,從而對地電位差干擾有很強的抑制能力,而且有很強的抑制電磁干擾的能力,且速度高,價格低,接口簡單,因而得到廣泛的應用。
光電耦合器的一次側都是發光二極管,但是二次側有很多種結構,如光敏二極管、光敏晶體等,本卡選用光電耦合器的是高速CMOS型的,傳輸率可達10MHZ,型號為HCPL2630,原理說明請詳見參考文獻4。它的一次側與二次側的延遲時間只有28 ns,因此速度遠遠超過普通光電三極管型的光電隔離管。內部結構原理圖如3。加裝光電隔離電路的方法如圖4。
[align=center]

圖3 HCPL2630內部原理[/align]
[align=center]

圖4 光電耦合器的連接圖[/align]
由于光電耦合器的前端是發光二極管,最大電流不能超過15mA,因此一定要加上限流電阻R。限流電阻R的阻值的大小,對光電耦合器的性能影響很大。R過大,會導致脈沖邊緣延遲較大,R過太小,又很容易使光電耦合器前端發光二極管損壞而縮短光耦壽命。因此需要經過多次反復的實踐才能最后確定。由于器件有個體的差異,在調試過程中,也遇到個別的光電耦合器在運行一段時間后才發現驅動能力不夠,需要減小限流電阻、增大電流才能使發光二極管可靠導通的情況。
光電耦合器輸入端和輸出端供電要使用不同電源,于是在板卡上應用了DC5V—DC5V電源隔離模塊,自帶∏型濾波器,在增加少量的外加電路后能達到很小的輸出紋波。
4 模塊的硬件原理
如圖5,當數字信號從CompactPCI的J2連接器輸入到數字隔離I/O模塊時,首先經過了光耦隔離器,保證了外部的信號不對板上其他信號造成電壓沖擊;當總線發出讀操作命令時,PLX9030、CPLD接收了讀操作命令,相應的控制位把隔離后的信號送給CompactPCI總線。
[align=center]

圖5 數字隔離I/O模塊硬件原理[/align]
當數字信號從CompactPCI總線向局部總線輸出時,首先通過PLX9030把相應的控制位和數據送到CPLD中,CPLD接受了命令后,把相應的數據經光耦隔離器及驅動器送出。 外部設備可以通過CompactPCI J2自定義針腳根據需要進行控制。
5 WinDriver開發設備驅動程序
(1)打開WinDriver應用程序后,出現Driver Wizard,選擇創建新Driver,出現當前系統中所有的硬件卡的列表,如圖6所示。
[align=center]

圖6 當前系統中所有的硬件卡的列表[/align]
從列表中選擇需要建立驅動程序的硬件設備,對于PCI設備,點擊Generate.INF按鈕建立安裝信息文件1518.inf。然后對1518.inf中的部分內容按照板卡所需信息進行修改。
(2)用Driver Wizard生成操作硬件的應用程序級API函數。存放于DIO.h文件中。
(3)啟動VC++6,建立一個DLL工程,將 Wizard產生的部分單元文件包含進工程中,在此基礎上加入完成特定任務的代碼,利用DIO.h中的API函數,完成DIO.c,并提供應用程序的調用接口。
(4)編寫接口單元文件DIO.def,將工程編譯成動態鏈接庫DIO.dll。應用程序就可以直接調用此動態鏈接庫。在主測試程序中調用DIO.dll動態鏈接庫,操縱數字隔離I/O模塊配合其它模塊運行。
6 運行結果及討論
至今為止,基于本方案的數字隔離I/O模塊已經成功地應用于內場測試系統中并實現量產。數字隔離I/O模塊是CompactPCI結構的內場綜合測試系統的重要模塊之一,能夠同時實現數字信號輸入和輸出兩大模塊的功能,簡化了外圍硬件的選擇,也提高了系統的通用性和可擴展性;同時對輸入輸出采取了光電隔離措施,使系統同外部設備之間實現了電絕緣,整個系統的抗干擾性能大大提高。該模塊的設計具有通用性,可以應用到其它 CompactPCI總線的系統中,隨著CompactPCI總線在軍事工業領域的應用不斷增多,有廣闊的發展應用前景。
本文作者創新點:數字隔離I/O模塊實現了數字信號輸入和輸出兩大模塊的功能,簡化了外圍硬件的選擇,提高了系統的通用性和可擴展性;同時對輸入輸出采取了光電隔離措施,使系統同外部設備之間實現了電絕緣,整個系統的抗干擾性能大大提高。
參考文獻
[1] Tom Shanley , Don Anderson ,Addison Wesley,2000
[2] PCIMG 2.0 D3.0 CompactPCI Specification September, 1999
[3] 宋萬杰、羅豐、吳順君,CPLD技術及其應用,西安電子科技大學出版社,1999
[4] HP,隔離電路設計指南,2000
[5] 周多等,PCI協議接口設計與驗證, 微計算機信息,2005.5. P194-195