摘 要:本文根據(jù)SPI同步串行接口的通信協(xié)議,介紹了在CPLD中利用VHDL語言實(shí)現(xiàn)PC/104總線擴(kuò)展SPI接口的設(shè)計(jì)原理和編程思想。通過該方法的介紹,使得那些沒有SPI接口功能的處理器和控制器能夠擴(kuò)展SPI接口,以便同外部設(shè)備進(jìn)行數(shù)據(jù)交換。并給出了VHDL語言的源代碼程序。
關(guān)鍵詞:SPI接口;CPLD;PC/104總線;接口設(shè)計(jì);VHDL
0 引言
近年來,帶有SPI總線接口的器件越來越多,該器件可以共用SPI總線,十分方便的組成多個(gè)帶有SPI總線接口的系統(tǒng)。盡管這種總線結(jié)構(gòu)沒有并行總線那樣大的吞吐能力,但由于連接線和連接引腳少,因此其構(gòu)成的系統(tǒng)價(jià)格降低,器件間總線連接簡單,結(jié)構(gòu)緊湊,而且在總線上增加器件不影響系統(tǒng)的正常工作,系統(tǒng)修改和可擴(kuò)張性好。
PC/104與標(biāo)準(zhǔn)臺式PC(PC/AT)體系無論是硬件還是軟件上都完全兼容。在形態(tài)上,PC/104是十分緊湊的、自棧式、模塊化結(jié)構(gòu)。如今利用PC/104總線來制作各種各樣的設(shè)備越拉越多,在使用的過程中,經(jīng)常要用到具有SPI總線接口的器件。本文將介紹一種基于CPLD來實(shí)現(xiàn)PC/104總線擴(kuò)展SPI接口的設(shè)計(jì)方案。
1 SPI總線接口及時(shí)序
SPI(Serial Peripheral Interface)總線接口是一種同步串行數(shù)據(jù)接口。 這一通訊接口采用單獨(dú)的三根信號線(SCLK、MOSI、MISO)傳送數(shù)據(jù)及同步時(shí)鐘,可以實(shí)現(xiàn)全雙工通信,由CS片選線實(shí)現(xiàn)多機(jī)通信或擴(kuò)展多片SPI芯片。
SPI模塊為了和外設(shè)進(jìn)行數(shù)據(jù)交換,根據(jù)外設(shè)工作要求,其輸出串行同步時(shí)鐘極性和相位可以進(jìn)行配置,時(shí)鐘極性(CPOL)對傳輸協(xié)議沒有重大的影響。如果CPOL=0,串行同步時(shí)鐘的空閑狀態(tài)為低電平;如果CPOL=1,串行同步時(shí)鐘的空閑狀態(tài)為高電平。時(shí)鐘相位(CPHA)能夠配置用于選擇兩種不同的傳輸協(xié)議之一進(jìn)行數(shù)據(jù)傳輸。如果CPHA=0,在串行同步時(shí)鐘的第一個(gè)跳變沿(上升或下降)數(shù)據(jù)被采樣;如果CPHA=1,在串行同步時(shí)鐘的第二個(gè)跳變沿(上升或下降)數(shù)據(jù)被采樣。SPI主模塊和與之通信的外設(shè)間時(shí)鐘相位和極性應(yīng)該一致。SPI 接口時(shí)序如圖1、圖2所示。
2 設(shè)計(jì)方案
本文以PC/104總線與多個(gè)SPI接口模塊為例,說明基于CPLD的SPI總線接口設(shè)計(jì)方案。通過CPLD整合時(shí)序?qū)崿F(xiàn)PC/104總線與SPI總線的轉(zhuǎn)換,滿足SPI總線的時(shí)序要求。
利用CPLD具有以下優(yōu)點(diǎn):①采用CPLD可以根據(jù)需要定義輸入輸出腳,方便PCB板布局和走線;②采用CPLD時(shí)不必?fù)?dān)心設(shè)計(jì)中所采用器件的種類、數(shù)量,可以任意定義所需各種器件,從而優(yōu)化電路性能;③采用CPLD可以通過軟件對電路進(jìn)行仿真,方便電路調(diào)試;④采用CPLD可以在線修改其內(nèi)部邏輯,升級或修改可不改動外部電路。
CPLD芯片選用ALTERA公司的EPM7064SLC84-10,該芯片具有基于EEPROM的第二代MAX結(jié)構(gòu),支持通過JTAG引腳實(shí)現(xiàn)在系統(tǒng)編程。擁有64個(gè)宏單元,4個(gè)邏輯陣列塊,1250個(gè)可用門單元,支持5V/3.3V多電壓IO接口,可提供68個(gè)用戶IO引腳
2.1 系統(tǒng)的結(jié)構(gòu)設(shè)計(jì)
系統(tǒng)的基本功能是通過CPLD來實(shí)現(xiàn)PC/104總線與SPI總線的數(shù)據(jù)交換。系統(tǒng)的結(jié)構(gòu)框圖如圖3所示。系統(tǒng)主要由兩部分組成:一是PC/104總線與CPLD的接口;另一是SPI接口。為了能在PC/104總線制定的時(shí)刻讀/寫SPI接口的數(shù)據(jù),使用PC/104總線的讀寫信號、同步時(shí)鐘、數(shù)據(jù)總線和地址總線。
2.2 SPI接口的設(shè)計(jì)結(jié)構(gòu)
基于CPLD設(shè)計(jì)的SPI接口其目的在于為PC/104處理器擴(kuò)展SPI接口的功能。能夠?qū)崿F(xiàn)PC/104總線與SPI總線之間的通信。為了滿足擴(kuò)展SPI接口功能,基于CPLD的SPI接口必須具有以下功能:①與PC/104總線的接口功能;②多位外部從機(jī)選擇功能;③時(shí)鐘極性和相位選擇不同,有四種傳輸模式功能;④SPI數(shù)據(jù)傳送完成標(biāo)志。在SPI接口中,芯片EPM7128SLC-84的I/O接口被定義為SPI接口的控制線、數(shù)據(jù)線和地址線等。SPI接口的結(jié)構(gòu)框圖如圖4所示。在我們設(shè)計(jì)的速率校準(zhǔn)裝置的SPI接口中,狀態(tài)端RDY和片選端CS已經(jīng)夠用。如果外部有更多的SPI接口模塊,我們可以通過軟件的編程與設(shè)置,擴(kuò)展更多的狀態(tài)端RDY和片選端CS,并共用時(shí)鐘線和數(shù)據(jù)線,實(shí)現(xiàn)擴(kuò)展具有SPI接口的外部設(shè)備。
圖
3 時(shí)序
PC/104總線對SPI總線的訪問很簡單,只需對SPI接口模塊內(nèi)的數(shù)據(jù)寄存器(30AH)、控制寄存器(304H)以及狀態(tài)寄存器(300H)進(jìn)行讀寫。其中控制寄存器功能有中斷使能位、MOSI高阻位、時(shí)鐘極性與相位以及片選信號;狀態(tài)寄存器可以讀取RDY的狀態(tài)以及中斷標(biāo)志。下面以讀和寫兩種時(shí)序來說明PC/104總線對SPI接口訪問時(shí)SPI接口的時(shí)序圖。
在對SPI接口寫數(shù)據(jù)時(shí),它的工作過程是先向控制寄存器內(nèi)寫入控制字,以確定工作方式。然后再向數(shù)據(jù)寄存器寫入要發(fā)送的數(shù)據(jù),工作時(shí)序圖5所示。
在對SPI接口讀數(shù)據(jù)時(shí),同樣需要向控制寄存器寫入控制字,以確定其工作方式,并使MOSI處于高阻狀態(tài)。然后向數(shù)據(jù)寄存器內(nèi)寫入任意值,其目的是產(chǎn)生同步時(shí)鐘脈沖以及移位寄存器開始工作,以使外部MISO信號傳送到移位寄存器內(nèi)。當(dāng)IRQ為高電平,說明數(shù)據(jù)接收完成,即可讀取移位寄存器內(nèi)的數(shù)據(jù)即為SPI接口發(fā)送





