http://blog.csdn.net/skyflying2012/article/details/8237881
2012
最近2周一直在調(diào)試IIC和SPI總線(xiàn)設(shè)備,這里記錄一下2種總線(xiàn),以備后忘。
一 IIC總線(xiàn)
I2C--INTER-IC串行總線(xiàn)的縮寫(xiě),是PHILIPS公司推出的芯片間串行傳輸總線(xiàn)。它以1根串行數(shù)據(jù)線(xiàn)(SDA)和1根串行時(shí)鐘線(xiàn)(SCL)實(shí) 現(xiàn)了雙工的同步數(shù)據(jù)傳輸。具有接口線(xiàn)少,控制方式簡(jiǎn)化,器件封裝形式小,通信速率較高等優(yōu)點(diǎn)。在主從通信中,可以有多個(gè)I2C總線(xiàn)器件同時(shí)接到I2C總線(xiàn) 上,通過(guò)地址來(lái)識(shí)別通信對(duì)象。
IIC 接口的協(xié)議里面包括設(shè)備地址信息,可以同一總線(xiàn)上連接多個(gè)從設(shè)備,通過(guò)應(yīng)答來(lái)互通數(shù)據(jù)及命令。但是傳輸速率有限,標(biāo)準(zhǔn)模式下可達(dá)到100Kbps,快速模式下可達(dá)到400Kbps(我們開(kāi)發(fā)板一般在130Kbps),高速模式下達(dá)到4Mbps,不能實(shí)現(xiàn)全雙工,不適合傳輸很多的數(shù)據(jù)。
IIC總線(xiàn)是一個(gè)真正的多主機(jī)總線(xiàn),總線(xiàn)上多個(gè)主機(jī)初始化傳輸,可以通過(guò)傳輸檢測(cè)和仲裁來(lái)防止數(shù)據(jù)被破壞 。
下來(lái)詳細(xì)了解IIC總線(xiàn)時(shí)序:
1.1 總線(xiàn)數(shù)據(jù)有效性
IIC總線(xiàn)是單工,因此同一時(shí)刻數(shù)據(jù)只有一個(gè)流向,因此采樣有效時(shí)鐘也是單一的,是在SCL時(shí)鐘的高電平采樣數(shù)據(jù)。
IIC總線(xiàn)上SDA數(shù)據(jù)在SCL時(shí)鐘低電平是可以發(fā)生變化,但是在時(shí)鐘高電平時(shí)必須穩(wěn)定,以便主從設(shè)備根據(jù)時(shí)鐘采樣數(shù)據(jù),如下圖:
1.2 總線(xiàn)空閑條件
IIC總線(xiàn)上設(shè)備都釋放總線(xiàn)(發(fā)出傳輸停止)后,IIC總線(xiàn)根據(jù)上拉電阻變成高電平,SDA SCL都是高電平。1.3 總線(xiàn)數(shù)據(jù)傳輸起始和結(jié)束條件
IIC總線(xiàn)SCL高電平時(shí)SDA出現(xiàn)由高到低的跳變,標(biāo)志總線(xiàn)上數(shù)據(jù)傳輸?shù)拈_(kāi)始條件
IIC總線(xiàn)SCL高電平時(shí)SDA出現(xiàn)由低到高的跳變,標(biāo)志總線(xiàn)上數(shù)據(jù)傳輸?shù)慕Y(jié)束條件
1.4 總線(xiàn)數(shù)據(jù)傳輸順序以及ACK應(yīng)答
IIC總線(xiàn)上數(shù)據(jù)傳輸室MSB在前,LSB在后,從示波器上看,從左向右依次讀出數(shù)據(jù)即可
IIC總線(xiàn)傳輸?shù)臄?shù)據(jù)不收限制,但是每次發(fā)到SDA上的必須是8位,并且主機(jī)發(fā)送8位后釋放總線(xiàn),從機(jī)收到數(shù)據(jù)后必須拉低SDA一個(gè)時(shí)鐘,回應(yīng)ACK表示數(shù)據(jù)接收成功,我們?nèi)绻静ㄆ魃峡吹降牟ㄐ尉褪敲看?位數(shù)據(jù),8bit+1bit ack。如下:
從機(jī)收到一字節(jié)數(shù)據(jù)后,如果需要一些時(shí)間處理,則會(huì)拉低SCL,讓傳輸進(jìn)入等待狀態(tài),處理完成,釋放SCL,繼續(xù)傳輸,如下:
1.5 總線(xiàn)讀寫(xiě)時(shí)序
數(shù)據(jù)的傳輸在起始條件之后,發(fā)送一個(gè)7位的從機(jī)地址,緊接著第8位是數(shù)據(jù)方向(R/ W),0-表示發(fā)送數(shù)據(jù)(寫(xiě)),1-表示接收數(shù)據(jù)(讀)。數(shù)據(jù)傳輸一般由主機(jī)產(chǎn)生的停止位(P)終止。但是如果主機(jī)仍希望在總線(xiàn)上通訊,它可以產(chǎn)生重復(fù)起始條件(Sr),和尋址另一個(gè)從機(jī),而不是首先產(chǎn)生一個(gè)停止條件。在這種傳輸中,可能有不同的讀/寫(xiě)格式結(jié)合。
IIC總線(xiàn)主設(shè)備讀寫(xiě)從設(shè)備,一般都是與從設(shè)備的寄存器打交道,這個(gè)可以通過(guò)閱讀從設(shè)備的datasheet獲取。總線(xiàn)寫(xiě)時(shí)序如下:
master start + master addr|w + slave ack + master reg|w + slave ack + master data + slave ack + master restart。。master data + slave nack + master stop
總線(xiàn)讀時(shí)序如下:
master start + master addr|w + slave ack + master reg|w + slave ack + master restart + master addr|r + slave ack + slave data + master nack + master stop
總線(xiàn)讀時(shí)序與寫(xiě)的不同之處在于讀需要2次傳輸才能完成一次讀取,首先要寫(xiě)寄存器地址到從設(shè)備,其實(shí)是寫(xiě)到了從設(shè)備的控制寄存器或者命令寄存器,從設(shè)備內(nèi)部會(huì)根據(jù)這個(gè)地址來(lái)尋址所要操作的寄存器。
我在讀我們的bios和內(nèi)核時(shí)發(fā)現(xiàn),2者在總線(xiàn)讀時(shí)序上的實(shí)現(xiàn)不太一樣,在于第一次寄存器地址寫(xiě)入后,一個(gè)發(fā)的是restart,一個(gè)發(fā)的是stop,然后再start開(kāi)始讀取數(shù)據(jù),示波器抓波形發(fā)現(xiàn)讀取數(shù)據(jù)都正確,說(shuō)明這2種時(shí)序都是正確的。
IIC總線(xiàn)的讀寫(xiě)時(shí)序比較固定,設(shè)備通信嚴(yán)格遵循協(xié)議,因此iIC總線(xiàn)設(shè)備驅(qū)動(dòng)程序的編寫(xiě)也就相對(duì)簡(jiǎn)單一些。
主要應(yīng)用的iIc總線(xiàn)設(shè)備有touchscreen rtc 外擴(kuò)io等
二 SPI總線(xiàn)
SPI--Serial Peripheral Interface,串行外圍設(shè)備接口,是Motorola公司推出的一種同步串行通訊方式,是一種三線(xiàn)同步總線(xiàn),因其硬件功能很強(qiáng),與SPI有關(guān)的軟件就相當(dāng)簡(jiǎn)單,使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總線(xiàn)真正實(shí)現(xiàn)了全雙工數(shù)據(jù)傳輸,SPI 有3線(xiàn)跟4線(xiàn)兩種,4線(xiàn)的話(huà),就是多了一條叫SDC的線(xiàn),用來(lái)告知從設(shè)備現(xiàn)在傳輸?shù)氖菙?shù)據(jù)還是指令。這個(gè)接口較快,可以傳輸較連續(xù)的數(shù)據(jù)。SPI要想連接多個(gè)從設(shè)備,就需要給每個(gè)從設(shè)備配備一根片選信號(hào)。如果要可以實(shí)現(xiàn)全雙工,也是需要多加一根數(shù)據(jù)線(xiàn)(MOSI MISO)。
也就是說(shuō)SPI總線(xiàn)是通過(guò)片選來(lái)選擇從設(shè)備。
spi總線(xiàn)速度要比iic要快,我們開(kāi)發(fā)板最快能達(dá)到30MHZ。
spi總線(xiàn)特點(diǎn):
1. 采用主-從模式(Master-Slave) 的控制方式
SPI 規(guī)定了兩個(gè) SPI 設(shè)備之間通信必須由主設(shè)備 (Master) 來(lái)控制次設(shè)備 (Slave). 一個(gè) Master 設(shè)備可以通過(guò)提供 Clock 以及對(duì) Slave 設(shè)備進(jìn)行片選 (Slave Select) 來(lái)控制多個(gè) Slave 設(shè)備, SPI 協(xié)議還規(guī)定 Slave 設(shè)備的 Clock 由 Master 設(shè)備通過(guò) SCK 管腳提供給 Slave 設(shè)備, Slave 設(shè)備本身不能產(chǎn)生或控制 Clock, 沒(méi)有 Clock 則 Slave 設(shè)備不能正常工作.
2. 采用同步方式(Synchronous)傳輸數(shù)據(jù)
Master 設(shè)備會(huì)根據(jù)將要交換的數(shù)據(jù)來(lái)產(chǎn)生相應(yīng)的時(shí)鐘脈沖(Clock Pulse), 時(shí)鐘脈沖組成了時(shí)鐘信號(hào)(Clock Signal) , 時(shí)鐘信號(hào)通過(guò)時(shí)鐘極性 (CPOL) 和 時(shí)鐘相位 (CPHA) 控制著兩個(gè) SPI 設(shè)備間何時(shí)數(shù)據(jù)交換以及何時(shí)對(duì)接收到的數(shù)據(jù)進(jìn)行采樣, 來(lái)保證數(shù)據(jù)在兩個(gè)設(shè)備之間是同步傳輸?shù)?
3. 數(shù)據(jù)交換(Data Exchanges)
SPI 設(shè)備間的數(shù)據(jù)傳輸之所以又被稱(chēng)為數(shù)據(jù)交換, 是因?yàn)?SPI 協(xié)議規(guī)定一個(gè) SPI 設(shè)備不能在數(shù)據(jù)通信過(guò)程中僅僅只充當(dāng)一個(gè) "發(fā)送者(Transmitter)" 或者 "接收者(Receiver)". 也就是說(shuō)是全雙工的,在每個(gè) Clock 周期內(nèi), SPI 設(shè)備都會(huì)發(fā)送并接收一個(gè) bit 大小的數(shù)據(jù), 相當(dāng)于該設(shè)備有一個(gè) bit 大小的數(shù)據(jù)被交換了.
一個(gè) Slave 設(shè)備要想能夠接收到 Master 發(fā)過(guò)來(lái)的控制信號(hào), 必須在此之前能夠被 Master 設(shè)備進(jìn)行訪問(wèn) (Access). 所以, Master 設(shè)備必須首先通過(guò) SS/CS pin 對(duì) Slave 設(shè)備進(jìn)行片選, 把想要訪問(wèn)的 Slave 設(shè)備選上.
在數(shù)據(jù)傳輸?shù)倪^(guò)程中, 每次接收到的數(shù)據(jù)必須在下一次數(shù)據(jù)傳輸之前被采樣. 如果之前接收到的數(shù)據(jù)沒(méi)有被讀取, 那么這些已經(jīng)接收完成的數(shù)據(jù)將有可能會(huì)被丟棄, 導(dǎo)致 SPI 物理模塊最終失效. 因此, 在程序中一般都會(huì)在 SPI 傳輸完數(shù)據(jù)后, 去讀取 SPI 設(shè)備里的數(shù)據(jù), 即使這些數(shù)據(jù)(Dummy Data)在我們的程序里是無(wú)用的.
具體spi工作原理可以看博客另外一篇文章
SPI和IIC是2種不同的通信協(xié)議,現(xiàn)在已經(jīng)廣泛的應(yīng)用在IC之間的通信中。并且不少單片機(jī)已經(jīng)整和了SPI和IIC的借口。但像51這種不支持SPI和IIC的單片機(jī),也可以用模擬時(shí)鐘的工作方式進(jìn)行SPI和IIC的通信的。
下面主要總結(jié)一下2種總線(xiàn)的異同點(diǎn):
1 iic總線(xiàn)不是全雙工,2根線(xiàn)SCL SDA。spi總線(xiàn)實(shí)現(xiàn)全雙工,4根線(xiàn)SCK CS MOSI MISO
2 iic總線(xiàn)是多主機(jī)總線(xiàn),通過(guò)SDA上的地址信息來(lái)鎖定從設(shè)備。spi總線(xiàn)只有一個(gè)主設(shè)備,主設(shè)備通過(guò)CS片選來(lái)確定從設(shè)備
3 iic總線(xiàn)傳輸速度在100kbps-4Mbps。spi總線(xiàn)傳輸速度更快,可以達(dá)到30MHZ以上。
4 iic總線(xiàn)空閑狀態(tài)下SDA SCL都是高電平。spi總線(xiàn)空閑狀態(tài)MOSI MISO也都是 SCK是有CPOL決定的
5 iic總線(xiàn)scl高電平時(shí)sda下降沿標(biāo)志傳輸開(kāi)始,上升沿標(biāo)志傳輸結(jié)束。spi總線(xiàn)cs拉低標(biāo)志傳輸開(kāi)始,cs拉高標(biāo)志傳輸結(jié)束
6 iic總線(xiàn)是SCL高電平采樣。spi總線(xiàn)因?yàn)槭侨p工,因此是沿采樣,具體要根據(jù)CPHA決定。一般情況下master device是SCK的上升沿發(fā)送,下降沿采集
7 iic總線(xiàn)和spi總線(xiàn)數(shù)據(jù)傳輸都是MSB在前,LSB在后(串口是LSB在前)
8 iic總線(xiàn)和spi總線(xiàn)時(shí)鐘都是由主設(shè)備產(chǎn)生,并且只在數(shù)據(jù)傳輸時(shí)發(fā)出時(shí)鐘
9 iic總線(xiàn)讀寫(xiě)時(shí)序比較固定統(tǒng)一,設(shè)備驅(qū)動(dòng)編寫(xiě)方便。spi總線(xiàn)不同從設(shè)備讀寫(xiě)時(shí)序差別比較大,因此必須根據(jù)具體的設(shè)備datasheet來(lái)實(shí)現(xiàn)讀寫(xiě),相對(duì)復(fù)雜一些。
聯(lián)系客服