SPI總線
SPI--Serial Peripheral Interface,串行外圍設(shè)備接口,是Motorola公司推出的一種同步串行通訊方式,是一種三線同步總線,因其硬件功能很強(qiáng),與SPI有關(guān)的軟件就相當(dāng)簡單,使CPU有更多的時(shí)間處理其他事務(wù)。
SPI通常有SCK時(shí)鐘,STB片選,DATA數(shù)據(jù)信號(hào)三個(gè)信號(hào)。 I2C通常有 SDA數(shù)據(jù)和SCL時(shí)鐘兩個(gè)信號(hào)。
SPI總線真正實(shí)現(xiàn)了全雙工數(shù)據(jù)傳輸,SPI 有3線跟4線兩種,4線的話,就是多了一條叫SDC的線,用來告知從設(shè)備現(xiàn)在傳輸?shù)氖菙?shù)據(jù)還是指令。這個(gè)接口較快,可以傳輸較連續(xù)的數(shù)據(jù)。SPI要想連接多個(gè)從設(shè)備,就需要給每個(gè)從設(shè)備配備一根片選信號(hào)。如果要可以實(shí)現(xiàn)全雙工,也是需要多加一根數(shù)據(jù)線(MOSI MISO)。
也就是說SPI總線是通過片選來選擇從設(shè)備。
spi總線速度要比I2C要快,我們開發(fā)板最快能達(dá)到30MHZ。
spi總線特點(diǎn):
1. 采用主-從模式(Master-Slave) 的控制方式
SPI 規(guī)定了兩個(gè) SPI 設(shè)備之間通信必須由主設(shè)備 (Master) 來控制次設(shè)備 (Slave)。 一個(gè) Master 設(shè)備可以通過提供 Clock 以及對(duì) Slave 設(shè)備進(jìn)行片選 (Slave Select) 來控制多個(gè) Slave 設(shè)備, SPI 協(xié)議還規(guī)定 Slave 設(shè)備的 Clock 由 Master 設(shè)備通過 SCK 管腳提供給 Slave 設(shè)備, Slave 設(shè)備本身不能產(chǎn)生或控制 Clock, 沒有 Clock 則 Slave 設(shè)備不能正常工作。
2. 采用同步方式(Synchronous)傳輸數(shù)據(jù)
Master 設(shè)備會(huì)根據(jù)將要交換的數(shù)據(jù)來產(chǎn)生相應(yīng)的時(shí)鐘脈沖(Clock Pulse), 時(shí)鐘脈沖組成了時(shí)鐘信號(hào)(Clock Signal) , 時(shí)鐘信號(hào)通過時(shí)鐘極性 (CPOL) 和 時(shí)鐘相位 (CPHA) 控制著兩個(gè) SPI 設(shè)備間何時(shí)數(shù)據(jù)交換以及何時(shí)對(duì)接收到的數(shù)據(jù)進(jìn)行采樣, 來保證數(shù)據(jù)在兩個(gè)設(shè)備之間是同步傳輸?shù)摹?/p>
3. 數(shù)據(jù)交換(Data Exchanges)
SPI 設(shè)備間的數(shù)據(jù)傳輸之所以又被稱為數(shù)據(jù)交換, 是因?yàn)?SPI 協(xié)議規(guī)定一個(gè) SPI 設(shè)備不能在數(shù)據(jù)通信過程中僅僅只充當(dāng)一個(gè) “發(fā)送者(Transmitter)” 或者 “接收者(Receiver)”。 也就是說是全雙工的,在每個(gè) Clock 周期內(nèi), SPI 設(shè)備都會(huì)發(fā)送并接收一個(gè) bit 大小的數(shù)據(jù), 相當(dāng)于該設(shè)備有一個(gè) bit 大小的數(shù)據(jù)被交換了。
一個(gè) Slave 設(shè)備要想能夠接收到 Master 發(fā)過來的控制信號(hào), 必須在此之前能夠被 Master 設(shè)備進(jìn)行訪問 (Access)。 所以, Master 設(shè)備必須首先通過 SS/CS pin 對(duì) Slave 設(shè)備進(jìn)行片選, 把想要訪問的 Slave 設(shè)備選上。
在數(shù)據(jù)傳輸?shù)倪^程中, 每次接收到的數(shù)據(jù)必須在下一次數(shù)據(jù)傳輸之前被采樣。 如果之前接收到的數(shù)據(jù)沒有被讀取, 那么這些已經(jīng)接收完成的數(shù)據(jù)將有可能會(huì)被丟棄, 導(dǎo)致 SPI 物理模塊最終失效。 因此, 在程序中一般都會(huì)在 SPI 傳輸完數(shù)據(jù)后, 去讀取 SPI 設(shè)備里的數(shù)據(jù), 即使這些數(shù)據(jù)(Dummy Data)在我們的程序里是無用的。
具體spi工作原理可以看博客另外一篇文章
SPI和I2C是2種不同的通信協(xié)議,現(xiàn)在已經(jīng)廣泛的應(yīng)用在IC之間的通信中。并且不少單片機(jī)已經(jīng)整和了SPI和I2C的借口。但像51這種不支持SPI和I2C的單片機(jī),也可以用模擬時(shí)鐘的工作方式進(jìn)行SPI和I2C的通信的。
下面主要總結(jié)一下2種總線的異同點(diǎn):
1 I2C總線不是全雙工,2根線SCL SDA。spi總線實(shí)現(xiàn)全雙工,4根線SCK CS MOSI MISO
2 I2C總線是多主機(jī)總線,通過SDA上的地址信息來鎖定從設(shè)備。spi總線只有一個(gè)主設(shè)備,主設(shè)備通過CS片選來確定從設(shè)備
3 I2C總線傳輸速度在100kbps-4Mbps。spi總線傳輸速度更快,可以達(dá)到30MHZ以上。
4 I2C總線空閑狀態(tài)下SDA SCL都是高電平。spi總線空閑狀態(tài)MOSI MISO也都是 SCK是有CPOL決定的
5 I2C總線scl高電平時(shí)sda下降沿標(biāo)志傳輸開始,上升沿標(biāo)志傳輸結(jié)束。spi總線cs拉低標(biāo)志傳輸開始,cs拉高標(biāo)志傳輸結(jié)束
6 I2C總線是SCL高電平采樣。spi總線因?yàn)槭侨p工,因此是沿采樣,具體要根據(jù)CPHA決定。一般情況下master device是SCK的上升沿發(fā)送,下降沿采集
7 I2C總線和spi總線數(shù)據(jù)傳輸都是MSB在前,LSB在后(串口是LSB在前)
8 I2C總線和spi總線時(shí)鐘都是由主設(shè)備產(chǎn)生,并且只在數(shù)據(jù)傳輸時(shí)發(fā)出時(shí)鐘
9 I2C總線讀寫時(shí)序比較固定統(tǒng)一,設(shè)備驅(qū)動(dòng)編寫方便。spi總線不同從設(shè)備讀寫時(shí)序差別比較大,因此必須根據(jù)具體的設(shè)備datasheet來實(shí)現(xiàn)讀寫,相對(duì)復(fù)雜一些。
評(píng)論