關(guān)于SPI,你知道的和不知道的都在這里
關(guān)注、星標(biāo)公眾號(hào),直達(dá)精彩內(nèi)容
文章來源:https://www.engineersgarage.com/tech-articles/spi-what-is-serial-peripheral-interface-protocol/
整理:技術(shù)讓夢(mèng)想更偉大 |?李肖遙
SPI在嵌入式系統(tǒng)中非常普遍。無論是芯片上的系統(tǒng)處理器(如ARM、MIC或Power PC等高端32位處理器)還是微控制器(如AVR、PIC等),通常包括能夠以主從模式運(yùn)行的SPI控制器。系統(tǒng)內(nèi)可編程AVR控制器可以使用SPI接口編程;基于芯片或FPGA的設(shè)計(jì)有時(shí)使用SPI進(jìn)行通信。當(dāng)我們想要與外圍設(shè)備快速傳輸數(shù)據(jù),并對(duì)實(shí)時(shí)性有要求時(shí),SPI是目前常用的一種技術(shù)。除SPI外有許多串行接口,如Morse電報(bào)、RS232、 USB、火線、以太網(wǎng)等,對(duì)于許多設(shè)計(jì)來說,每個(gè)串行接口都有其優(yōu)缺點(diǎn),如何選擇取決于所需的數(shù)據(jù)速率、空間可用性和噪聲考慮等因素。
?
SPI即串行外圍接口,用來取代并行接口,這樣設(shè)計(jì)時(shí)就不必繞著PCB布線并行總線了。它提供設(shè)備之間的高速數(shù)據(jù)傳輸,摩托羅拉是第一家將SPI命名為電路技術(shù)的公司,該技術(shù)應(yīng)用于上世紀(jì)70年代末的首個(gè)基于68000的MCU,用于連接周邊設(shè)備,后來被業(yè)內(nèi)其他公司采用。接口的簡(jiǎn)單性和速度使通信或傳輸數(shù)據(jù)變得容易,并使其成為流行的通信協(xié)議。
?
SPI是一個(gè)簡(jiǎn)單的4線串行通信接口,使控制器和外設(shè)之間能夠相互通信。在SPI中,數(shù)據(jù)每個(gè)時(shí)鐘周期1 bit速率輸入/輸出,數(shù)據(jù)在主設(shè)備和一個(gè)或多個(gè)從設(shè)備之間短距離、高速傳輸。它基于一個(gè)8位移位寄存器將數(shù)據(jù)移出到一個(gè)輸出引腳,并從另一個(gè)輸入引腳將數(shù)據(jù)移入。SPI的另一個(gè)特性是,它沒有傳輸總線所有權(quán)的概念,即改變主節(jié)點(diǎn),也沒有從節(jié)點(diǎn)地址。SPI是一種更簡(jiǎn)單的協(xié)議,因此工作頻率可以高于10MHz(比TWI的頻率高)。

SPI得到廣泛使用的一些特性是:
全雙工通信;
吞吐量高于TWI;
傳輸時(shí)不限于8位字;
簡(jiǎn)單的硬件接口;
可隨意選擇消息大小、內(nèi)容和目的;
通常符合低功耗要求;
從機(jī)使用主機(jī)產(chǎn)生的時(shí)鐘,不需要精確的振蕩器;
由于電路較少,功耗要求比TWI低。
?
然而,將TWI串行接口與SPI進(jìn)行比較是不公平的。它們有各自的應(yīng)用領(lǐng)域,這取決于系統(tǒng)的需求。TWI有如下特性:
IC封裝上的引腳數(shù)比SPI少;
存在硬件流控制;
它有一個(gè)正式的標(biāo)準(zhǔn),不像SPI;
它在通信之前給出從機(jī)地址。
?
為什么SPI在PCB下應(yīng)用最多
??盡管SPI主要是為主機(jī)處理器和外設(shè)之間的通信而開發(fā)的,但是通過SPI連接兩個(gè)處理器也是可能的。SPI總線通常只用在PCB上;在PCB領(lǐng)域之外使用SPI有很多阻礙。首先,SPI被設(shè)計(jì)用來在不同的IC芯片之間以非常高的速度傳輸數(shù)據(jù);由于高速要求,總線的長(zhǎng)度不能太長(zhǎng),否則會(huì)因?yàn)殡娍乖黾佣鵁o法使用。當(dāng)然在PCB外使用低速SPI是有可能的,但這不是很實(shí)際。外圍設(shè)備可以是實(shí)時(shí)時(shí)鐘、轉(zhuǎn)換器(如ADC和DAC)、內(nèi)存模塊(如EEPROM和FLASH)、傳感器(如溫度傳感器和壓力傳感器)或其他設(shè)備(如信號(hào)混頻器、電位器、LCD控制器、UART、can控制器、USB控制器和放大器)。
?
SPI協(xié)議
SPI協(xié)議包括以下4條信號(hào)線:
MOSI (Master Out Slave In)
MOSI信號(hào)由Master產(chǎn)生,接收端是Slave;
MISO(Master In Slave Out)
Slave產(chǎn)生MISO信號(hào),接收方為Master;
SCLK/SCK
SCLK由master產(chǎn)生,用于在master和slave之間同步數(shù)據(jù)傳輸;
SS/CS
SS信號(hào)由master產(chǎn)生,用于選擇單個(gè)slave。
?
有時(shí)串行數(shù)據(jù)輸入[SDI]被用于MOSI,串行數(shù)據(jù)輸出[SDO]用于MISO。
?
一個(gè)主控制器可以與多個(gè)SPI外設(shè)通信,一般有兩種設(shè)置方法:
1. 級(jí)聯(lián)slave配置;
2. 并行slave配置。
?
級(jí)聯(lián)slave配置
級(jí)聯(lián)slave是將所有的時(shí)鐘線(SCLK)和片選(CS)連接在一起。數(shù)據(jù)通過微控制器傳輸?shù)矫總€(gè)外設(shè),最后再返回到微控制器。前一個(gè)slave的數(shù)據(jù)輸出連接到下一個(gè)slave的數(shù)據(jù)輸入,從而形成一個(gè)更寬的移位寄存器。因此,級(jí)聯(lián)slave被視為一個(gè)更大的設(shè)備,他們連接相同的芯片選擇信號(hào)。這意味著master只需要產(chǎn)生一條SS線,而不用為每個(gè)slave都產(chǎn)生一條單獨(dú)的SS線。

?
并行slave配置
這是典型的SPI總線配置,包含一個(gè)master和多個(gè)slave。在這個(gè)獨(dú)立或并行的從屬配置中:
所有時(shí)鐘線(SCLK)都連接在一起;
所有MISO數(shù)據(jù)線都連接在一起;
所有MOSI數(shù)據(jù)線都連接在一起。

SPI通信
SPI通信一直是由master發(fā)起的。首先master產(chǎn)生時(shí)鐘,時(shí)鐘頻率小于或等于slave支持的最大頻率;隨后master通過產(chǎn)生時(shí)鐘信號(hào)(SCLK)來控制數(shù)據(jù)傳輸,并通過將特定slave的芯片選擇(SS)線拉低來進(jìn)行通信??偩€上的slave如果沒有被master選中,將會(huì)忽略來自主機(jī)的輸入時(shí)鐘和MOSI信號(hào),并且絕對(duì)不能驅(qū)動(dòng)MISO;這意味著master每次只選擇一個(gè)slave。

?
四個(gè)引腳的使用取決于設(shè)備。例如,某些設(shè)備不需要輸入(例如ADC), SDI引腳可能不存在,或者有些設(shè)備不需要輸出(例如LCD控制器),SDO引腳可能不存在。如果一個(gè)微控制器只需要與1個(gè)SPI外設(shè)通信,那么該slave上的CS引腳可以接地(CS低電平有效)。對(duì)于多個(gè)從設(shè)備,每個(gè)從設(shè)備都需要一個(gè)獨(dú)立的CS信號(hào)。
?
SPI中三態(tài)輸出的意義是什么?
在數(shù)字電子學(xué)中,三態(tài)邏輯允許輸出端口除了0和1邏輯電平外,還采用高阻抗?fàn)顟B(tài)。這允許多個(gè)電路共享一個(gè)輸出線,大多數(shù)外設(shè)都有三態(tài)輸出,當(dāng)設(shè)備未被選中時(shí),輸出會(huì)進(jìn)入高阻抗?fàn)顟B(tài)(斷開)。沒有三態(tài)輸出的設(shè)備不能與其他設(shè)備共享SPI總線。
?
SPI設(shè)備有時(shí)使用另一條信號(hào)線向主機(jī)CPU發(fā)送中斷信號(hào)。使用中斷信號(hào)例子有溫度傳感器的溫度警報(bào),實(shí)時(shí)時(shí)鐘芯片發(fā)出的警報(bào),以及手機(jī)聲音編解碼器監(jiān)測(cè)到的耳機(jī)插孔插入等。
?
時(shí)鐘極性和相位
另一對(duì)參數(shù)稱為時(shí)鐘極性(CPOL)和時(shí)鐘相位(CPHA)決定了數(shù)據(jù)驅(qū)動(dòng)和采樣的時(shí)鐘信號(hào)的邊緣。除了設(shè)置時(shí)鐘頻率,master還必須配置時(shí)鐘極性(CPOL)和相位(CPHA)。由于時(shí)鐘作為數(shù)據(jù)通信的同步,在這個(gè)CPOL和CPHA的基礎(chǔ)上,有四種可能的模式可以在SPI協(xié)議中使用。
?
SPI應(yīng)用
全雙工能力使得SPI對(duì)于主/從應(yīng)用場(chǎng)景下十分高效,通過全雙工模式可以為數(shù)字音頻、數(shù)字信號(hào)處理等應(yīng)用實(shí)現(xiàn)高效、快速的數(shù)據(jù)流。SPI用于與各種外設(shè)通信,例如:
傳感器
溫度,壓力,ADC,觸摸屏,視頻游戲控制器;
控制設(shè)備
音頻編解碼、數(shù)字電位器、DAC;
相機(jī)鏡頭
佳能EF鏡頭支架;
通訊
以太網(wǎng),USB, USART,CAN手持視頻游戲;
存儲(chǔ)器
Flash和EEPROM;
實(shí)時(shí)時(shí)鐘;
LCD,有時(shí)甚至用于管理圖像數(shù)據(jù);
任何MMC或SD卡(包括SDIO變體);
對(duì)于高性能系統(tǒng),F(xiàn)PGA有時(shí)使用SPI作為主機(jī)的從機(jī)接口,使用SPI作為傳感器的主機(jī)接口,或者用于flash memory的導(dǎo)入接口。
???????????????? ?END ?????????????????
關(guān)注我的微信公眾號(hào),回復(fù)“加群”按規(guī)則加入技術(shù)交流群。
點(diǎn)擊“閱讀原文”查看更多分享,歡迎點(diǎn)分享、收藏、點(diǎn)贊、在看。
