基于LabVIEW的SFP光模塊測試平臺的設計與實現(xiàn)
摘 要: 介紹了一種利用LabVIEW構建SFP(Small Form-factor Pluggable)光模塊測試平臺的方法。測試平臺通過讀寫計算機并口來映射地址上的數(shù)據(jù),控制并口端口的邏輯電平實現(xiàn)計算機并口模擬I2C總線。計算機利用模擬的I2C總線與SFP光模塊實現(xiàn)通信。分析了生產者/消費者結構隊列狀態(tài)機并用于設計中,該設計模式可以及時響應前面板動作或外部事件,并且使得狀態(tài)機的狀態(tài)變換更加靈活多變。
關鍵詞: SFP光模塊; 生產者/消費者結構隊列狀態(tài)機; 計算機并口模擬I2C總線
隨著近幾年光通信的迅速發(fā)展,光通信接入網(wǎng)對實現(xiàn)光電、電光轉換的光收發(fā)模塊的要求越來越高,光收發(fā)模塊的測試也越來越復雜。早期一般使用Visual Basic、Visual C++開發(fā)測試軟件,存在開發(fā)周期長、測試效率低等問題,本文提出了使用LabVIEW虛擬儀器技術來完成測試工作的方法,解決了測試成本高、測試效率低、測試系統(tǒng)松散等問題,同時它還具備遠程測試以及儀器定制或自制等特點。虛擬儀器技術已經(jīng)深遠地影響著測試測量領域,是企業(yè)和科研單位的測試工作的重要解決方案之一。本文正是利用此項技術解決了SFP光模塊測試平臺開發(fā)的幾個關鍵問題。
1 SFP光模塊測試軟件的設計
1.1軟件結構
軟件由四個界面構成,實時監(jiān)控界面、閾值設置界面、校準界面和光模塊信息設置界面。實時監(jiān)控界面是軟件的主界面,它顯示數(shù)字診斷功能[1]中的五個模擬量與其Alarm和Warning標志;閾值設置界面的功能是設定Alarm與Warning閾值,當實時監(jiān)控值不在閾值內時會出現(xiàn)工作異常警示;校準界面主要是解決數(shù)據(jù)漂移,從而保證測得數(shù)據(jù)準確;模塊信息設置界面是完成光模塊在出廠前信息設置。軟件運行的過程中用到的數(shù)據(jù)庫是由Access數(shù)據(jù)庫構成。如圖1所示為軟件結構圖。
1.2計算機并口模擬I2C總線
I2C總線由四種信號組成:開始信號、停止信號、響應信號和數(shù)據(jù)發(fā)送。在計算機并口產生這些信號就要對數(shù)據(jù)地址、狀態(tài)地址和控制地址進行程序設計和控制。在LPT1端口中,它們對應的地址分別為0x378、0x379和0x37A。計算機并口中的8個數(shù)據(jù)端口分別對應0x378中的B7~B0;5個狀態(tài)端口分別對應0x379中的B7~B3;4個控制端口分別對應0x37A中的B3~B0。如果在以上地址的某一位上寫1,計算機并口的對應端口就會產生邏輯電平高。I2C總線的SDA和SCL分別需要并口的兩個端口模擬,這是因為計算機并口的特性,對地址中的數(shù)據(jù)的操作要么一直讀操作要么一直寫操作。
對LPT1端口地址操作要使用LabVIEW函數(shù)庫中的Out Port函數(shù)和In Port函數(shù)。Out Port函數(shù)和In Port函數(shù)是在指定的16位I/O端口地址讀取和寫入帶符號的整數(shù)。讀操作要先利用In Port函數(shù)讀取LPT1端口地址上的整數(shù)數(shù)據(jù),再轉化為無符號數(shù)據(jù)并求出特定位的布爾量,最后得到該位對應端口的邏輯電平。寫操作就是先利用In Port函數(shù)讀取LPT1端口地址上的整數(shù)數(shù)據(jù),再轉化為無符號數(shù)據(jù)并修改其中某一位的值,最后利用Out Port函數(shù)把修改后的數(shù)據(jù)轉化為整數(shù)數(shù)據(jù)并寫入LPT1端口地址,從而改變對應端口的邏輯電平。
I2C總線的四種信號通過SDA和SCL的組合形式如下:(1)開始信號:在SCL高電平期間,SDA由高變?yōu)榈?,將產生一個開始信號;(2)停止信號:在SCL高電平期間,SDA由低變高,將產生一個停止信號;(3)應答信號:傳輸一個字節(jié)后的第9個時鐘,若從設備把SDA拉低,表明有應答信號,反之則無;(4)數(shù)據(jù)傳輸:數(shù)據(jù)傳輸過程中,數(shù)據(jù)的改變都必須在SCL低電平期間,在SCL為高電平期間必須保持SDA信號的穩(wěn)定[2]。
按照時序要求依次可以編寫出I2C start、I2C send、I2C ack和I2C stop四種I2C總線信號的vi,其中I2C send這個vi既能發(fā)送地址又能發(fā)送數(shù)據(jù)。最后由這些vi組成如圖2所示的完整I2C總線數(shù)據(jù)傳輸。
1.3 生產者/消費者結構隊列狀態(tài)機
設計模式是在解決問題的過程中,由一些良好思路的經(jīng)驗集成的。在LabVIEW中,它包括結構、函數(shù)、控件和錯誤處理的布局,它形成了一個通用的結構來完成一些常見的任務。設計模式可實現(xiàn)模塊重用,并提高軟件生產效率和質量[3]。
生產者/消費者結構是一種常用的設計模式,它主要用于數(shù)據(jù)采集系統(tǒng)。一般的數(shù)據(jù)采集系統(tǒng)包括數(shù)據(jù)采集、數(shù)據(jù)分析和結果顯示三個步驟。如果將這三個步驟按照常規(guī)的順序執(zhí)行,則數(shù)據(jù)分析導致的時間延遲會增大數(shù)據(jù)采集的周期。采用生產者/消費者結構的數(shù)據(jù)采集系統(tǒng),它通過并行的方式實現(xiàn)多個循環(huán),可以很好地解決這一問題。一個循環(huán)不斷地采集數(shù)據(jù)(生產者),另一個循環(huán)不斷地處理數(shù)據(jù)(消費者),這兩個循環(huán)互相通信,但又不產生干涉。
隊列狀態(tài)機也是一種常用的設計模式,它對經(jīng)典狀態(tài)機做了很大的改進。在經(jīng)典狀態(tài)機中,移位寄存器的狀態(tài)轉移方式受限于每個循環(huán)間隔內一個指定新狀態(tài)或應用程序的狀態(tài)。而隊列狀態(tài)機則通過LabVIEW的隊列結構緩存一個隊列的多狀態(tài),使得應用程序的任何狀態(tài)都可以通過調用Enqueue Element函數(shù)在該隊列的后端增加任意數(shù)量的新狀態(tài),這類似于先進先出緩沖器。
生產者/消費者結構隊列狀態(tài)機最早是由Anthony Lukindo提出和改進,它結合以上兩種設計模式優(yōu)點,其結構示意圖如圖3所示。
從圖中可以看出,該設計模式由四部分組成:隊列引用、事件循環(huán)、主循環(huán)和并行子vi。事件循環(huán)和并行子vi為生產者,主循環(huán)是消費者,生產者和消費者之間的消息與數(shù)據(jù)的傳遞是通過隊列引用來實現(xiàn)的。事件循環(huán)由Event結構和While循環(huán)組成。主循環(huán)由Case結構和While循環(huán)組成,其中Case結構有兩個,分別是主Case結構和錯誤Case結構。隊列引用是由LabVIEW中的隊列操作中的函數(shù)組成,其中最常用的函數(shù)為Obtain Queue、Enqueue Element、Dequeue Element和Release Queue等。圖中的虛線是指并行子vi可以不通過隊列引用而和主循環(huán)進行連接。
生產者/消費者結構隊列狀態(tài)機的實現(xiàn)如下:Obtain Queue函數(shù)和Enqueue Element函數(shù)在While循環(huán)左側初始化隊列。枚舉類型定義控件端子連接到Obtain Queue函數(shù)的數(shù)據(jù)類型端子,這樣就可以指定隊列的數(shù)據(jù)類型。枚舉常量由枚舉類型創(chuàng)建,并連線到Enqueue Element函數(shù)的端子。Initialize狀態(tài)是添加到隊列中的第一項,它是狀態(tài)機執(zhí)行的第一個狀態(tài)。Dequeue Element函數(shù)位于主Case結構之外的錯誤Case結構的NO Error事例中。如果在錯誤簇中沒有出現(xiàn)錯誤,則下一狀態(tài)就會從隊列移出,并傳送到主Case結構的選擇器端子;如果發(fā)生錯誤,則有General Error Handle VI來報告錯誤,并且執(zhí)行Shutdown狀態(tài)。Case結構的每個事例中,事件循環(huán)和并行子vi都可以使用Enqueue Element函數(shù)來增加其他的狀態(tài)。此外,為了能夠立即執(zhí)行,可以使用Enqueue Element At Opposite End函數(shù)在隊列的前端增加一個狀態(tài)。這使得應用程序能夠及時響應高優(yōu)先級的操作或事件。當用戶要退出應用程序時,必須利用Release Queue函數(shù)釋放隊列引用,同時釋放隊列所占用的內存空間。
當隊列中需要傳遞狀態(tài)和數(shù)據(jù)時,隊列元素數(shù)據(jù)類型就需要由一個簇組成,這個簇包括一個與變體打包到一起的枚舉類型定義。通常,該枚舉類型包含了事例選擇器中需要的狀態(tài)。變體用來將數(shù)據(jù)從時間循環(huán)或并行子vi傳遞給主循環(huán),這些數(shù)據(jù)的傳遞體現(xiàn)了生產者/消費者結構。同時,這個變體可以是多種類型的數(shù)據(jù),但是必須為其中每個成員指定一種數(shù)據(jù)類型。
SFP光模塊測試程序首先初始化隊列引用和主界面中的控件,然后進入檢測光模塊。如果檢測到光模塊的插入,則主程序會讀取數(shù)字診斷功能中電壓、溫度和偏置電流等。在大部分時間里,主程序都是在輪詢地讀取這些數(shù)據(jù)。如果用戶在前面板有操作,此時事件循環(huán)將利用Flush Queue函數(shù)把隊列清空,然后加載下幾個狀態(tài),及時地響應用戶的操作并且最后回到讀取數(shù)字診斷功能中模擬量。
2 測試與驗證
2.1測試環(huán)境
測試平臺的硬件包括計算機、測試板、并口線、電源以及待測光模塊。首先在計算機中安裝本文開發(fā)的測試軟件,其次利用并口線把計算機和測試板連接起來,再次把待測光模塊插入到測試版中,并加載電源,最后打開測試軟件進行測試。
連接到I2C總線的器件輸出端要是漏極開路或集電極開路才能執(zhí)行傳輸?shù)墓δ?。因為計算機并口不滿足這兩種結構,所以本設計中在并口外接2N3906使得SDA和SCL滿足集電極開路結構。
2.2 I2C總線驗證
為了保證光模塊測試平臺穩(wěn)定地工作,必須測試I2C總線通信的穩(wěn)定性。利用 I2C總線對EEPROM進行連續(xù)讀或者連續(xù)寫。在圖4中,C1和C2信號是對Z1和Z2信號框內部分的放大,這部分是主設備向從設備寫數(shù)據(jù)。
主設備首先發(fā)送器件地址0xA0,在第9個時鐘,從設備給出了一個拉低SDA的應答信號。主設備然后發(fā)送寄存器地址0x00,同樣得到了應答信號。最后發(fā)送要寫入的數(shù)據(jù)0x55。圖中的兩個時間標尺測量出寫入數(shù)據(jù)操作距離下一次操作的時間,這個時間要大于等于5 ms。重復此讀寫過程10 000次,沒有錯誤則證明I2C總線非常穩(wěn)定。
2.3 光模塊測試軟件的驗證
如圖5所示,是對一個Maxim DS1856方案的光收發(fā)模塊的檢測結果。
其中5個模擬量的監(jiān)控值直接反映光模塊的工作狀態(tài)。表1是DS1856方案實測值與軟件監(jiān)控值對比。
在SFF-8472協(xié)議中規(guī)定了每個模擬量的精度范圍:溫度誤差在±3℃之內;電壓誤差不超過廠家標稱值的3%;偏置電流誤差不超過廠家標稱值的10%;發(fā)射功率誤差在±3 dBm之內;接收功率在±3 dBm之內。通過表1結果顯示,此測試軟件滿足SFF-8472協(xié)議規(guī)定的誤差范圍。
本文使用LabVIEW設計實現(xiàn)了針對SFP光收發(fā)模塊的測試平臺。重點介紹了測試軟件與SFP光模塊的I2C總線通信的實現(xiàn),論述了生產者/消費者結構隊列狀態(tài)機設計模式,提供了對該設計模式的具體實現(xiàn)方法,并把它應用在SFP光模塊測試軟件。該測試平臺已經(jīng)應用到企業(yè)的實際生產過程中,減少了對SFP光模塊測試工作量,提高了測試效率,并且保證了所需的測試精度,具有一定的工程應用價值。
參考文獻
[1] SFF-8472 specification for diagnostic monitoring interface for Optical Transceivers Rev 10.4[S]. 2009-01.
[2] The I2C-Bus specification version 2.1[S]. 2000-01.
[3] Blume, Peter A. The LabVIEW style book[M]. Prentice Hall, 2007-03.
[4] 程社成.帶數(shù)字診斷功能的小封裝光模塊研究[D].武漢:武漢理工大學,2006.