《電子技術(shù)應(yīng)用》
您所在的位置:首頁 > 測(cè)試測(cè)量 > 設(shè)計(jì)應(yīng)用 > 基于LabVIEW的SFP光模塊測(cè)試平臺(tái)的設(shè)計(jì)與實(shí)現(xiàn)
基于LabVIEW的SFP光模塊測(cè)試平臺(tái)的設(shè)計(jì)與實(shí)現(xiàn)
來源:電子技術(shù)應(yīng)用2011年第4期
曾 劍,, 周劍揚(yáng), 劉舜奎
廈門大學(xué) 電子工程系,, 福建 廈門 361005
摘要: 介紹了一種利用LabVIEW構(gòu)建SFP(Small Form-factor Pluggable)光模塊測(cè)試平臺(tái)的方法,。測(cè)試平臺(tái)通過讀寫計(jì)算機(jī)并口來映射地址上的數(shù)據(jù),控制并口端口的邏輯電平實(shí)現(xiàn)計(jì)算機(jī)并口模擬I2C總線,。計(jì)算機(jī)利用模擬的I2C總線與SFP光模塊實(shí)現(xiàn)通信,。分析了生產(chǎn)者/消費(fèi)者結(jié)構(gòu)隊(duì)列狀態(tài)機(jī)并用于設(shè)計(jì)中,該設(shè)計(jì)模式可以及時(shí)響應(yīng)前面板動(dòng)作或外部事件,并且使得狀態(tài)機(jī)的狀態(tài)變換更加靈活多變,。
中圖分類號(hào): TN929.11
文獻(xiàn)標(biāo)識(shí)碼: A
文章編號(hào): 0258-7998(2011)04-0067-03
Design and implementation of testing platform of small form-factor pluggable transceiver based on LabVIEW
Zeng Jian, Zhou Jianyang, Liu Shunkui
Department of Electronic Engineering, Xiamen University, Xiamen 361005, China
Abstract: This paper introduces a method of constructing a SFP(small form-factor pluggable) transceiver testing platform by using LabVIEW. The testing platform controls the logic level of parallel port to simulate I2C Bus by reading and writing the data of address which map to the parallel port. The computer can attach to the SFP transceiver by means of the I2C Bus. This paper also analyzes and applies queued state machine-producer consumer architecture, this kind of design style can respond to the action of front panel or external happening without delay. What’s more, it can make transformation of state more flexible and changeable.
Key words : SFP transceiver; queued state machine-producer consumer architecture; parallel port simulate I2C bus


     隨著近幾年光通信的迅速發(fā)展,光通信接入網(wǎng)對(duì)實(shí)現(xiàn)光電,、電光轉(zhuǎn)換的光收發(fā)模塊的要求越來越高,,光收發(fā)模塊的測(cè)試也越來越復(fù)雜。早期一般使用Visual Basic,、Visual C++開發(fā)測(cè)試軟件,,存在開發(fā)周期長(zhǎng)、測(cè)試效率低等問題,,本文提出了使用LabVIEW虛擬儀器技術(shù)來完成測(cè)試工作的方法,,解決了測(cè)試成本高、測(cè)試效率低,、測(cè)試系統(tǒng)松散等問題,,同時(shí)它還具備遠(yuǎn)程測(cè)試以及儀器定制或自制等特點(diǎn)。虛擬儀器技術(shù)已經(jīng)深遠(yuǎn)地影響著測(cè)試測(cè)量領(lǐng)域,,是企業(yè)和科研單位的測(cè)試工作的重要解決方案之一,。本文正是利用此項(xiàng)技術(shù)解決了SFP光模塊測(cè)試平臺(tái)開發(fā)的幾個(gè)關(guān)鍵問題。
1 SFP光模塊測(cè)試軟件的設(shè)計(jì)
1.1軟件結(jié)構(gòu)

  軟件由四個(gè)界面構(gòu)成,,實(shí)時(shí)監(jiān)控界面,、閾值設(shè)置界面、校準(zhǔn)界面和光模塊信息設(shè)置界面,。實(shí)時(shí)監(jiān)控界面是軟件的主界面,,它顯示數(shù)字診斷功能[1]中的五個(gè)模擬量與其Alarm和Warning標(biāo)志;閾值設(shè)置界面的功能是設(shè)定Alarm與Warning閾值,,當(dāng)實(shí)時(shí)監(jiān)控值不在閾值內(nèi)時(shí)會(huì)出現(xiàn)工作異常警示,;校準(zhǔn)界面主要是解決數(shù)據(jù)漂移,從而保證測(cè)得數(shù)據(jù)準(zhǔn)確,;模塊信息設(shè)置界面是完成光模塊在出廠前信息設(shè)置,。軟件運(yùn)行的過程中用到的數(shù)據(jù)庫是由Access數(shù)據(jù)庫構(gòu)成。如圖1所示為軟件結(jié)構(gòu)圖,。

1.2計(jì)算機(jī)并口模擬I2C總線
    I2C總線由四種信號(hào)組成:開始信號(hào),、停止信號(hào)、響應(yīng)信號(hào)和數(shù)據(jù)發(fā)送,。在計(jì)算機(jī)并口產(chǎn)生這些信號(hào)就要對(duì)數(shù)據(jù)地址,、狀態(tài)地址和控制地址進(jìn)行程序設(shè)計(jì)和控制。在LPT1端口中,,它們對(duì)應(yīng)的地址分別為0x378,、0x379和0x37A。計(jì)算機(jī)并口中的8個(gè)數(shù)據(jù)端口分別對(duì)應(yīng)0x378中的B7~B0,;5個(gè)狀態(tài)端口分別對(duì)應(yīng)0x379中的B7~B3,;4個(gè)控制端口分別對(duì)應(yīng)0x37A中的B3~B0。如果在以上地址的某一位上寫1,,計(jì)算機(jī)并口的對(duì)應(yīng)端口就會(huì)產(chǎn)生邏輯電平高,。I2C總線的SDA和SCL分別需要并口的兩個(gè)端口模擬,這是因?yàn)橛?jì)算機(jī)并口的特性,,對(duì)地址中的數(shù)據(jù)的操作要么一直讀操作要么一直寫操作,。
    對(duì)LPT1端口地址操作要使用LabVIEW函數(shù)庫中的Out Port函數(shù)和In Port函數(shù)。Out Port函數(shù)和In Port函數(shù)是在指定的16位I/O端口地址讀取和寫入帶符號(hào)的整數(shù),。讀操作要先利用In Port函數(shù)讀取LPT1端口地址上的整數(shù)數(shù)據(jù),,再轉(zhuǎn)化為無符號(hào)數(shù)據(jù)并求出特定位的布爾量,最后得到該位對(duì)應(yīng)端口的邏輯電平,。寫操作就是先利用In Port函數(shù)讀取LPT1端口地址上的整數(shù)數(shù)據(jù),,再轉(zhuǎn)化為無符號(hào)數(shù)據(jù)并修改其中某一位的值,最后利用Out Port函數(shù)把修改后的數(shù)據(jù)轉(zhuǎn)化為整數(shù)數(shù)據(jù)并寫入LPT1端口地址,,從而改變對(duì)應(yīng)端口的邏輯電平,。
    I2C總線的四種信號(hào)通過SDA和SCL的組合形式如下:(1)開始信號(hào):在SCL高電平期間,SDA由高變?yōu)榈?,將產(chǎn)生一個(gè)開始信號(hào);(2)停止信號(hào):在SCL高電平期間,,SDA由低變高,將產(chǎn)生一個(gè)停止信號(hào);(3)應(yīng)答信號(hào):傳輸一個(gè)字節(jié)后的第9個(gè)時(shí)鐘,,若從設(shè)備把SDA拉低,,表明有應(yīng)答信號(hào),反之則無;(4)數(shù)據(jù)傳輸:數(shù)據(jù)傳輸過程中,,數(shù)據(jù)的改變都必須在SCL低電平期間,,在SCL為高電平期間必須保持SDA信號(hào)的穩(wěn)定[2]。
    按照時(shí)序要求依次可以編寫出I2C start,、I2C send,、I2C ack和I2C stop四種I2C總線信號(hào)的vi,其中I2C send這個(gè)vi既能發(fā)送地址又能發(fā)送數(shù)據(jù),。最后由這些vi組成如圖2所示的完整I2C總線數(shù)據(jù)傳輸,。

1.3 生產(chǎn)者/消費(fèi)者結(jié)構(gòu)隊(duì)列狀態(tài)機(jī)
    設(shè)計(jì)模式是在解決問題的過程中,由一些良好思路的經(jīng)驗(yàn)集成的,。在LabVIEW中,,它包括結(jié)構(gòu)、函數(shù),、控件和錯(cuò)誤處理的布局,,它形成了一個(gè)通用的結(jié)構(gòu)來完成一些常見的任務(wù)。設(shè)計(jì)模式可實(shí)現(xiàn)模塊重用,,并提高軟件生產(chǎn)效率和質(zhì)量[3],。
    生產(chǎn)者/消費(fèi)者結(jié)構(gòu)是一種常用的設(shè)計(jì)模式,,它主要用于數(shù)據(jù)采集系統(tǒng)。一般的數(shù)據(jù)采集系統(tǒng)包括數(shù)據(jù)采集,、數(shù)據(jù)分析和結(jié)果顯示三個(gè)步驟,。如果將這三個(gè)步驟按照常規(guī)的順序執(zhí)行,則數(shù)據(jù)分析導(dǎo)致的時(shí)間延遲會(huì)增大數(shù)據(jù)采集的周期。采用生產(chǎn)者/消費(fèi)者結(jié)構(gòu)的數(shù)據(jù)采集系統(tǒng),它通過并行的方式實(shí)現(xiàn)多個(gè)循環(huán),,可以很好地解決這一問題,。一個(gè)循環(huán)不斷地采集數(shù)據(jù)(生產(chǎn)者),另一個(gè)循環(huán)不斷地處理數(shù)據(jù)(消費(fèi)者),這兩個(gè)循環(huán)互相通信,但又不產(chǎn)生干涉。
    隊(duì)列狀態(tài)機(jī)也是一種常用的設(shè)計(jì)模式,,它對(duì)經(jīng)典狀態(tài)機(jī)做了很大的改進(jìn),。在經(jīng)典狀態(tài)機(jī)中,移位寄存器的狀態(tài)轉(zhuǎn)移方式受限于每個(gè)循環(huán)間隔內(nèi)一個(gè)指定新狀態(tài)或應(yīng)用程序的狀態(tài),。而隊(duì)列狀態(tài)機(jī)則通過LabVIEW的隊(duì)列結(jié)構(gòu)緩存一個(gè)隊(duì)列的多狀態(tài),,使得應(yīng)用程序的任何狀態(tài)都可以通過調(diào)用Enqueue Element函數(shù)在該隊(duì)列的后端增加任意數(shù)量的新狀態(tài),這類似于先進(jìn)先出緩沖器。
  生產(chǎn)者/消費(fèi)者結(jié)構(gòu)隊(duì)列狀態(tài)機(jī)最早是由Anthony Lukindo提出和改進(jìn),,它結(jié)合以上兩種設(shè)計(jì)模式優(yōu)點(diǎn),,其結(jié)構(gòu)示意圖如圖3所示。

    從圖中可以看出,該設(shè)計(jì)模式由四部分組成:隊(duì)列引用,、事件循環(huán),、主循環(huán)和并行子vi。事件循環(huán)和并行子vi為生產(chǎn)者,,主循環(huán)是消費(fèi)者,,生產(chǎn)者和消費(fèi)者之間的消息與數(shù)據(jù)的傳遞是通過隊(duì)列引用來實(shí)現(xiàn)的。事件循環(huán)由Event結(jié)構(gòu)和While循環(huán)組成,。主循環(huán)由Case結(jié)構(gòu)和While循環(huán)組成,,其中Case結(jié)構(gòu)有兩個(gè),分別是主Case結(jié)構(gòu)和錯(cuò)誤Case結(jié)構(gòu),。隊(duì)列引用是由LabVIEW中的隊(duì)列操作中的函數(shù)組成,,其中最常用的函數(shù)為Obtain Queue、Enqueue Element,、Dequeue Element和Release Queue等,。圖中的虛線是指并行子vi可以不通過隊(duì)列引用而和主循環(huán)進(jìn)行連接。
    生產(chǎn)者/消費(fèi)者結(jié)構(gòu)隊(duì)列狀態(tài)機(jī)的實(shí)現(xiàn)如下:Obtain Queue函數(shù)和Enqueue Element函數(shù)在While循環(huán)左側(cè)初始化隊(duì)列,。枚舉類型定義控件端子連接到Obtain Queue函數(shù)的數(shù)據(jù)類型端子,,這樣就可以指定隊(duì)列的數(shù)據(jù)類型。枚舉常量由枚舉類型創(chuàng)建,,并連線到Enqueue Element函數(shù)的端子,。Initialize狀態(tài)是添加到隊(duì)列中的第一項(xiàng),它是狀態(tài)機(jī)執(zhí)行的第一個(gè)狀態(tài)。Dequeue Element函數(shù)位于主Case結(jié)構(gòu)之外的錯(cuò)誤Case結(jié)構(gòu)的NO Error事例中,。如果在錯(cuò)誤簇中沒有出現(xiàn)錯(cuò)誤,,則下一狀態(tài)就會(huì)從隊(duì)列移出,并傳送到主Case結(jié)構(gòu)的選擇器端子,;如果發(fā)生錯(cuò)誤,,則有General Error Handle VI來報(bào)告錯(cuò)誤,,并且執(zhí)行Shutdown狀態(tài),。Case結(jié)構(gòu)的每個(gè)事例中,事件循環(huán)和并行子vi都可以使用Enqueue Element函數(shù)來增加其他的狀態(tài),。此外,,為了能夠立即執(zhí)行,可以使用Enqueue Element At Opposite End函數(shù)在隊(duì)列的前端增加一個(gè)狀態(tài),。這使得應(yīng)用程序能夠及時(shí)響應(yīng)高優(yōu)先級(jí)的操作或事件,。當(dāng)用戶要退出應(yīng)用程序時(shí),必須利用Release Queue函數(shù)釋放隊(duì)列引用,,同時(shí)釋放隊(duì)列所占用的內(nèi)存空間,。
    當(dāng)隊(duì)列中需要傳遞狀態(tài)和數(shù)據(jù)時(shí),隊(duì)列元素?cái)?shù)據(jù)類型就需要由一個(gè)簇組成,,這個(gè)簇包括一個(gè)與變體打包到一起的枚舉類型定義,。通常,該枚舉類型包含了事例選擇器中需要的狀態(tài),。變體用來將數(shù)據(jù)從時(shí)間循環(huán)或并行子vi傳遞給主循環(huán),,這些數(shù)據(jù)的傳遞體現(xiàn)了生產(chǎn)者/消費(fèi)者結(jié)構(gòu)。同時(shí),,這個(gè)變體可以是多種類型的數(shù)據(jù),,但是必須為其中每個(gè)成員指定一種數(shù)據(jù)類型。
  SFP光模塊測(cè)試程序首先初始化隊(duì)列引用和主界面中的控件,,然后進(jìn)入檢測(cè)光模塊,。如果檢測(cè)到光模塊的插入,則主程序會(huì)讀取數(shù)字診斷功能中電壓,、溫度和偏置電流等,。在大部分時(shí)間里,主程序都是在輪詢地讀取這些數(shù)據(jù),。如果用戶在前面板有操作,,此時(shí)事件循環(huán)將利用Flush Queue函數(shù)把隊(duì)列清空,然后加載下幾個(gè)狀態(tài),,及時(shí)地響應(yīng)用戶的操作并且最后回到讀取數(shù)字診斷功能中模擬量,。
2 測(cè)試與驗(yàn)證
2.1測(cè)試環(huán)境

  測(cè)試平臺(tái)的硬件包括計(jì)算機(jī)、測(cè)試板、并口線,、電源以及待測(cè)光模塊,。首先在計(jì)算機(jī)中安裝本文開發(fā)的測(cè)試軟件,其次利用并口線把計(jì)算機(jī)和測(cè)試板連接起來,,再次把待測(cè)光模塊插入到測(cè)試版中,,并加載電源,最后打開測(cè)試軟件進(jìn)行測(cè)試,。
  連接到I2C總線的器件輸出端要是漏極開路或集電極開路才能執(zhí)行傳輸?shù)墓δ?。因?yàn)橛?jì)算機(jī)并口不滿足這兩種結(jié)構(gòu),所以本設(shè)計(jì)中在并口外接2N3906使得SDA和SCL滿足集電極開路結(jié)構(gòu),。
2.2 I2C總線驗(yàn)證
  為了保證光模塊測(cè)試平臺(tái)穩(wěn)定地工作,,必須測(cè)試I2C總線通信的穩(wěn)定性。利用 I2C總線對(duì)EEPROM進(jìn)行連續(xù)讀或者連續(xù)寫,。在圖4中,,C1和C2信號(hào)是對(duì)Z1和Z2信號(hào)框內(nèi)部分的放大,這部分是主設(shè)備向從設(shè)備寫數(shù)據(jù),。
    主設(shè)備首先發(fā)送器件地址0xA0,,在第9個(gè)時(shí)鐘,從設(shè)備給出了一個(gè)拉低SDA的應(yīng)答信號(hào),。主設(shè)備然后發(fā)送寄存器地址0x00,同樣得到了應(yīng)答信號(hào),。最后發(fā)送要寫入的數(shù)據(jù)0x55。圖中的兩個(gè)時(shí)間標(biāo)尺測(cè)量出寫入數(shù)據(jù)操作距離下一次操作的時(shí)間,這個(gè)時(shí)間要大于等于5 ms,。重復(fù)此讀寫過程10 000次,,沒有錯(cuò)誤則證明I2C總線非常穩(wěn)定。
2.3 光模塊測(cè)試軟件的驗(yàn)證
    如圖5所示,,是對(duì)一個(gè)Maxim DS1856方案的光收發(fā)模塊的檢測(cè)結(jié)果,。

    其中5個(gè)模擬量的監(jiān)控值直接反映光模塊的工作狀態(tài)。表1是DS1856方案實(shí)測(cè)值與軟件監(jiān)控值對(duì)比,。
    在SFF-8472協(xié)議中規(guī)定了每個(gè)模擬量的精度范圍:溫度誤差在±3℃之內(nèi),;電壓誤差不超過廠家標(biāo)稱值的3%;偏置電流誤差不超過廠家標(biāo)稱值的10%;發(fā)射功率誤差在±3 dBm之內(nèi),;接收功率在±3 dBm之內(nèi),。通過表1結(jié)果顯示,此測(cè)試軟件滿足SFF-8472協(xié)議規(guī)定的誤差范圍。

    本文使用LabVIEW設(shè)計(jì)實(shí)現(xiàn)了針對(duì)SFP光收發(fā)模塊的測(cè)試平臺(tái),。重點(diǎn)介紹了測(cè)試軟件與SFP光模塊的I2C總線通信的實(shí)現(xiàn),,論述了生產(chǎn)者/消費(fèi)者結(jié)構(gòu)隊(duì)列狀態(tài)機(jī)設(shè)計(jì)模式,提供了對(duì)該設(shè)計(jì)模式的具體實(shí)現(xiàn)方法,,并把它應(yīng)用在SFP光模塊測(cè)試軟件,。該測(cè)試平臺(tái)已經(jīng)應(yīng)用到企業(yè)的實(shí)際生產(chǎn)過程中,減少了對(duì)SFP光模塊測(cè)試工作量,提高了測(cè)試效率,,并且保證了所需的測(cè)試精度,,具有一定的工程應(yīng)用價(jià)值。
參考文獻(xiàn)
[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].武漢:武漢理工大學(xué),,2006.

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