摘要:SPI接口是摩托羅拉公司推出的一種高速的、全雙工、同步通用串行接口,常用于MCU與外圍設(shè)備之間的通信,現(xiàn)已發(fā)展成為一種工業(yè)標準。集成SPI接口的外圍芯片十分豐富,應(yīng)用非常廣泛。本文首先論述了SPI總線的物理接口、工作原理,其次結(jié)合實際工程,基于CPLD平臺設(shè)計了SPI從機功能接口,并對其中各個功能模塊的設(shè)計思路進行了說明,最后在CPLD中進行了仿真驗證,結(jié)果完全符合設(shè)計要求。
關(guān)鍵詞:SPI接口 從機 CPLD SPI控制
中圖分類號:TP312 文獻標識碼:A 文章編號: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è)備以串行方式進行通信以交換信息。SPI總線應(yīng)用廣泛,已經(jīng)成為很多器件的標準配置,可以直接和各個廠家生產(chǎn)的多種標準外圍器件直接接口。[1]
其它常用的串行接口還有I2C、UART這兩種接口,這三種接口互有優(yōu)缺點。與I2C接口相比,SPI接口速度更快、協(xié)議更簡單、并且是全雙工的,但連線也相對多一些。與UART接口相比,SPI更靈活,因為其使用主設(shè)備的時鐘進行同步,所以兩個比特之間的時間間隔可以是任意的。在點對點的通信中,SPI接口不需要進行尋址操作,且為全雙工通信,顯得簡單高效。
1 SPI總線工作原理[2][3]
SPI總線一般以主/從模式工作,通常有一個主設(shè)備和一個或多個從設(shè)備,數(shù)據(jù)傳輸由主機控制,典型SPI結(jié)構(gòu)框圖如圖1所示。
圖1 典型SPI總線結(jié)構(gòu)圖
SPI總線包含四條信號線,分別是sclk、miso、mosi和cs,其中,sclk為數(shù)據(jù)傳輸時鐘,由主機產(chǎn)生; miso是從機輸出,主機輸入數(shù)據(jù)線;mosi是主機輸出,從機輸入數(shù)據(jù)線;cs是從設(shè)備片選信號,由主機控制,當連接多個從設(shè)備時,通過該信號選擇不同的從設(shè)備。
SPI總線是按字節(jié)發(fā)送數(shù)據(jù)的,主機和從機內(nèi)部都包含一個8位串行移位寄存器,在時鐘信號控制下,寄存器內(nèi)的數(shù)據(jù)由高到低輸出至各自的數(shù)據(jù)線,8個時鐘后,兩個寄存器內(nèi)的數(shù)據(jù)就被交換了。如果只進行寫操作,主機只需忽略接收到的字節(jié);反之,若主機要讀取從機的一個字節(jié),就必須發(fā)送一個空字節(jié)來引發(fā)從機的傳輸。當主機發(fā)送一個連續(xù)的數(shù)據(jù)流時,可以進行多字節(jié)傳輸,在這種傳輸方式下,從機的片選端必須在整個傳輸過程中保持低電平。
根據(jù)串行同步時鐘極性和相位不同,SPI有四種工作方式。時鐘極性(CPOL)為0時,同步時鐘的空閑狀態(tài)為低電平,為1時,同步時鐘的空閑狀態(tài)為高電平。時鐘相位(CPHA)為0時,在同步時鐘的第一個跳變沿采樣數(shù)據(jù),為1時,在同步時鐘的第二個跳變沿采樣數(shù)據(jù)。因為主設(shè)備時鐘極性和相位都是以從設(shè)備為基準的,所以主設(shè)備時鐘極性的配置和從設(shè)備時鐘極性的配置是相反的。
SPI工作原理:以寄存器CPOL=1、CPHA=0為例,當要傳輸數(shù)據(jù)時,主機控制cs信號有效,sclk管腳輸出時鐘信號,在時鐘上升沿,主機將需要發(fā)送的數(shù)據(jù)鎖存在mosi線上,同時從miso線上讀取從機發(fā)送的數(shù)據(jù);在時鐘下降沿,從機將需要發(fā)送的數(shù)據(jù)鎖存在miso線上,同時從mosi線上讀取主機發(fā)送的數(shù)據(jù),完成一次數(shù)據(jù)交換后,SPI總線重新回到空閑狀態(tài),等待下一次通信的發(fā)起。
2 SPI總線硬件設(shè)計和軟件實現(xiàn)
某項目的控制器硬件采用ARM+CPLD的技術(shù)方案,其中ARM為主控器,主要實現(xiàn)流程控制等, CPLD為從控制器。ARM與CPLD之間主要通過SPI接口進行通信,CPLD根據(jù)ARM發(fā)送的命令產(chǎn)生各模塊的控制邏輯,完成一百多路IO控制,并且實現(xiàn)從一路UART接口到20路半雙工RS485接口的收發(fā)切換。ARM與CPLD之間的硬件接口如圖2所示。[4]
圖2 ARM與CPLD之間硬件接口
特別的,在ARM和CPLD之間設(shè)計了一個中斷信號,用來提示SPI主機ARM,SPI從機CPLD有數(shù)據(jù)需要讀取,請求發(fā)起SPI通信。
當CPLD作為SPI接口從機使用時,需要在CPLD中實現(xiàn)sclk下降沿檢測、SPI控制模塊。
2.1 sclk下降沿檢測[5]
因為ARM在sclk的上升沿讀取CPLD輸出的數(shù)據(jù),所以CPLD必須在sclk的下降沿發(fā)數(shù),上升沿時數(shù)據(jù)穩(wěn)定。同時為了在一個sclk時鐘周期只接收或發(fā)送一個比特的數(shù)據(jù),需要使該信號僅保持一個clk周期,該信號的產(chǎn)生方式如圖3所示。在clk信號驅(qū)動下,當該下降沿檢測信號有效時(定為高電平有效),CPLD采集miso線上的數(shù)據(jù),并將需要發(fā)送的數(shù)據(jù)輸出至mosi。
圖3 sclk信號邊沿檢測仿真圖
2.2 SPI控制模塊
如圖4為從機軟件設(shè)計流程圖。CPLD在系統(tǒng)上電后進入idle狀態(tài),idle表示空閑狀態(tài),當CPLD有數(shù)據(jù)需要傳輸時,通過int向ARM發(fā)送中斷信號;當檢測到cs信號有效時,進入spi數(shù)據(jù)傳輸狀態(tài);同步sclk信號,在下降沿,首先發(fā)送數(shù)據(jù)信息字節(jié),通過數(shù)據(jù)信息字節(jié)通知ARM這次總共需要發(fā)送幾個字節(jié)的數(shù)據(jù),然后依次發(fā)送后續(xù)數(shù)據(jù),直到數(shù)據(jù)傳輸完成。在上升沿,接收ARM發(fā)送的數(shù)據(jù),并按字節(jié)存入RAM。
圖4 從機軟件流程圖
3 SPI接口軟件的設(shè)計仿真[6]
對該項目SPI控制程序進行了仿真,其仿真波形如圖5所示。這個SPI接口每次只有8bit,8bit代表地址還是數(shù)據(jù)由用戶自己的協(xié)議來定,每啟動一次接口模塊,無論是主設(shè)備還是從設(shè)備都會寫出一個數(shù)據(jù)和接收一個數(shù)據(jù)。
接收數(shù)據(jù)流程是:當cs下降沿到來時啟動SPI接收控制模塊,每個sclk下降沿讀取1bit數(shù)據(jù),ovalid有效時(高)讀取odata數(shù)據(jù)(8bit)。發(fā)送流程是:先確定從設(shè)備要寫出的數(shù)據(jù),再給主設(shè)備中斷信號,主設(shè)備響應(yīng)中斷,啟動一個讀取流程,就可以讀取從設(shè)備的一個8bit數(shù)據(jù)。
圖5 SPI控制程序仿真波形
4 結(jié)語
本文基于Altera公司的CPLD平臺,用VerilogHdl語言以有限狀態(tài)機的形式設(shè)計了一種符合SPI總線規(guī)范的從機模塊,并進行了仿真,得到的仿真波形符合設(shè)計要求。該模塊已經(jīng)下載到芯片中實現(xiàn)了SPI接口功能,驗證了設(shè)計的正確性,具有一定的實用價值。
參考文獻
[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] 張道德.單片機接口技術(shù)[M].中國水利水電出版社,2007.
ZHANG DAO-de. Single chip microcomputer interface technology[M]. China Water&Power Press.2007.
[3] 左東廣,魏瑞軒.SPI接口技術(shù)及應(yīng)用[J].工業(yè)控制計算機,2001.
ZUO GUANG-dong,WEI RUI-xuan. SPI Technology And Its Application[J]. Industrial Control Computer.2001.
[4] 崔微,秦征宇.基于ARM Linux的SPI驅(qū)動實現(xiàn)[J].重慶科技學(xué)院學(xué)報(自然科學(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è)計[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
作者簡介:黃勇(1982—),女,湖南湘潭人,學(xué)歷:碩士學(xué)歷,職稱:工程師,研究方向:發(fā)射控制專業(yè)。
數(shù)字技術(shù)與應(yīng)用2015年9期