
SPI在嵌入式系統中非常普遍,無論是芯片上的系統處理器(如ARM、MIC或Power PC等高端32位處理器),還是微控制器(如AVR、PIC等),通常包括能夠以主從模式運行的SPI控制器。
系統內可編程AVR控制器,可以使用SPI接口編程;基于芯片或FPGA的設計,有時使用SPI進行通信。當我們想要與外圍設備快速傳輸數據,并對實時性有要求時,SPI是目前常用的一種技術。
(相關資料圖)
除SPI外,有許多串行接口,如Morse電報、RS232、 USB、火線、以太網等,對于許多設計來說,每個串行接口都有其優缺點,如何選擇取決于所需的數據速率、空間可用性和噪聲考慮等因素。
SPI即串行外圍接口,用來取代并行接口,這樣設計時就不必繞著PCB布線并行總線了。它提供設備之間的高速數據傳輸,摩托羅拉是第一家將SPI命名為電路技術的公司。該技術應用于上世紀70年代末的首個基于68000的MCU,用于連接周邊設備,后來被業內其他公司采用。接口的簡單性和速度,使通信或傳輸數據變得容易,并使其成為流行的通信協議。
SPI是一個簡單的4線串行通信接口,使控制器和外設之間能夠相互通信。在SPI中,數據每個時鐘周期1 bit速率輸入/輸出,數據在主設備和一個或多個從設備之間短距離、高速傳輸。它基于一個8位移位寄存器將數據移出到一個輸出引腳,并從另一個輸入引腳將數據移入。
SPI的另一個特性是,它沒有傳輸總線所有權的概念,即改變主節點,也沒有從節點地址。SPI是一種更簡單的協議,因此工作頻率可以高于10MHz(比TWI的頻率高)。
SPI得到廣泛使用的一些特性是:
全雙工通信;
吞吐量高于TWI;
傳輸時不限于8位字;
簡單的硬件接口;
可隨意選擇消息大小、內容和目的;
通常符合低功耗要求;
從機使用主機產生的時鐘,不需要精確的振蕩器;
由于電路較少,功耗要求比TWI低。
然而,將TWI串行接口與SPI進行比較是不公平的。它們有各自的應用領域,這取決于系統的需求。
TWI有如下特性:
IC封裝上的引腳數比SPI少;
存在硬件流控制;
它有一個正式的標準,不像SPI;
它在通信之前給出從機地址。
為什么SPI在PCB下應用最多?
盡管SPI主要是為主機處理器和外設之間的通信而開發的,但是通過SPI連接兩個處理器也是可能的。SPI總線通常只用在PCB上;在PCB領域之外使用SPI有很多阻礙。
首先,SPI被設計用來在不同的IC芯片之間以非常高的速度傳輸數據;由于高速要求,總線的長度不能太長,否則會因為電抗增加而無法使用。
當然,在PCB外使用低速SPI是有可能的,但這不是很實際。外圍設備可以是實時時鐘、轉換器(如ADC和DAC)、內存模塊(如EEPROM和FLASH)、傳感器(如溫度傳感器和壓力傳感器)或其他設備(如信號混頻器、電位器、LCD控制器、UART、can控制器、USB控制器和放大器)。
SPI協議
SPI協議包括以下4條信號線:
MOSI (Master Out Slave In)
MOSI信號由Master產生,接收端是Slave;
MISO(Master In Slave Out)
Slave產生MISO信號,接收方為Master;
SCLK/SCK
SCLK由master產生,用于在master和slave之間同步數據傳輸;
SS/CS
SS信號由master產生,用于選擇單個slave。
有時串行數據輸入[SDI]被用于MOSI,串行數據輸出[SDO]用于MISO。
一個主控制器可以與多個SPI外設通信,一般有兩種設置方法:
級聯slave配置;
并行slave配置。
級聯slave配置
級聯slave是將所有的時鐘線(SCLK)和片選(CS)連接在一起。數據通過微控制器傳輸到每個外設,最后再返回到微控制器。前一個slave的數據輸出連接到下一個slave的數據輸入,從而形成一個更寬的移位寄存器。因此,級聯slave被視為一個更大的設備,他們連接相同的芯片選擇信號。
這意味著,master只需要產生一條SS線,而不用為每個slave都產生一條單獨的SS線。
并行slave配置
這是典型的SPI總線配置,包含一個master和多個slave。在這個獨立或并行的從屬配置中:
所有時鐘線(SCLK)都連接在一起;
所有MISO數據線都連接在一起;
所有MOSI數據線都連接在一起。
SPI通信
SPI通信一直是由master發起的。首先master產生時鐘,時鐘頻率小于或等于slave支持的最大頻率;隨后master通過產生時鐘信號(SCLK)來控制數據傳輸,并通過將特定slave的芯片選擇(SS)線拉低來進行通信。總線上的slave如果沒有被master選中,將會忽略來自主機的輸入時鐘和MOSI信號,并且絕對不能驅動MISO;這意味著master每次只選擇一個slave。
四個引腳的使用取決于設備。例如,某些設備不需要輸入(例如ADC), SDI引腳可能不存在,或者有些設備不需要輸出(例如LCD控制器),SDO引腳可能不存在。如果一個微控制器只需要與1個SPI外設通信,那么該slave上的CS引腳可以接地(CS低電平有效)。對于多個從設備,每個從設備都需要一個獨立的CS信號。
SPI中三態輸出的意義是什么?
在數字電子學中,三態邏輯允許輸出端口除了0和1邏輯電平外,還采用高阻抗狀態。這允許多個電路共享一個輸出線,大多數外設都有三態輸出,當設備未被選中時,輸出會進入高阻抗狀態(斷開)。沒有三態輸出的設備不能與其他設備共享SPI總線。
SPI設備有時使用另一條信號線向主機CPU發送中斷信號。使用中斷信號例子有溫度傳感器的溫度警報,實時時鐘芯片發出的警報,以及手機聲音編解碼器監測到的耳機插孔插入等。
時鐘極性和相位
另一對參數稱為時鐘極性(CPOL)和時鐘相位(CPHA)決定了數據驅動和采樣的時鐘信號的邊緣。除了設置時鐘頻率,master還必須配置時鐘極性(CPOL)和相位(CPHA)。由于時鐘作為數據通信的同步,在這個CPOL和CPHA的基礎上,有四種可能的模式可以在SPI協議中使用。
SPI應用
全雙工能力使得SPI對于主/從應用場景下十分高效,通過全雙工模式可以為數字音頻、數字信號處理等應用實現高效、快速的數據流。
SPI用于與各種外設通信,例如:
傳感器
溫度,壓力,ADC,觸摸屏,視頻游戲控制器;
控制設備
音頻編解碼、數字電位器、DAC;
相機鏡頭
佳能EF鏡頭支架;
通訊
以太網,USB, USART,CAN手持視頻游戲;
存儲器
Flash和EEPROM;
實時時鐘;
LCD,有時甚至用于管理圖像數據;
任何MMC或SD卡(包括SDIO變體);
對于高性能系統,FPGA有時使用SPI作為主機的從機接口,使用SPI作為傳感器的主機接口,或者用于flash memory的導入接口。
審核編輯:湯梓紅標簽: