《電子技術(shù)應(yīng)用》
您所在的位置:首頁 > 測試測量 > 設(shè)計應(yīng)用 > 高速誤碼測試系統(tǒng)中的C8051F005運用
高速誤碼測試系統(tǒng)中的C8051F005運用
摘要: 本文根據(jù)Vitesse公司的VSC8228芯片特點,,利用C8051F005單片機設(shè)計出一種價廉的高速誤碼測試儀,。下面將對其軟硬件設(shè)計,,特別是C8051F005與上位機的串口通信以及與VSC8228的SPI通信進行詳細探討,。
Abstract:
Key words :

  隨著通信技術(shù)的不斷發(fā)展,,通信系統(tǒng)信號處理越來越快,。在這種情況下,,對于高速通信系統(tǒng)性能的檢驗,就需要高速誤碼測試儀,。目前市而上已有多種誤碼測試儀,。國內(nèi)產(chǎn)品的信號處理速度較低,而國外產(chǎn)品的功能雖然比較完善,,處理速度很高,,但其價格也相對較高。本文根據(jù)Vitesse公司的VSC8228芯片特點,利用C8051F005單片機設(shè)計出一種價廉的高速誤碼測試儀,。下面將對其軟硬件設(shè)計,特別是C8051F005與上位機的串口通信以及與VSC8228的SPI通信進行詳細探討,。

1誤碼測試系統(tǒng)概述

Cygnal公司的單片機C8051F005具有高速8051微控制器內(nèi)核,,速度可達25MIPS,指令為流水線指令結(jié)構(gòu),,70%的指令的執(zhí)行時間為1個或2個系統(tǒng)時鐘周期,;可片內(nèi)JTAG調(diào)試和邊界掃描,這樣可提供全速,、非侵人式的在系統(tǒng)調(diào)試(不需仿真器),;片內(nèi)有多達60KB的FlashROM和2KB RAM,用戶無需再外擴存儲器,;可同時使用的硬件SMBus(I2C兼容),、SPI及UART串口,4個通用16位計數(shù)器/定時器,。

VSC8228可提供的一個雙通道重發(fā)器或重定時器,,能應(yīng)用于光纖信道、千比特以太網(wǎng),、SONET/SDH以及無限帶寬等多種領(lǐng)域,。設(shè)備支持速率從125Mbps~4.25Gbps。該芯片可以將輸入的串行數(shù)據(jù)在重定時器模式下與本地的參考時鐘同步,,內(nèi)置的碼型產(chǎn)生器與檢測器可以產(chǎn)生與探測27,、223、231的偽隨機碼,,40或64位用戶定義碼型以及光纖信號CRPAT,、CJTPAT、CSPAT碼型,。它含128個寄存器,,可通過SPI或者I2C串行總線設(shè)置相關(guān)寄存器,可以實現(xiàn)誤碼檢測功能,。

誤碼測試系統(tǒng)可分為兩個部分:誤碼測試部分和人機界面,。測試部分由VSC8228芯片來實現(xiàn)。它完成偽隨機碼型的產(chǎn)生,、同步及對比檢測,,計算出誤碼個數(shù)。人機界面子系統(tǒng)在整個測試系統(tǒng)中作為系統(tǒng)控制核心單元,,通過人機界面完成系統(tǒng)作業(yè),。以C8051F005單片機作為人機界面硬件的控制部分,對VSC8228芯片的控制、誤碼率的計算以及測試子系統(tǒng)的各狀態(tài)的顯示都通過PC機的界面來實現(xiàn),。PC界面采用Delphi語言編寫,。

誤碼測試儀的工作流程如下:PC界面通過RS232串口實現(xiàn)與C8051F005的通信,將對VSC8228各寄存器的沒置發(fā)送給C8051F005單片機,,每個控制命令為16位,;單片機通過SPI口將上位機發(fā)送過來的控制命令轉(zhuǎn)發(fā)給VSC8228,完成VSC8228各寄存器的設(shè)置,。為了實時地顯示誤碼測試儀的工作狀態(tài),,單片機每秒掃描一次各寄存器,將其值通過RS232串口上傳到PC界面,。

由此可見,,C8051F005單片機起著VSC8228與上位機通信的橋梁作用,它與上位機的串口通信以及與VSC8228的SPI通信在誤碼測試儀的實現(xiàn)過程中起著十分重要的作用,。下面通過軟硬件設(shè)計詳細分析這兩種通信,。

2 誤碼測試系統(tǒng)的實現(xiàn)

  2.1 硬件設(shè)計

利用C8051F005單片機的串行接口,通過RS232異步通信接口與上位機進行通信,。C8051F005通過串行口直接接收PC上位傳送來的串行數(shù)據(jù),,然后把接收的數(shù)據(jù)存入數(shù)據(jù)存儲器;同樣,,C8051F005通過串行口直接把數(shù)據(jù)傳送給PC機,。系統(tǒng)結(jié)構(gòu)框圖如圖1所示。

  C8051F005有一個特別的交叉開關(guān),,可將數(shù)字I/O資源分配到物理I/O端口引腳,。C8051F005通過設(shè)置交叉開關(guān)來同時使用SMBus(I2C兼容)、SPI及UART串口等,。VSC8228也可通過SPI或者I2C串行總線設(shè)置相關(guān)寄存器,,但由于SPI通信的速率比I2C通信快,因此為了實現(xiàn)誤碼的高速測試,,這里選擇SPI作為C8051F005與VSC8228的通信協(xié)議,。

SPI接口協(xié)議要求接口設(shè)備按主從方式進行配置,且同一時間內(nèi)總線上只能有一個主器件,。一般情況下,,實現(xiàn)SPI接口需要3或4根線。其中:主出從入(MOSI)信號是主器件的輸出和從器件的輸入,,數(shù)據(jù)傳輸時最高位在先,;主人從出(MISO)信號是從器件的輸出和主器件的輸入,數(shù)據(jù)傳輸時也是最高位在先,。當SPI從器件未被選中時,,它將MISO引腳置于高阻狀態(tài)。串行時鐘(SCK)信號是用于同步主器件和從器件之間在MOSI和MISO線上的串行數(shù)據(jù)傳輸。從選擇(NSS)信號是一個輸入信號,,主器件用它來選擇處于從方式的SPI模塊,,在主方式時用于禁止SPI模塊。當處于從方式時,,它被拉為低電平以啟動一次數(shù)據(jù)傳輸,,并在傳輸期間保持低電平。

  誤碼測試系統(tǒng)中,,以C8051F005作為主器件,VSC8228為從器件,,由于NSS為從器件選擇使用,,將單片機的NSS引腳(P0.5)置高,用P2.4引腳與VSC8228的NSS引腳(PIO3)相連,。根據(jù)MOSI及MISO上的數(shù)據(jù)在SCK的哪種極性和相位上有效,,單片機上的SPI通信有四種工作模式;但是VSC8228的SPl只有一種工作模式,,故在對單片機的SPI控制器進行設(shè)置時必須考慮這點,。圖2是VSC8228的SPI通信時序。在SPI通信時,,先傳輸7位地址,,后傳輸讀寫控制位OP(OP為0時表示讀,OP為1時表示寫),,最后傳輸8位數(shù)據(jù),,故SPI通信的命令字長度為16位。

 2.2 下位機軟件設(shè)計

下位機采用中斷方式實現(xiàn)與上位機的通信,,單片機用SPI與VSC8228誤碼測試模塊的通信,。每當串行口接收或發(fā)送完一組串行數(shù)據(jù)時,就產(chǎn)生一個中斷請求,。串行中斷請求在單片機芯片內(nèi)部自動由硬件置位發(fā)生,,具有實時性高的特點。圖3是單片機的控制程序流程,。

對單片機進行程序初始化,,包括看門狗、系統(tǒng)時鐘,、I/O口,、SPI寄存器、UART口等,。C8051F005單片機具有看門狗,,但是看門狗到一定時間,將重啟單片機,為防止這種現(xiàn)象的產(chǎn)生,,初始化里禁止了看門狗,。SPI的初始化主要是對啟動SPI的相關(guān)控制寄存器進行配置。UART的初始化主要是對串口的控制字進行設(shè)置,。I/O口的初始化通過設(shè)置交叉開關(guān)來啟動SPI與UART口,,并將有關(guān)輸出設(shè)置為推挽輸出。

  系統(tǒng)時鐘初始化模塊,,由于是選擇外部晶振作為時鐘源,,根據(jù)C8051F005的要求,在通過外部振蕩器控制寄存器OSCXCN選擇了外部晶振后,,需等待至少1ms后再查詢等待OSCXCN寄存器中的D7位,,即XTLVLD位變?yōu)?,表明外部晶振正在運行并已工作穩(wěn)定,,然后才能通過內(nèi)部振蕩器控制寄存器OSCICN的D3位,,即CLKSL置1來選擇外部晶振。

  C8051F005使用4個特殊功能寄存器來實現(xiàn)對SPI的控制和訪問,。這4個寄存器分別是控制寄存器(SPI0CN),、數(shù)據(jù)寄存器(SPI0DAT)、配置寄存器(SPIOCFG)和時鐘頻率寄存器(SPI0CKR),。當以C8051F005為主器件時,,應(yīng)將主允許標志(MSTEN,SPI0CN.1)置1,,同時將SPI使能SPIEN(SPI0CN.0)置1,。通過CKPHA(SPI0CFG.7)和CKPOL(SPI0CFG.6)可選擇SPI相位與極性,從而實現(xiàn)SPI通信的四種模式,,但因為VSC8228只支持一種方式,,所以將它們同時置為0,則空閑時SCK為低,,此時的系統(tǒng)將在上升沿發(fā)送數(shù)據(jù),,下降沿接收數(shù)據(jù)(時序圖見圖2)。由于在MCU中,,SCK的頻率可從系統(tǒng)時鐘分頻得到,,因此該頻率可由下式給出:

  其中fsysclk是系統(tǒng)時鐘頻率,SPI0CKR是SPI0CKR寄存器中的8位值,。

為了防止上次測試對本次的影響,,在程序的初始化之后,對VSC8228寫入重肩命令,,這樣每次運行程序都將VSC8228的寄存器恢復(fù)為默認值,。界面發(fā)送的數(shù)據(jù)為16位,,其中8位地址,8位數(shù)據(jù),,而且每個數(shù)據(jù)是一個字符,。為讓單片機識別控制命令已發(fā)完,最后一個16位數(shù)據(jù)設(shè)為FFFF,。另外,,每16位數(shù)據(jù)之間加入了100 ms的延時,這樣Spcomm控件就會把每16位數(shù)據(jù)當成1幀,,單片機也能夠正確地接收所有數(shù)據(jù),。

單片機用中斷的方法來接收界面?zhèn)鬟^來的數(shù)據(jù)。每接到一個數(shù)據(jù),,即一個字符,,就執(zhí)行中斷子程序,將接收到的數(shù)據(jù)的最低位存人數(shù)組,。串口中斷子程序流程如圖4所示。當接收到16個,,就接收完1幀,,轉(zhuǎn)入執(zhí)行主程序去對收到的16位進行處理。處理過程就是將收到的16個數(shù)據(jù)(存放在數(shù)組中),,通過移位跟“或”運算,,綜合成16位的數(shù)據(jù)。然后,,通過移位運算,,取高8位作為地址,低8位作為數(shù)據(jù),。對于接收的16位數(shù)據(jù),,如果不是FFFF,則將提取出來的8位數(shù)據(jù),,發(fā)送給提取出來的8位地址對應(yīng)的寄存器,;如果接收的16位數(shù)據(jù)為FFFF,表示所有的控制命令已經(jīng)發(fā)完,,這時VSC8228的全部寄存器設(shè)置完畢,,VSC8228的碼型產(chǎn)生模塊以及檢測模塊開始工作。此時,,單片機每秒掃描一次所有寄存器的值,,并將其值通過串口傳給界面,界面對串口傳送過來的數(shù)據(jù)進行處理,。

 本設(shè)計中,,SPI的數(shù)據(jù)傳輸過程如下:

 ?、?關(guān)閉中斷允許。

② MCU將VSC8228的NSS拉低(即置P2.4=0),,以選中從器件VSC8228,。

③ 將待發(fā)送的數(shù)據(jù)寫入數(shù)據(jù)寄存器(SPI0DAT),即寫發(fā)送緩沖器,。如果SPI移位寄存器為空,,發(fā)送緩沖器中的數(shù)據(jù)字節(jié)被傳送到移位寄存器,數(shù)據(jù)傳輸開始,。

④ 在SCK上提供串行時鐘,,同時在MOSI線上串行移出數(shù)據(jù)。傳輸結(jié)束后,,SPIF(SPI0CN.7)標志被置1,。

⑤ 傳輸結(jié)束,將NSS拉高,,打開中斷允許,。

以下是SPI寫VSC8228測試程序的關(guān)鍵代碼:

2.3 上位機軟件設(shè)計

上位機主要實現(xiàn)以下功能:顯示當前日期和時間;根據(jù)檢測需要設(shè)置檢測參數(shù)(產(chǎn)生碼型,、檢測碼型,、速率、輸出去重,、擺動輸入均衡,、探測門限等);運行時間及BER的計算,,控制按鈕及LED顯示檢測狀態(tài),。狀態(tài)燈可以顯示的狀態(tài)有“無信號”、“同步態(tài)”,、“失同步態(tài)”與“等待態(tài)”等,。它是在WindowsXP環(huán)境下采用Delphi語言編寫的。首先在Delphi里加載串行通信功能的SPCOMM控件,,它使用非常方便,。由于Delphi采用事件驅(qū)動模式,程序員只需要對Delphi組件的屬性,、事件進行編程,,然后再由這些組件對相應(yīng)的事件進行響應(yīng)。這樣就使得各個事件彼此完全獨立,,減少事件間的耦合性,,可以大大提高程序的穩(wěn)定性和可靠性,同時簡化程序的編碼過程,。


SPCOMM應(yīng)用的核心在于主線程,、讀線程和寫線程之間的消息傳遞機制,,而通信數(shù)據(jù)相關(guān)信息的傳遞也是以消息傳遞的方式進行的。在使用SPCOMM進行串口通信編程時,,需特別注意以下兩個問題:首先,,SPCOMM是通過ReadIntervalTimeout屬性的設(shè)置來確定所接收到的數(shù)據(jù)是否屬于同一幀數(shù)據(jù)的,其默認值是100 ms,。也就是說,,只要任何兩個字節(jié)到達的時間間隔小于100 ms,都被認為是屬于同一幀數(shù)據(jù),。另外,,SPCOMM的默認屬性設(shè)置是支持軟件流控制的,用于流控制的字符是13H(XoffChar)和11H(XonChar),,當單片機以二進制方式發(fā)送數(shù)據(jù)時,,必須禁用SPCOMM對于軟件流控制的支持,即Inx_XonXoff-Flow屬性設(shè)為False,,否則,,在數(shù)據(jù)幀中出現(xiàn)的13H、11H會被SPCOMM作為控制字符而加以忽略,。

由于單片機的SPI口對VSC8228進行控制時須向每個寄存器發(fā)控制字,,所以界面就要求發(fā)送1個地址加1個字節(jié)數(shù)據(jù)的形式,這樣就有16位,;同時為單片機能夠方便地分清每個幀(1字節(jié)地址加1字節(jié)數(shù)據(jù)),每次發(fā)送1幀就延時100 ms,。單片機每秒掃描1次VSC8228的全部寄存器,,并將數(shù)據(jù)傳送給界面,因此,,界面首先要一幀一幀地識別出來,,然后對于某些地址的數(shù)據(jù)進行特定的操作。

誤碼率是誤碼個數(shù)與碼總個數(shù)的比值,。碼總個數(shù)是檢測時間和速率的乘積,。對不同的速率有不同的總數(shù)。由此,,得出誤碼率,。

關(guān)鍵代碼如下:

3 誤碼測試性能

本設(shè)計經(jīng)實驗測試,上位機與下位機的串口通信以及MCU與誤碼測試模塊的通信都能正確傳輸,。為適應(yīng)高速測試,,目前SPI的傳輸速率(指SCK頻率)為2 MHz。根據(jù)本方案設(shè)計誤碼檢測儀已運用于EPON光收發(fā)模塊的連續(xù)碼測試,。與臺灣宜捷威科技的FMTS-3000以及安立的MP1630的測試比較結(jié)果看,,本誤碼測試儀其誤碼數(shù)量級與上述兩種設(shè)備基本一致,,但是不能支持突發(fā)誤碼的測試。對突發(fā)誤碼測試的支持是項目組下一步研究的目標,。


  結(jié) 語

VSC8228芯片支持速率多樣,,它內(nèi)置PBRS及其他碼型的產(chǎn)生及探測模塊。筆者利用該特點設(shè)計出一種基于C8051F005單片機的廉價高速誤碼儀,,探討了利用Delphi里的SPCOMM控件來實現(xiàn)PC機與C8051F005之間串行通信的方法,,以及C8051F005與VSC8228的SPI通信過程。設(shè)計的誤碼儀支持的測試碼型有27,、223,、231的偽隨機碼,40或64位用戶定義碼型以及光纖信號CRPAT,、CJT-PAT,、CSPAT碼型等,一次可測誤碼高達43億個,,可測碼速高達4.25 Gbps在EPON光收發(fā)模塊中實現(xiàn)了誤碼測試,,效果較好,而且功耗低,,有較高的實用價值,。

 

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