在多主的通信系統(tǒng)中熬的」敬澹總線上有多個(gè)節(jié)點(diǎn),它們都有自己的尋址地址来吩,可以作為從節(jié)點(diǎn)被別的節(jié)點(diǎn)訪問(wèn)敢辩,同時(shí)它們都可以作為主節(jié)點(diǎn)向其他的節(jié)點(diǎn)發(fā)送控制節(jié)點(diǎn)和傳送數(shù)據(jù)蔽莱。但是如果有兩個(gè)或兩個(gè)以上的節(jié)點(diǎn)都向總線上發(fā)送啟動(dòng)信號(hào)并開(kāi)始傳送數(shù)據(jù),這樣就形成了沖突戚长。要解決這種沖突盗冷,就要進(jìn)行仲裁的判決,這就是I2C總線上的仲裁同廉。
I2C總線上的仲裁分兩部分:SCL線的同步和SDA線的仲裁仪糖。
1.SCL線的同步(時(shí)鐘同步)
SCL同步是用于總線具有線"與"的邏輯功能,即只要有一個(gè)節(jié)點(diǎn)發(fā)送低電平時(shí)迫肖,總線上就表現(xiàn)為低電平锅劝。當(dāng)所有的節(jié)點(diǎn)都發(fā)送高電平時(shí),總線才能表現(xiàn)為高電平蟆湖。正是由于線“與”邏輯功能的原理故爵,當(dāng)多個(gè)節(jié)點(diǎn)同時(shí)發(fā)送時(shí)鐘信號(hào)時(shí),在總線上表現(xiàn)的是統(tǒng)一的時(shí)鐘信號(hào)帐姻。這就是SCL的同步原理稠集。
2.SDA仲裁
SDA線的仲裁也是建立在總線具有線"與"邏輯功能的原理上的。節(jié)點(diǎn)在發(fā)送1位數(shù)據(jù)后饥瓷,比較總線上所呈現(xiàn)的數(shù)據(jù)與自己發(fā)送的是否一致剥纷。是,繼續(xù)發(fā)送呢铆;否則晦鞋,退出競(jìng)爭(zhēng)。SDA線的仲裁可以保證I2C總線系統(tǒng)在多個(gè)主節(jié)點(diǎn)同時(shí)企圖控制總線時(shí)通信正常進(jìn)行并且數(shù)據(jù)不丟失棺克∮贫猓總線系統(tǒng)通過(guò)仲裁只允許一個(gè)主節(jié)點(diǎn)可以繼續(xù)占據(jù)總線。
仲裁過(guò)程
上圖是以兩個(gè)節(jié)點(diǎn)為例的仲裁過(guò)程娜谊。DATA1和DATA2分別是主節(jié)點(diǎn)向總線所發(fā)送的數(shù)據(jù)信號(hào)确买,SDA為總線上所呈現(xiàn)的數(shù)據(jù)信號(hào),SCL是總線上所呈現(xiàn)的時(shí)鐘信號(hào)纱皆。當(dāng)主節(jié)點(diǎn)1湾趾、2同時(shí)發(fā)送起始信號(hào)時(shí),兩個(gè)主節(jié)點(diǎn)都發(fā)送了高電平信號(hào)派草。這時(shí)總線上呈現(xiàn)的信號(hào)為高電平搀缠,兩個(gè)主節(jié)點(diǎn)都檢測(cè)到總線上的信號(hào)與自己發(fā)送的信號(hào)相同,繼續(xù)發(fā)送數(shù)據(jù)近迁。第2個(gè)時(shí)鐘周期艺普,2個(gè)主節(jié)點(diǎn)都發(fā)送低電平信號(hào),在總線上呈現(xiàn)的信號(hào)為低電平,仍繼續(xù)發(fā)送數(shù)據(jù)歧譬。在第3個(gè)時(shí)鐘周期岸浑,主節(jié)點(diǎn)1發(fā)送高電平信號(hào),而主節(jié)點(diǎn)2發(fā)送低電平信號(hào)瑰步。根據(jù)總線的線“與”的邏輯功能助琐,總線上的信號(hào)為低電平,這時(shí)主節(jié)點(diǎn)1檢測(cè)到總線上的數(shù)據(jù)和自己所發(fā)送的數(shù)據(jù)不一樣面氓,就斷開(kāi)數(shù)據(jù)的輸出級(jí),轉(zhuǎn)為從機(jī)接收狀態(tài)蛆橡。這樣主節(jié)點(diǎn)2就贏得了總線舌界,而且數(shù)據(jù)沒(méi)有丟失,即總線的數(shù)據(jù)與主節(jié)點(diǎn)2所發(fā)送的數(shù)據(jù)一樣泰演,而主節(jié)點(diǎn)1在轉(zhuǎn)為從節(jié)點(diǎn)后繼續(xù)接收數(shù)據(jù)呻拌,同樣也沒(méi)有丟掉SDA線上的數(shù)據(jù)。因此在仲裁過(guò)程中數(shù)據(jù)沒(méi)有丟失睦焕。
總結(jié):SDA仲裁和SCL時(shí)鐘同步處理過(guò)程沒(méi)有先后關(guān)系藐握,而是同時(shí)進(jìn)行的。