摘要:SPI接口是摩托羅拉公司推出的一種高速的、全雙工、同步通用串行接口,常用于MCU與外圍設(shè)備之間的通信,現(xiàn)已發(fā)展成為一種工業(yè)標(biāo)準(zhǔn)。集成SPI接口的外圍芯片十分豐富,應(yīng)用非常廣泛。本文首先論述了SPI總線的物理接口、工作原理,其次結(jié)合實(shí)際工程,基于CPLD平臺(tái)設(shè)計(jì)了SPI從機(jī)功能接口,并對(duì)其中各個(gè)功能模塊的設(shè)計(jì)思路進(jìn)行了說(shuō)明,最后在CPLD中進(jìn)行了仿真驗(yàn)證,結(jié)果完全符合設(shè)計(jì)要求。
關(guān)鍵詞:SPI接口 從機(jī) CPLD SPI控制
中圖分類號(hào):TP312 文獻(xiàn)標(biāo)識(shí)碼:A 文章編號(hào):1007-9416(2015)09-0000-00
Abstract:The serial peripheral interface (SPI) is a synchronous serial communication interface with high speed and full duplex mode, primarily used for the communication between MCU and peripheral device. SPI is developed by Motolora and become a industrial standard. The chips integrated with SPI are abundant and widely used. In this paper, firstly the physical interface and principle of SPI bus are discussed. Secondly, according to the actual project, the slave device SPI is designed based on CPLD platform, and the basic design idea of each function module is also present. Finally, the designed SPI is validated by CPLD simulation, and result indicates the designed SPI fully meets the design requirements.
Keywods:SPI interface , slave device, CPLD, SPI control
SPI(Serial Peripheral Interface)總線是一種同步串行外設(shè)接口,它可以使MCU與各種外圍設(shè)備以串行方式進(jìn)行通信以交換信息。SPI總線應(yīng)用廣泛,已經(jīng)成為很多器件的標(biāo)準(zhǔn)配置,可以直接和各個(gè)廠家生產(chǎn)的多種標(biāo)準(zhǔn)外圍器件直接接口。[1]
其它常用的串行接口還有I2C、UART這兩種接口,這三種接口互有優(yōu)缺點(diǎn)。與I2C接口相比,SPI接口速度更快、協(xié)議更簡(jiǎn)單、并且是全雙工的,但連線也相對(duì)多一些。與UART接口相比,SPI更靈活,因?yàn)槠涫褂弥髟O(shè)備的時(shí)鐘進(jìn)行同步,所以兩個(gè)比特之間的時(shí)間間隔可以是任意的。在點(diǎn)對(duì)點(diǎn)的通信中,SPI接口不需要進(jìn)行尋址操作,且為全雙工通信,顯得簡(jiǎn)單高效。
1 SPI總線工作原理[2][3]
SPI總線一般以主/從模式工作,通常有一個(gè)主設(shè)備和一個(gè)或多個(gè)從設(shè)備,數(shù)據(jù)傳輸由主機(jī)控制,典型SPI結(jié)構(gòu)框圖如圖1所示。
圖1 典型SPI總線結(jié)構(gòu)圖
SPI總線包含四條信號(hào)線,分別是sclk、miso、mosi和cs,其中,sclk為數(shù)據(jù)傳輸時(shí)鐘,由主機(jī)產(chǎn)生; miso是從機(jī)輸出,主機(jī)輸入數(shù)據(jù)線;mosi是主機(jī)輸出,從機(jī)輸入數(shù)據(jù)線;cs是從設(shè)備片選信號(hào),由主機(jī)控制,當(dāng)連接多個(gè)從設(shè)備時(shí),通過(guò)該信號(hào)選擇不同的從設(shè)備。
SPI總線是按字節(jié)發(fā)送數(shù)據(jù)的,主機(jī)和從機(jī)內(nèi)部都包含一個(gè)8位串行移位寄存器,在時(shí)鐘信號(hào)控制下,寄存器內(nèi)的數(shù)據(jù)由高到低輸出至各自的數(shù)據(jù)線,8個(gè)時(shí)鐘后,兩個(gè)寄存器內(nèi)的數(shù)據(jù)就被交換了。如果只進(jìn)行寫操作,主機(jī)只需忽略接收到的字節(jié);反之,若主機(jī)要讀取從機(jī)的一個(gè)字節(jié),就必須發(fā)送一個(gè)空字節(jié)來(lái)引發(fā)從機(jī)的傳輸。當(dāng)主機(jī)發(fā)送一個(gè)連續(xù)的數(shù)據(jù)流時(shí),可以進(jìn)行多字節(jié)傳輸,在這種傳輸方式下,從機(jī)的片選端必須在整個(gè)傳輸過(guò)程中保持低電平。
根據(jù)串行同步時(shí)鐘極性和相位不同,SPI有四種工作方式。時(shí)鐘極性(CPOL)為0時(shí),同步時(shí)鐘的空閑狀態(tài)為低電平,為1時(shí),同步時(shí)鐘的空閑狀態(tài)為高電平。時(shí)鐘相位(CPHA)為0時(shí),在同步時(shí)鐘的第一個(gè)跳變沿采樣數(shù)據(jù),為1時(shí),在同步時(shí)鐘的第二個(gè)跳變沿采樣數(shù)據(jù)。因?yàn)橹髟O(shè)備時(shí)鐘極性和相位都是以從設(shè)備為基準(zhǔn)的,所以主設(shè)備時(shí)鐘極性的配置和從設(shè)備時(shí)鐘極性的配置是相反的。
SPI工作原理:以寄存器CPOL=1、CPHA=0為例,當(dāng)要傳輸數(shù)據(jù)時(shí),主機(jī)控制cs信號(hào)有效,sclk管腳輸出時(shí)鐘信號(hào),在時(shí)鐘上升沿,主機(jī)將需要發(fā)送的數(shù)據(jù)鎖存在mosi線上,同時(shí)從miso線上讀取從機(jī)發(fā)送的數(shù)據(jù);在時(shí)鐘下降沿,從機(jī)將需要發(fā)送的數(shù)據(jù)鎖存在miso線上,同時(shí)從mosi線上讀取主機(jī)發(fā)送的數(shù)據(jù),完成一次數(shù)據(jù)交換后,SPI總線重新回到空閑狀態(tài),等待下一次通信的發(fā)起。
2 SPI總線硬件設(shè)計(jì)和軟件實(shí)現(xiàn)
某項(xiàng)目的控制器硬件采用ARM+CPLD的技術(shù)方案,其中ARM為主控器,主要實(shí)現(xiàn)流程控制等, CPLD為從控制器。ARM與CPLD之間主要通過(guò)SPI接口進(jìn)行通信,CPLD根據(jù)ARM發(fā)送的命令產(chǎn)生各模塊的控制邏輯,完成一百多路IO控制,并且實(shí)現(xiàn)從一路UART接口到20路半雙工RS485接口的收發(fā)切換。ARM與CPLD之間的硬件接口如圖2所示。[4]
圖2 ARM與CPLD之間硬件接口
特別的,在ARM和CPLD之間設(shè)計(jì)了一個(gè)中斷信號(hào),用來(lái)提示SPI主機(jī)ARM,SPI從機(jī)CPLD有數(shù)據(jù)需要讀取,請(qǐng)求發(fā)起SPI通信。
當(dāng)CPLD作為SPI接口從機(jī)使用時(shí),需要在CPLD中實(shí)現(xiàn)sclk下降沿檢測(cè)、SPI控制模塊。
2.1 sclk下降沿檢測(cè)[5]
因?yàn)锳RM在sclk的上升沿讀取CPLD輸出的數(shù)據(jù),所以CPLD必須在sclk的下降沿發(fā)數(shù),上升沿時(shí)數(shù)據(jù)穩(wěn)定。同時(shí)為了在一個(gè)sclk時(shí)鐘周期只接收或發(fā)送一個(gè)比特的數(shù)據(jù),需要使該信號(hào)僅保持一個(gè)clk周期,該信號(hào)的產(chǎn)生方式如圖3所示。在clk信號(hào)驅(qū)動(dòng)下,當(dāng)該下降沿檢測(cè)信號(hào)有效時(shí)(定為高電平有效),CPLD采集miso線上的數(shù)據(jù),并將需要發(fā)送的數(shù)據(jù)輸出至mosi。
圖3 sclk信號(hào)邊沿檢測(cè)仿真圖
2.2 SPI控制模塊
如圖4為從機(jī)軟件設(shè)計(jì)流程圖。CPLD在系統(tǒng)上電后進(jìn)入idle狀態(tài),idle表示空閑狀態(tài),當(dāng)CPLD有數(shù)據(jù)需要傳輸時(shí),通過(guò)int向ARM發(fā)送中斷信號(hào);當(dāng)檢測(cè)到cs信號(hào)有效時(shí),進(jìn)入spi數(shù)據(jù)傳輸狀態(tài);同步sclk信號(hào),在下降沿,首先發(fā)送數(shù)據(jù)信息字節(jié),通過(guò)數(shù)據(jù)信息字節(jié)通知ARM這次總共需要發(fā)送幾個(gè)字節(jié)的數(shù)據(jù),然后依次發(fā)送后續(xù)數(shù)據(jù),直到數(shù)據(jù)傳輸完成。在上升沿,接收ARM發(fā)送的數(shù)據(jù),并按字節(jié)存入RAM。
圖4 從機(jī)軟件流程圖
3 SPI接口軟件的設(shè)計(jì)仿真[6]
對(duì)該項(xiàng)目SPI控制程序進(jìn)行了仿真,其仿真波形如圖5所示。這個(gè)SPI接口每次只有8bit,8bit代表地址還是數(shù)據(jù)由用戶自己的協(xié)議來(lái)定,每啟動(dòng)一次接口模塊,無(wú)論是主設(shè)備還是從設(shè)備都會(huì)寫出一個(gè)數(shù)據(jù)和接收一個(gè)數(shù)據(jù)。
接收數(shù)據(jù)流程是:當(dāng)cs下降沿到來(lái)時(shí)啟動(dòng)SPI接收控制模塊,每個(gè)sclk下降沿讀取1bit數(shù)據(jù),ovalid有效時(shí)(高)讀取odata數(shù)據(jù)(8bit)。發(fā)送流程是:先確定從設(shè)備要寫出的數(shù)據(jù),再給主設(shè)備中斷信號(hào),主設(shè)備響應(yīng)中斷,啟動(dòng)一個(gè)讀取流程,就可以讀取從設(shè)備的一個(gè)8bit數(shù)據(jù)。
圖5 SPI控制程序仿真波形
4 結(jié)語(yǔ)
本文基于Altera公司的CPLD平臺(tái),用VerilogHdl語(yǔ)言以有限狀態(tài)機(jī)的形式設(shè)計(jì)了一種符合SPI總線規(guī)范的從機(jī)模塊,并進(jìn)行了仿真,得到的仿真波形符合設(shè)計(jì)要求。該模塊已經(jīng)下載到芯片中實(shí)現(xiàn)了SPI接口功能,驗(yàn)證了設(shè)計(jì)的正確性,具有一定的實(shí)用價(jià)值。
參考文獻(xiàn)
[1] 楊美剛. SPI 接口及其在數(shù)據(jù)交換中的應(yīng)用[J].通信技術(shù),2007.
YANG MEI-gang.SPI Interface and Its Application in Data Exchange[J]. Communications Technology.2007.
[2] 張道德.單片機(jī)接口技術(shù)[M].中國(guó)水利水電出版社,2007.
ZHANG DAO-de. Single chip microcomputer interface technology[M]. China Water&Power Press.2007.
[3] 左東廣,魏瑞軒.SPI接口技術(shù)及應(yīng)用[J].工業(yè)控制計(jì)算機(jī),2001.
ZUO GUANG-dong,WEI RUI-xuan. SPI Technology And Its Application[J]. Industrial Control Computer.2001.
[4] 崔微,秦征宇.基于ARM Linux的SPI驅(qū)動(dòng)實(shí)現(xiàn)[J].重慶科技學(xué)院學(xué)報(bào)(自然科學(xué)版),2009.
QIN Wei,QIN ZHENG-yu. Implementation of SPI Driver Based on ARM Linux[J]. Journal of Chongqing University of Science and Technology(Natural Sciences Edition).2009.
[5] 李仁發(fā),凌純清,徐成.VHDL數(shù)字系統(tǒng)設(shè)計(jì)[M].電子工業(yè)出版社,2004.
LI REN-fa,LING CHUN-qing,XU Cheng. Digital System Design with VHDL[M].Publishing House of Electronics Industry.2004.
[6] 于斌,米秀杰. ModelSim 電子系統(tǒng)分析及仿真[M].電子工業(yè)出版社,2011.
YU Bin,MI XIU-jie. ModelSim electronic system analysis and simulation[M]. Publishing House of Electronics Industry.2011.
收稿日期:2015-08-07
作者簡(jiǎn)介:黃勇(1982—),女,湖南湘潭人,學(xué)歷:碩士學(xué)歷,職稱:工程師,研究方向:發(fā)射控制專業(yè)。
數(shù)字技術(shù)與應(yīng)用2015年9期