文獻(xiàn)標(biāo)識(shí)碼: A
文章編號(hào): 0258-7998(2013)02-0082-04
三線串行接口是一種廣泛應(yīng)用在航天工程領(lǐng)域的簡(jiǎn)單串行通信接口,是航天單機(jī)產(chǎn)品遙測(cè)遙控通信鏈路的重要環(huán)節(jié)。三線串行接口具有電路簡(jiǎn)單、時(shí)序便于實(shí)現(xiàn)、波特率可調(diào)等諸多優(yōu)點(diǎn)[1]。
傳統(tǒng)三線串行接口的設(shè)計(jì)一般是采用數(shù)字電路搭接而成,雖然能滿足工程設(shè)計(jì)要求,但是體積較大,耗費(fèi)資源過多,而且靈活性欠佳。為了對(duì)三線串行接口電路進(jìn)行優(yōu)化,同時(shí)對(duì)三線串行通信進(jìn)行測(cè)試,本設(shè)計(jì)采用FPGA技術(shù)設(shè)計(jì)了三線串行接口的時(shí)序電路,將三線時(shí)序功能集成到單片F(xiàn)PGA中,大大減小了電路單元體積。同時(shí),采用單片機(jī)MSP430來控制FPGA中產(chǎn)生的三線串行時(shí)序,單片機(jī)通過RS232C通信方式與PC進(jìn)行通信,進(jìn)而在上位機(jī)軟件中直接配置三線串行接口的時(shí)序參數(shù)和通信數(shù)據(jù),使得測(cè)試三線串行接口通信的方便性和靈活性大大增強(qiáng)。
1 三線串行通信原理
三線串行接口通信是一種主從同步串行通信,其數(shù)據(jù)發(fā)送端和接收端有共同的時(shí)鐘源,數(shù)據(jù)接收端采用光耦隔離,一般時(shí)鐘頻率在100 kHz~1 MHz之間。三線串行接口有門控信號(hào)EN、時(shí)鐘信號(hào)CLK、串行數(shù)據(jù)信號(hào)DATA三根信號(hào)線。三線串行接口包括發(fā)送和接收兩種工作模式,圖1給出了三線串行通信發(fā)送模式的一種時(shí)序圖。
門控信號(hào)EN的下降沿表明一次數(shù)據(jù)傳輸?shù)拈_始,之后保持低電平有效,數(shù)據(jù)在時(shí)鐘信號(hào)的下降沿采樣,每個(gè)時(shí)鐘周期接收或者發(fā)送一位串行數(shù)據(jù),直到數(shù)據(jù)發(fā)送完成。在數(shù)據(jù)發(fā)送或接收的整個(gè)過程中,門控信號(hào)一直處于低電平不變[2]。
2 三線串行接口測(cè)試儀的總體方案設(shè)計(jì)
本設(shè)計(jì)將三線串行接口測(cè)試儀劃分為三大功能單元:FPGA時(shí)序產(chǎn)生單元、MSP430控制單元、上位機(jī)軟件單元。圖2是三線串行接口測(cè)試儀的總體方案設(shè)計(jì)框圖。 FPGA時(shí)序單元主要用于產(chǎn)生三線串行時(shí)序,選用Xilinx公司的Spartan-3A系列FPGA,其上電配置由一片PROM來實(shí)現(xiàn)。FPGA時(shí)序單元通過Verilog語(yǔ)言編寫的有限狀態(tài)機(jī)來實(shí)現(xiàn)各種時(shí)序,有限狀態(tài)機(jī)屬于一種時(shí)序邏輯電路,是協(xié)調(diào)相關(guān)信號(hào)動(dòng)作、完成特定操作的控制中心[3]。有限狀態(tài)機(jī)一般由三部分組成:當(dāng)前狀態(tài)、下一狀態(tài)和輸出邏輯。本設(shè)計(jì)采用摩爾型有限狀態(tài)機(jī)來實(shí)現(xiàn)各種模式的三線接口時(shí)序,所謂摩爾型狀態(tài)機(jī)指輸出值與當(dāng)前的狀態(tài)有關(guān),與當(dāng)前的輸入無關(guān)。
MSP430控制單元主要用于對(duì)FPGA的各種功能模塊進(jìn)行控制,通過APB總線的方式訪問FPGA內(nèi)部的寄存器來實(shí)現(xiàn)。單片機(jī)通過C語(yǔ)言編程的方式靈活地修改各個(gè)時(shí)序參數(shù),并和上位機(jī)軟件進(jìn)行通信。
上位機(jī)軟件采用微軟公司的VC++集成開發(fā)環(huán)境開發(fā),本設(shè)計(jì)將軟件劃分成幾個(gè)小功能模塊,并將部分模塊做成動(dòng)態(tài)鏈接庫(kù)的形式供主程序調(diào)用。上位機(jī)軟件主要包括主接收程序、數(shù)據(jù)發(fā)送程序、三線串行接口配置程序、RS232通信動(dòng)態(tài)鏈接庫(kù)。
此外,電路中用到了多組電源,F(xiàn)PGA供電電壓為1.2 V,單片機(jī)供電電壓為3.3 V,三線串行接口的數(shù)據(jù)接收端一般需要光耦隔離,本設(shè)計(jì)選用的是5 V供電的光耦,RS232通信芯片也是5 V供電,所有這些電壓都由相應(yīng)的電源芯片直接產(chǎn)生。
3 三線串行接口測(cè)試儀設(shè)計(jì)方案的實(shí)現(xiàn)
3.1 三線串行接口時(shí)序產(chǎn)生單元的FPGA實(shí)現(xiàn)
設(shè)計(jì)的三線串行接口電路要求能夠?qū)崿F(xiàn)三線串行時(shí)序,同時(shí)要求具備時(shí)序參數(shù)(比如時(shí)鐘頻率、采樣方式等)可調(diào)、數(shù)據(jù)收發(fā)等功能,根據(jù)上述目標(biāo),本設(shè)計(jì)將FPGA時(shí)序產(chǎn)生單元?jiǎng)澐殖梢韵聨讉€(gè)模塊:three-wire register interface(三線寄存器接口模塊)、three-wire send(三線發(fā)送模塊)、 three-wire receive(三線接收模塊)和three-wire clock(三線時(shí)鐘產(chǎn)生模塊)。
Three-wire register interface:該模塊主要用于FPGA與單片機(jī)MSP430的通信。本設(shè)計(jì)將FPGA當(dāng)作一個(gè)外部設(shè)備掛接在MSP430的I/O端口,MSP430控制I/O端口通過特定的總線時(shí)序來訪問FPGA內(nèi)部的配置寄存器??偩€時(shí)序采用APB總線時(shí)序。APB總線是ARM體系結(jié)構(gòu)里片內(nèi)芯片互聯(lián)的一種高性能總線,其控制信號(hào)線包括:復(fù)位信號(hào)RST、系統(tǒng)時(shí)鐘SYSCLK、讀信號(hào)READ、寫信號(hào)WRITE、片選信號(hào)PSEL、使能信號(hào)PEN,另外還包括一個(gè)8位的地址總線ADDR[7:0]和8位數(shù)據(jù)總線DATA[7:0][4]。圖3給出了三線寄存器接口APB總線連接圖。
Three-wire send:該模塊主要用于三線串行接口發(fā)送數(shù)據(jù)時(shí)的時(shí)序產(chǎn)生,三線發(fā)送模塊時(shí)序采用摩爾型狀態(tài)機(jī)實(shí)現(xiàn),該狀態(tài)機(jī)共有7個(gè)狀態(tài):IDLE狀態(tài)、START狀態(tài)、DELAY1狀態(tài)、SEND狀態(tài)、DELAY2狀態(tài)、END狀態(tài)和DELAY3狀態(tài),各個(gè)具體狀態(tài)轉(zhuǎn)換如圖4所示。
每個(gè)狀態(tài)都有一個(gè)狀態(tài)指示控制信號(hào),以SEND狀態(tài)為例,其指示控制信號(hào)為send_run。當(dāng)狀態(tài)機(jī)進(jìn)入SEND狀態(tài)后,send_run變?yōu)?,然后SEND狀態(tài)的電路開始工作。當(dāng)該電路執(zhí)行完畢后會(huì)將send_run變?yōu)?時(shí),表明退出SEND狀態(tài),狀態(tài)機(jī)進(jìn)入下一狀態(tài)。其余狀態(tài)類似。各狀態(tài)定義如下:
IDLE狀態(tài),為空閑等待狀態(tài),即系統(tǒng)上電后的狀態(tài)機(jī)的初始狀態(tài),當(dāng)系統(tǒng)完成初始化或者完成一次完整的時(shí)序功能后狀態(tài)機(jī)都會(huì)返回IDLE狀態(tài)。
START狀態(tài),表示三線串行通信開始,在檢測(cè)到三線串行接口的使能數(shù)據(jù)線EN有效后狀態(tài)機(jī)進(jìn)入到START狀態(tài)。
DELAY1狀態(tài),表示三線串行通信數(shù)據(jù)使能后,時(shí)鐘信號(hào)相對(duì)使能信號(hào)的延遲時(shí)間,該狀態(tài)實(shí)際上起到一個(gè)延時(shí)的作用。
SEND狀態(tài),表示三線串行通信數(shù)據(jù)開始發(fā)送,該狀態(tài)下三線串行數(shù)據(jù)將開始移位發(fā)送。
DELAY2狀態(tài),表示三線串行通信數(shù)據(jù)發(fā)送完一個(gè)字節(jié)后的間隔時(shí)間,該狀態(tài)實(shí)際上起到一個(gè)延時(shí)的作用。
END狀態(tài),這是表示三線串行通信數(shù)據(jù)發(fā)送結(jié)束。
DELAY3狀態(tài),這是表示三線串行通信數(shù)據(jù)發(fā)送結(jié)束后,使能信號(hào)變成無效后相對(duì)最后一個(gè)時(shí)鐘觸發(fā)沿的延遲時(shí)間。
Three-wire receive:當(dāng)三線串行接口的使能信號(hào)線有效后(高電平有效或低電平有效),在同步時(shí)鐘的觸發(fā)下(上升沿或下降沿)對(duì)數(shù)據(jù)信號(hào)線進(jìn)行采樣,采樣得到的數(shù)據(jù)位經(jīng)過一個(gè)8位移位寄存器實(shí)現(xiàn)串/并轉(zhuǎn)換,轉(zhuǎn)換后的8位并行數(shù)據(jù)存放到接收FIFO中。接收FIFO的大小為128 B,接收FIFO的使用使得三線串行接口具備了數(shù)據(jù)緩存功能,不必?fù)?dān)心單片機(jī)和FPGA接口速度匹配問題導(dǎo)致的數(shù)據(jù)丟失。當(dāng)三線串行接口的使能信號(hào)由有效變成無效時(shí),接收模塊向系統(tǒng)發(fā)送“三線數(shù)據(jù)接收結(jié)束”中斷,該中斷信號(hào)直接與單片機(jī)的外部中斷連接,從而單片機(jī)可以快速響應(yīng)該中斷通過APB總線讀取接收FIFO中的數(shù)據(jù)。圖5是三線接收模塊的構(gòu)成框圖。
Three-wire clock三線時(shí)鐘模塊:該模塊實(shí)際上是一個(gè)時(shí)鐘分頻模塊。由于FPGA系統(tǒng)采用的系統(tǒng)時(shí)鐘頻率為50 MHz,本設(shè)計(jì)需要的三線串行模塊的時(shí)鐘頻率是由系統(tǒng)時(shí)鐘頻率經(jīng)分頻得到[5]。為了實(shí)現(xiàn)可調(diào)的三線時(shí)鐘頻率,要求分頻系數(shù)可調(diào)。分頻系數(shù)存儲(chǔ)于一個(gè)32 bit的分頻寄存器中,通過三線串行接口模塊中的寄存器配置能修改該分頻系數(shù)。
通過ISE自帶的ISim仿真器對(duì)三線串行接口時(shí)序產(chǎn)生單元做了功能仿真,仿真圖如圖6所示。
3.2 單片機(jī)控制三線串行接口寄存器
MSP430單片機(jī)在測(cè)試儀中起到控制和配置三線串行通信參數(shù)的作用,這是通過單片機(jī)讀寫APB總線上掛接的三線串行接口配置寄存器組來實(shí)現(xiàn)的。本設(shè)計(jì)自行定義了配置寄存器的地址和功能。以三線串行接口LINE1寄存器組為例來介紹配置寄存器:LINE1寄存器組包括了發(fā)送相關(guān)的7個(gè)寄存器,分別用于控制三線串行接口的發(fā)送參數(shù)。如表1所示,LINE1_CLK寄存器是一個(gè)32位的寄存器,其訪問地址為0x14,屬于LINE1寄存器組,通過配置LINE1_CLK寄存器可以很容易調(diào)整三線串行接口的時(shí)鐘頻率,其調(diào)整范圍可以從0~1 MHz,這可以通過調(diào)整分頻系數(shù)寄存器來計(jì)算。
3.3上位機(jī)軟件設(shè)計(jì)
上位機(jī)軟件主要?jiǎng)澐殖蓭讉€(gè)模塊:數(shù)據(jù)收發(fā)單元、配置文件、RS232通信動(dòng)態(tài)鏈接庫(kù)、圖形用戶接口。其中圖形用戶接口是軟件的主程序,在該程序中可以調(diào)用其他程序[6]。比如可以調(diào)用數(shù)據(jù)發(fā)送程序來發(fā)送三線串行數(shù)據(jù),也可以調(diào)用配置程序來配置三線串行接口的通信參數(shù)等。圖7是上位機(jī)軟件的系統(tǒng)架構(gòu)圖。
三線串行接口配置軟件功能包括調(diào)整三線串行總線頻率f、調(diào)整三線時(shí)序中的t1、t2、t3以及總線信息設(shè)置等。三線發(fā)送軟件功能包括數(shù)據(jù)發(fā)送的模式和方式,如手動(dòng)發(fā)送、自動(dòng)發(fā)送等模式,以ASCII或HEX方式發(fā)送等。
本文通過介紹三線串行接口通信原理,給出了三線串行通信接口測(cè)試儀的硬件電路和軟件設(shè)計(jì)。針對(duì)傳統(tǒng)三線串行接口電路資源占用過多且不夠靈活的缺點(diǎn),構(gòu)建了基于MSP430單片機(jī)和FPGA的三線串行通信測(cè)試儀,詳述了其組成模塊及工作方式。本方案設(shè)計(jì)合理可行,優(yōu)點(diǎn)突出,滿足了實(shí)際應(yīng)用要求。目前,此測(cè)試儀已研制出樣機(jī)并成功應(yīng)用于某航天型號(hào)項(xiàng)目的通信測(cè)試平臺(tái)中。
參考文獻(xiàn)
[1] 楊承富,徐志軍. SPI總線接口的FPGA設(shè)計(jì)與實(shí)現(xiàn)[J].現(xiàn)代電子技術(shù),2004,27(2):73-74.
[2] 馮春陽(yáng),張遂南,王瑋,等.基于FPGA的三線制同步串行通信控制器設(shè)計(jì)[J].電子技術(shù)應(yīng)用,2009,35(9):54-56.
[3] 田耘,徐文波.Xilinx FPGA 開發(fā)實(shí)用教程[M].北京:清華大學(xué)出版社,2008.
[4] MAXIM Corp.SPI/I2C Bus Lines Control Multiple Peripherals[EB/OL].http://www.maxim-ic.com/an4042.2007.
[5] HUANG R W, HUANG H W. Development of real time monitoring system using controller area network[J]. Materials Science Forum,2006(1):505-507.
[6] 夏宇聞.Verilog數(shù)字系統(tǒng)設(shè)計(jì)教程[M].北京:北京航空航天大學(xué)出版社,2003.