轉(zhuǎn)載一遍寫的比較清晰的博客
http://blog.sina.com.cn/s/blog_71c0df0d0101qci6.html
圖11-1給出一個(gè)由MCU作為主機(jī)和敬,通過(guò)IIC總線帶3個(gè)從機(jī)的單主機(jī)IIC總線系統(tǒng)。這是最常用戏阅、最典型的IIC總線連接方式。
物理結(jié)構(gòu)上啤它,IIC系統(tǒng)由一條串行數(shù)據(jù)線SDA和一條串行時(shí)鐘線SCL組成奕筐。主機(jī)按一定的通信協(xié)議向從機(jī)尋址和進(jìn)行信息 傳輸。在數(shù)據(jù)傳輸時(shí)变骡,由主機(jī)初始化一次數(shù)據(jù)傳輸离赫,主機(jī)使數(shù)據(jù)在SDA線上傳輸?shù)耐瑫r(shí)還通過(guò)SCL線傳輸時(shí)鐘。信息傳輸?shù)膶?duì)象和方向以及信息傳輸?shù)拈_始和終 止均由主機(jī)決定塌碌。
每個(gè)器件都有一個(gè)唯一的地址渊胸,而且可以是單接收的器件(例如:LCD驅(qū)動(dòng)器)或者可以接收也可以發(fā)送的器件(例如:存儲(chǔ)器)。發(fā)送器或接收器可以在主模式或從模式下操作台妆,這取決于芯片是否必須啟動(dòng)數(shù)據(jù)的傳輸還是僅僅被尋址翎猛。
1.總線上數(shù)據(jù)的有效性
<wbr>
IIC總線是以串行方式傳輸數(shù)據(jù),從數(shù)據(jù)字節(jié)的最高位開始傳送接剩,每一個(gè)數(shù)據(jù)位在SCL上都有一個(gè)時(shí)鐘脈沖相對(duì)應(yīng)切厘。在時(shí)鐘線高電平期間數(shù)據(jù)線上必須保持穩(wěn)定 的邏輯電平狀態(tài),高電平為數(shù)據(jù)1懊缺,低電平為數(shù)據(jù)0疫稿。只有在時(shí)鐘線為低電平時(shí),才允許數(shù)據(jù)線上的電平狀態(tài)變化,如圖11-2所示遗座。
2.總線上的信號(hào)
IIC總線在傳送數(shù)據(jù)過(guò)程中共有四種類型信號(hào)舀凛,它們分別是:開始信號(hào)、停止信號(hào)途蒋、重新開始信號(hào)和應(yīng)答信號(hào)猛遍。
開始信號(hào)(START):如圖11-3所示,當(dāng)SCL為高電平時(shí)碎绎,SDA由高電平向低電平跳變螃壤,產(chǎn)生開始信號(hào)。當(dāng)總線空閑的時(shí)候筋帖,例如奸晴,沒(méi)有主動(dòng)設(shè)備在使用總線(SDA和SCL都處于高電平),主機(jī)通過(guò)發(fā)送開始(START)信號(hào)建立通信日麸。
停止信號(hào)(STOP):如圖11-3所示寄啼,當(dāng)SCL為高電平時(shí),SDA由低電平向高電平跳變代箭,產(chǎn)生停止信號(hào)墩划。主機(jī)通過(guò)發(fā)送停止信號(hào),結(jié)束數(shù)據(jù)通信嗡综。
重新開始信號(hào)(Repeated START):在IIC總線上乙帮,由主機(jī)發(fā)送一個(gè)開始信號(hào)啟動(dòng)一次通信后,在首次發(fā)送停止信號(hào)之前极景,主機(jī)通過(guò)發(fā)送重新開始信號(hào)察净,可以轉(zhuǎn)換與當(dāng)前從機(jī)的通信模 式,或是切換到與另一個(gè)從機(jī)通信盼樟。如圖11-3所示氢卡,當(dāng)SCL為高電平時(shí),SDA由高電平向低電平跳變晨缴,產(chǎn)生重新開始信號(hào)译秦,它的本質(zhì)就是一個(gè)開始信號(hào)。
應(yīng)答信號(hào)(A):接收數(shù)據(jù)的IC在接收到8位數(shù)據(jù)后击碗,向發(fā)送數(shù)據(jù)的IC發(fā)出的特定的低電平脈沖筑悴。每一個(gè)數(shù)據(jù)字節(jié)后面都要 跟一位應(yīng)答信號(hào),表示已收到數(shù)據(jù)稍途。應(yīng)答信號(hào)在第9個(gè)時(shí)鐘周期出現(xiàn)雷猪,這時(shí)發(fā)送器必須在這一時(shí)鐘位上釋放數(shù)據(jù)線,由接收設(shè)備拉低SDA電平來(lái)產(chǎn)生應(yīng)答信號(hào)晰房,由 接收設(shè)備保持SDA的高電平來(lái)產(chǎn)生非應(yīng)答信號(hào)(A(—))求摇,如圖11-4所示射沟。所以,一個(gè)完整的字節(jié)數(shù)據(jù)傳輸需要9個(gè)時(shí)鐘脈沖与境。如果從機(jī)作為接收方向主機(jī) 發(fā)送非應(yīng)答信號(hào)验夯,這樣,主機(jī)方就認(rèn)為此次數(shù)據(jù)傳輸失斔さ蟆挥转;如果是主機(jī)作為接收方,在從機(jī)發(fā)送器發(fā)送完一個(gè)字節(jié)數(shù)據(jù)后共屈,發(fā)送了非應(yīng)答信號(hào)绑谣,從機(jī)就認(rèn)為數(shù)據(jù)傳輸 結(jié)束,并釋放SDA線拗引。不論是以上哪種情況都會(huì)終止數(shù)據(jù)傳輸借宵,這時(shí),主機(jī)或是產(chǎn)生停止信號(hào)釋放總線矾削,或是產(chǎn)生重新開始信號(hào)壤玫,開始一次新的通信。開始信號(hào)哼凯、 重新開始信號(hào)和停止信號(hào)都是由主控制器產(chǎn)生欲间,應(yīng)答信號(hào)由接收器產(chǎn)生,總線上帶有IIC總線接口的器件很容易檢測(cè)到這些信號(hào)断部。
3.總線上數(shù)據(jù)傳輸格式
一般情況下猎贴,一個(gè)標(biāo)準(zhǔn)的IIC通信由四部分組成:開始信號(hào)、從機(jī)地址傳輸蝴光、數(shù)據(jù)傳輸嘱能、停止信號(hào)。
由主機(jī)發(fā)送一個(gè)開始信號(hào)虱疏,啟動(dòng)一次IIC通信;在主機(jī)對(duì)從機(jī)尋址后苏携,再在總線上傳輸數(shù)據(jù)做瞪。IIC總線上傳送的每一個(gè)字節(jié)均為8位,首先發(fā)送的數(shù)據(jù)位為最高 位右冻,每傳送一個(gè)字節(jié)后都必須跟隨一個(gè)應(yīng)答位装蓬,每次通信的數(shù)據(jù)字節(jié)數(shù)是沒(méi)有限制的;在全部數(shù)據(jù)傳送結(jié)束后纱扭,由主機(jī)發(fā)送停止信號(hào)牍帚,結(jié)束通信。
圖11-5所示乳蛾,時(shí)鐘線為低電平時(shí)數(shù)據(jù)傳送將停止進(jìn)行暗赶。這種情況可以用于當(dāng)接收器接收到一個(gè)字節(jié)數(shù)據(jù)后要進(jìn)行一些其它工 作而無(wú)法立即接收下一個(gè)數(shù)據(jù)時(shí)鄙币,迫使總線進(jìn)入等待狀態(tài),直到接收器準(zhǔn)備好接收新數(shù)據(jù)時(shí)蹂随,接收器再釋放時(shí)鐘線使數(shù)據(jù)傳送得以繼續(xù)正常進(jìn)行十嘿。例如,當(dāng)接收器接 收完主控制器的一個(gè)字節(jié)數(shù)據(jù)后岳锁,產(chǎn)生中斷信號(hào)并進(jìn)行中斷處理绩衷,中斷處理完畢才能接收下一個(gè)字節(jié)數(shù)據(jù),這時(shí)接收器在中斷處理時(shí)將鉗住SCL為低電平激率,直到中 斷處理完畢才釋放SCL咳燕。
4.IIC總線尋址約定 為了消除IIC總線系統(tǒng)中主控器與被控器的地址選擇線,最大限度地簡(jiǎn)化總線連接線乒躺,IIC總線采用了獨(dú)特的尋址約定招盲,規(guī)定了開始信號(hào)后的第一個(gè)字節(jié)為尋址字節(jié),用來(lái)尋址被控器件聪蘸,并規(guī)定數(shù)據(jù)傳送方向宪肖。
在IIC總線系統(tǒng)中,尋址字節(jié)由被控器的七位地址位(它占據(jù)了D7-D1位)和一位方向位(為D0位)組成健爬。方向位為0時(shí)表示主控器將數(shù)據(jù)寫入被控器控乾,為 1時(shí)表示主控器從被控器讀取數(shù)據(jù)。主控器發(fā)送開始信號(hào)后娜遵,立即發(fā)送尋址字節(jié)蜕衡,這時(shí),總線上的所有器件都將尋址字節(jié)中的7位地址與自己器件地址比較设拟。如果兩 者相同慨仿,則該器件認(rèn)為被主控器尋址,并發(fā)送應(yīng)答信號(hào)纳胧,被控器根據(jù)讀镰吆,寫位確定自身是作為發(fā)送器還是接收器。
主器件作為被控器時(shí)跑慕,其7位從地址在IIC總線地址寄存器中給定万皿,為純軟件地址。而非單片機(jī)類型的外圍器件地址完全由器件類型與引腳電平給定核行。IIC總線系統(tǒng)中牢硅,沒(méi)有兩個(gè)從機(jī)的地址是相同的。主控器不應(yīng)該傳輸一個(gè)和它本身的從地址相同的地址芝雪。
5.主機(jī)向從機(jī)讀寫1個(gè)字節(jié)數(shù)據(jù)的過(guò)程
如圖11-6所示减余,主機(jī)要向從機(jī)寫1個(gè)字節(jié)數(shù)據(jù)時(shí),主機(jī)首先產(chǎn)生START信號(hào)惩系,然后緊跟著發(fā)送一個(gè)從機(jī)地址位岔,這個(gè)地址共有7位如筛,緊接著的第8位是數(shù)據(jù)方 向位(R/W),0表示主機(jī)發(fā)送數(shù)據(jù)(寫)赃承,1表示主機(jī)接收數(shù)據(jù)(讀)妙黍,這時(shí)候主機(jī)等待從機(jī)的應(yīng)答信號(hào)(A),當(dāng)主機(jī)收到應(yīng)答信號(hào)時(shí)瞧剖,發(fā)送要訪問(wèn)的地址拭嫁, 繼續(xù)等待從機(jī)的應(yīng)答信號(hào),當(dāng)主機(jī)收到應(yīng)答信號(hào)時(shí)抓于,發(fā)送1個(gè)字節(jié)的數(shù)據(jù)做粤,繼續(xù)等待從機(jī)的應(yīng)答信號(hào),當(dāng)主機(jī)收到應(yīng)答信號(hào)時(shí)捉撮,產(chǎn)生停止信號(hào)怕品,結(jié)束傳送過(guò)程。
如圖11-7所示巾遭,主機(jī)要從從機(jī)讀1個(gè)字節(jié)數(shù)據(jù)時(shí)肉康,主機(jī)首先產(chǎn)生START信號(hào),然后緊跟著發(fā)送一個(gè)從機(jī)地址灼舍,注意此時(shí)該地址的第8位為0吼和,表明是向從機(jī) 寫命令,這時(shí)候主機(jī)等待從機(jī)的應(yīng)答信號(hào)(A)骑素,當(dāng)主機(jī)收到應(yīng)答信號(hào)時(shí)炫乓,發(fā)送要訪問(wèn)的地址,繼續(xù)等待從機(jī)的應(yīng)答信號(hào)献丑,當(dāng)主機(jī)收到應(yīng)答信號(hào)后末捣,主機(jī)要改變通信 模式(主機(jī)將由發(fā)送變?yōu)榻邮眨瑥臋C(jī)將由接收變?yōu)榘l(fā)送)所以主機(jī)發(fā)送重新開始信號(hào)创橄,然后緊跟著發(fā)送一個(gè)從機(jī)地址箩做,注意此時(shí)該地址的第8位為1,表明將主機(jī)設(shè) 置成接收模式開始讀取數(shù)據(jù)妥畏,這時(shí)候主機(jī)等待從機(jī)的應(yīng)答信號(hào)邦邦,當(dāng)主機(jī)收到應(yīng)答信號(hào)時(shí),就可以接收1個(gè)字節(jié)的數(shù)據(jù)咖熟,當(dāng)接收完成后,主機(jī)發(fā)送非應(yīng)答信號(hào)柳畔,表示不 在接收數(shù)據(jù)馍管,主機(jī)進(jìn)而產(chǎn)生停止信號(hào),結(jié)束傳送過(guò)程薪韩。