摘要:通過研究三線串行接口的構成原理, 設計了一種基于MSP430 單片機和FPGA 的三線串行接口測試儀。該測試儀利用MSP430 單片機來控制三線傳輸功能,由FPGA 產生三線傳輸時序,由相應的上位機軟件來測試數據通信。經測試,該測試儀具有使用方便、功能齊全、性能穩定等特點, 能夠較好應用于航天領域的三線串行接口通信測試中。
三線串行接口是一種廣泛應用在航天工程領域的簡單串行通信接口, 是航天單機產品遙測遙控通信鏈路的重要環節。三線串行接口具有電路簡單、時序便于實現、波特率可調等諸多優點。
傳統三線串行接口的設計一般是采用數字電路搭接而成, 雖然能滿足工程設計要求, 但是體積較大, 耗費資源過多, 而且靈活性欠佳。為了對三線串行接口電路進行優化, 同時對三線串行通信進行測試, 本設計采用FPGA 技術設計了三線串行接口的時序電路, 將三線時序功能集成到單片FPGA中, 大大減小了電路單元體積。同時, 采用單片機MSP430 來控制FPGA 中產生的三線串行時序, 單片機通過RS232C 通信方式與PC 進行通信, 進而在上位機軟件中直接配置三線串行接口的時序參數和通信數據, 使得測試三線串行接口通信的方便性和靈活性大大增強。
1 三線串行通信原理
三線串行接口通信是一種主從同步串行通信, 其數據發送端和接收端有共同的時鐘源, 數據接收端采用光耦隔離, 一般時鐘頻率在100 kHz~1 MHz 之間。三線串行接口有門控信號EN、時鐘信號CLK、串行數據信號DATA 三根信號線。三線串行接口包括發送和接收兩種工作模式, 圖1 給出了三線串行通信發送模式的一種時序圖。
門控信號EN 的下降沿表明一次數據傳輸的開始,之后保持低電平有效, 數據在時鐘信號的下降沿采樣,每個時鐘周期接收或者發送一位串行數據, 直到數據發送完成。在數據發送或接收的整個過程中, 門控信號一直處于低電平不變。
2 三線串行接口測試儀的總體方案設計
本設計將三線串行接口測試儀劃分為三大功能單元:FPGA 時序產生單元、MSP430 控制單元、上位機軟件單元。圖2 是三線串行接口測試儀的總體方案設計框圖。
FPGA 時序單元主要用于產生三線串行時序, 選用Xilinx 公司的Spartan-3A 系列FPGA, 其上電配置由一片PROM 來實現。FPGA 時序單元通過Verilog 語言編寫的有限狀態機來實現各種時序, 有限狀態機屬于一種時序邏輯電路, 是協調相關信號動作、完成特定操作的控制中心[ 3]。有限狀態機一般由三部分組成: 當前狀態、下一狀態和輸出邏輯。本設計采用摩爾型有限狀態機來實現各種模式的三線接口時序, 所謂摩爾型狀態機指輸出值與當前的狀態有關, 與當前的輸入無關。
MSP430 控制單元主要用于對FPGA 的各種功能模塊進行控制, 通過APB 總線的方式訪問FPGA 內部的寄存器來實現。單片機通過C 語言編程的方式靈活地修改各個時序參數, 并和上位機軟件進行通信。
上位機軟件采用微軟公司的VC++ 集成開發環境開發, 本設計將軟件劃分成幾個小功能模塊, 并將部分模塊做成動態鏈接庫的形式供主程序調用。上位機軟件主要包括主接收程序、數據發送程序、三線串行接口配置程序、RS232 通信動態鏈接庫。
此外, 電路中用到了多組電源,FPGA 供電電壓為1.2 V, 單片機供電電壓為3.3 V, 三線串行接口的數據接收端一般需要光耦隔離, 本設計選用的是5 V 供電的光耦,RS232 通信芯片也是5 V 供電, 所有這些電壓都由相應的電源芯片直接產生。
3 三線串行接口測試儀設計方案的實現
3.1 三線串行接口時序產生單元的FPGA 實現
設計的三線串行接口電路要求能夠實現三線串行時序, 同時要求具備時序參數( 比如時鐘頻率、采樣方式等) 可調、數據收發等功能, 根據上述目標, 本設計將FPGA 時序產生單元劃分成以下幾個模塊:three -wireregister interface ( 三線寄存器接口模塊)、three-wire send( 三線發送模塊)、three -wire receive ( 三線接收模塊) 和three-wire clock( 三線時鐘產生模塊)。
Three-wire register interface : 該模塊主要用于FPGA與單片機MSP430 的通信。本設計將FPGA 當作一個外部設備掛接在MSP430 的I/O 端口,MSP430 控制I/O 端口通過特定的總線時序來訪問FPGA 內部的配置寄存器。總線時序采用APB 總線時序。APB 總線是ARM 體系結構里片內芯片互聯的一種高性能總線, 其控制信號線包括: 復位信號RST、系統時鐘SYSCLK、讀信號READ、寫信號WRITE、片選信號PSEL、使能信號PEN,另外還包括一個8 位的地址總線ADDR[7:0] 和8 位數據總線DATA[7:0]。圖3 給出了三線寄存器接口APB總線連接圖。
Three-wire send : 該模塊主要用于三線串行接口發送數據時的時序產生, 三線發送模塊時序采用摩爾型狀態機實現, 該狀態機共有7 個狀態:IDLE 狀態、START狀態、DELAY1 狀態、SEND 狀態、DELAY2 狀態、END 狀態和DELAY3 狀態, 各個具體狀態轉換如圖4 所示。
每個狀態都有一個狀態指示控制信號, 以SEND 狀態為例, 其指示控制信號為send_run 。當狀態機進入SEND 狀態后,send_run 變為1 , 然后SEND 狀態的電路開始工作。當該電路執行完畢后會將send_run 變為0時, 表明退出SEND 狀態, 狀態機進入下一狀態。其余狀態類似。各狀態定義如下:
IDLE 狀態, 為空閑等待狀態, 即系統上電后的狀態機的初始狀態, 當系統完成初始化或者完成一次完整的時序功能后狀態機都會返回IDLE 狀態。
START 狀態, 表示三線串行通信開始, 在檢測到三線串行接口的使能數據線EN 有效后狀態機進入到START 狀態。
DELAY1 狀態, 表示三線串行通信數據使能后, 時鐘信號相對使能信號的延遲時間, 該狀態實際上起到一個延時的作用。
SEND 狀態, 表示三線串行通信數據開始發送, 該狀態下三線串行數據將開始移位發送。
DELAY2 狀態, 表示三線串行通信數據發送完一個字節后的間隔時間,該狀態實際上起到一個延時的作用。
END 狀態, 這是表示三線串行通信數據發送結束。
DELAY3 狀態, 這是表示三線串行通信數據發送結束后, 使能信號變成無效后相對最后一個時鐘觸發沿的延遲時間。
評論
查看更多