|
http://blog.csdn.net/skyflying2012/article/details/8237881 2012 最近2周一直在調(diào)試IIC和SPI總線設(shè)備,這里記錄一下2種總線,以備后忘。 一 IIC總線 I2C--INTER-IC串行總線的縮寫,是PHILIPS公司推出的芯片間串行傳輸總線。它以1根串行數(shù)據(jù)線(SDA)和1根串行時(shí)鐘線(SCL)實(shí) 現(xiàn)了雙工的同步數(shù)據(jù)傳輸。具有接口線少,控制方式簡(jiǎn)化,器件封裝形式小,通信速率較高等優(yōu)點(diǎn)。在主從通信中,可以有多個(gè)I2C總線器件同時(shí)接到I2C總線 上,通過地址來識(shí)別通信對(duì)象。 IIC 接口的協(xié)議里面包括設(shè)備地址信息,可以同一總線上連接多個(gè)從設(shè)備,通過應(yīng)答來互通數(shù)據(jù)及命令。但是傳輸速率有限,標(biāo)準(zhǔn)模式下可達(dá)到100Kbps,快速模式下可達(dá)到400Kbps(我們開發(fā)板一般在130Kbps),高速模式下達(dá)到4Mbps,不能實(shí)現(xiàn)全雙工,不適合傳輸很多的數(shù)據(jù)。 IIC總線是一個(gè)真正的多主機(jī)總線,總線上多個(gè)主機(jī)初始化傳輸,可以通過傳輸檢測(cè)和仲裁來防止數(shù)據(jù)被破壞
。 下來詳細(xì)了解IIC總線時(shí)序: 1.1 總線數(shù)據(jù)有效性 IIC總線是單工,因此同一時(shí)刻數(shù)據(jù)只有一個(gè)流向,因此采樣有效時(shí)鐘也是單一的,是在SCL時(shí)鐘的高電平采樣數(shù)據(jù)。 IIC總線上SDA數(shù)據(jù)在SCL時(shí)鐘低電平是可以發(fā)生變化,但是在時(shí)鐘高電平時(shí)必須穩(wěn)定,以便主從設(shè)備根據(jù)時(shí)鐘采樣數(shù)據(jù),如下圖:
1.2 總線空閑條件 IIC總線上設(shè)備都釋放總線(發(fā)出傳輸停止)后,IIC總線根據(jù)上拉電阻變成高電平,SDA SCL都是高電平。
1.3 總線數(shù)據(jù)傳輸起始和結(jié)束條件 IIC總線SCL高電平時(shí)SDA出現(xiàn)由高到低的跳變,標(biāo)志總線上數(shù)據(jù)傳輸?shù)拈_始條件 IIC總線SCL高電平時(shí)SDA出現(xiàn)由低到高的跳變,標(biāo)志總線上數(shù)據(jù)傳輸?shù)慕Y(jié)束條件
1.4 總線數(shù)據(jù)傳輸順序以及ACK應(yīng)答 IIC總線上數(shù)據(jù)傳輸室MSB在前,LSB在后,從示波器上看,從左向右依次讀出數(shù)據(jù)即可 IIC總線傳輸?shù)臄?shù)據(jù)不收限制,但是每次發(fā)到SDA上的必須是8位,并且主機(jī)發(fā)送8位后釋放總線,從機(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 總線讀寫時(shí)序 數(shù)據(jù)的傳輸在起始條件之后,發(fā)送一個(gè)7位的從機(jī)地址,緊接著第8位是數(shù)據(jù)方向(R/
W),0-表示發(fā)送數(shù)據(jù)(寫),1-表示接收數(shù)據(jù)(讀)。數(shù)據(jù)傳輸一般由主機(jī)產(chǎn)生的停止位(P)終止。但是如果主機(jī)仍希望在總線上通訊,它可以產(chǎn)生重復(fù)起始條件(Sr),和尋址另一個(gè)從機(jī),而不是首先產(chǎn)生一個(gè)停止條件。在這種傳輸中,可能有不同的讀/寫格式結(jié)合。 IIC總線主設(shè)備讀寫從設(shè)備,一般都是與從設(shè)備的寄存器打交道,這個(gè)可以通過閱讀從設(shè)備的datasheet獲取??偩€寫時(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 總線讀時(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 總線讀時(shí)序與寫的不同之處在于讀需要2次傳輸才能完成一次讀取,首先要寫寄存器地址到從設(shè)備,其實(shí)是寫到了從設(shè)備的控制寄存器或者命令寄存器,從設(shè)備內(nèi)部會(huì)根據(jù)這個(gè)地址來尋址所要操作的寄存器。 我在讀我們的bios和內(nèi)核時(shí)發(fā)現(xiàn),2者在總線讀時(shí)序上的實(shí)現(xiàn)不太一樣,在于第一次寄存器地址寫入后,一個(gè)發(fā)的是restart,一個(gè)發(fā)的是stop,然后再start開始讀取數(shù)據(jù),示波器抓波形發(fā)現(xiàn)讀取數(shù)據(jù)都正確,說明這2種時(shí)序都是正確的。 IIC總線的讀寫時(shí)序比較固定,設(shè)備通信嚴(yán)格遵循協(xié)議,因此iIC總線設(shè)備驅(qū)動(dòng)程序的編寫也就相對(duì)簡(jiǎn)單一些。 主要應(yīng)用的iIc總線設(shè)備有touchscreen rtc 外擴(kuò)io等
二 SPI總線 SPI--Serial Peripheral Interface,串行外圍設(shè)備接口,是Motorola公司推出的一種同步串行通訊方式,是一種三線同步總線,因其硬件功能很強(qiáng),與SPI有關(guān)的軟件就相當(dāng)簡(jiǎn)單,使CPU有更多的時(shí)間處理其他事務(wù)。 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總線速度要比iic要快,我們開發(fā)板最快能達(dá)到30MHZ。
spi總線特點(diǎn): 1. 采用主-從模式(Master-Slave) 的控制方式 具體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種總線的異同點(diǎn): 1 iic總線不是全雙工,2根線SCL SDA。spi總線實(shí)現(xiàn)全雙工,4根線SCK CS MOSI MISO 2 iic總線是多主機(jī)總線,通過SDA上的地址信息來鎖定從設(shè)備。spi總線只有一個(gè)主設(shè)備,主設(shè)備通過CS片選來確定從設(shè)備 3 iic總線傳輸速度在100kbps-4Mbps。spi總線傳輸速度更快,可以達(dá)到30MHZ以上。 4 iic總線空閑狀態(tài)下SDA SCL都是高電平。spi總線空閑狀態(tài)MOSI MISO也都是 SCK是有CPOL決定的 5 iic總線scl高電平時(shí)sda下降沿標(biāo)志傳輸開始,上升沿標(biāo)志傳輸結(jié)束。spi總線cs拉低標(biāo)志傳輸開始,cs拉高標(biāo)志傳輸結(jié)束 6 iic總線是SCL高電平采樣。spi總線因?yàn)槭侨p工,因此是沿采樣,具體要根據(jù)CPHA決定。一般情況下master device是SCK的上升沿發(fā)送,下降沿采集 7 iic總線和spi總線數(shù)據(jù)傳輸都是MSB在前,LSB在后(串口是LSB在前) 8 iic總線和spi總線時(shí)鐘都是由主設(shè)備產(chǎn)生,并且只在數(shù)據(jù)傳輸時(shí)發(fā)出時(shí)鐘 9 iic總線讀寫時(shí)序比較固定統(tǒng)一,設(shè)備驅(qū)動(dòng)編寫方便。spi總線不同從設(shè)備讀寫時(shí)序差別比較大,因此必須根據(jù)具體的設(shè)備datasheet來實(shí)現(xiàn)讀寫,相對(duì)復(fù)雜一些。 |
|
|