I2C總線(xiàn)的仲裁機制
I2C總線(xiàn)上的仲裁分兩部分:SCL線(xiàn)的同步和SDA線(xiàn)的仲裁。
1
SCL同步是由于總線(xiàn)具有線(xiàn)“與”的邏輯功能,即只要有一個(gè)節點(diǎn)發(fā)送低電平時(shí),總線(xiàn)上就表現為低電平。當所有的節點(diǎn)都發(fā)送高電平時(shí),總線(xiàn)才能表現為高電平。正是由于線(xiàn)“與”邏輯功能的原理,當多個(gè)節點(diǎn)同時(shí)發(fā)送時(shí)鐘信號時(shí),在總線(xiàn)上表現的是統一的時(shí)鐘信號。這就是SCL的同步原理
![]() |
2 SDA仲裁
SDA線(xiàn)的仲裁也是建立在總線(xiàn)具有線(xiàn)“與”邏輯功能的原理上的。節點(diǎn)在發(fā)送1位數據后,比較總線(xiàn)上所呈現的數據與自己發(fā)送的是否一致。是,繼續發(fā)送;否則,退出競爭。SDA線(xiàn)的仲裁可以保證I2C總線(xiàn)系統在多個(gè)主節點(diǎn)同時(shí)企圖控制總線(xiàn)時(shí)通信正常進(jìn)行并且數據不丟失??偩€(xiàn)系統通過(guò)仲裁只允許一個(gè)主節點(diǎn)可以繼續占據總線(xiàn)
3仲裁過(guò)程

兩個(gè)主節點(diǎn)的仲裁過(guò)程
上圖是以?xún)蓚€(gè)節點(diǎn)為例的仲裁過(guò)程。DATA1和DATA2分別是主節點(diǎn)向總線(xiàn)所發(fā)送的數據信號,SDA為總線(xiàn)上所呈現的數據信號,SCL是總線(xiàn)上所呈現的時(shí)鐘信號。當主節點(diǎn)1、2同時(shí)發(fā)送起始信號時(shí),兩個(gè)主節點(diǎn)都發(fā)送了高電平信號。這時(shí)總線(xiàn)上呈現的信號為高電平,兩個(gè)主節點(diǎn)都檢測到總線(xiàn)上的信號與自己發(fā)送的信號相同,繼續發(fā)送數據。第2個(gè)時(shí)鐘周期,2個(gè)主節點(diǎn)都發(fā)送低電平信號,在總線(xiàn)上呈現的信號為低電平,仍繼續發(fā)送數據。在第3個(gè)時(shí)鐘周期,主節點(diǎn)1發(fā)送高電平信號,而主節點(diǎn)2發(fā)送低電平信號。根據總線(xiàn)的線(xiàn)“與”的邏輯功能,總線(xiàn)上的信號為低電平,這時(shí)主節點(diǎn)1檢測到總線(xiàn)上的數據和自己所發(fā)送的數據不一樣,就斷開(kāi)數據的輸出級,轉為從機接收狀態(tài)。這樣主節點(diǎn)2就贏(yíng)得了總線(xiàn),而且數據沒(méi)有丟失,即總線(xiàn)的數據與主節點(diǎn)2所發(fā)送的數據一樣,而主節點(diǎn)1在轉為從節點(diǎn)后繼續接收數據,同樣也沒(méi)有丟掉SDA線(xiàn)上的數據。因此在仲裁過(guò)程中數據沒(méi)有丟失。
總結:SDA仲裁和SCL時(shí)鐘同步處理過(guò)程沒(méi)有先后關(guān)系,而是同時(shí)進(jìn)行的。
評論