對I2C匯流排的時鐘同步和匯流排仲裁的深入理解

2021-08-31 15:56:22 字數 1001 閱讀 1703

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!

每乙個iic匯流排器件內部的sda、scl引腳電路結構都是一樣的,引腳的輸出驅動與輸入緩衝連在一起。其中輸出為漏極開路的場效電晶體、輸入緩衝為乙隻高輸入阻抗的同相器[1]。這種電路具有兩個特點: 

①由於sda、scl為漏極開路結構,借助於外部的上拉電阻實現了訊號的「線與」邏輯;

②引腳在輸出訊號的同時還將引腳上的電平進行檢測,檢測是否與剛才輸出一致。為 「時鐘同步」和「匯流排仲裁」提供硬體基礎。

i2c匯流排介面內部結構

如果被控器希望主控器降低傳送速度可以通過將scl主動拉低延長其低電平時間的方法來通知主控器,當主控器在準備下一次傳送發現scl的電平被拉低時就進行等待,直至被控器完成操作並釋放scl線的控制控制權。這樣以來,主控器實際上受到被控器的時鐘同步控制。可見scl線上的低電平是由時鐘低電平最長的器件決定;高電平的時間由高電平時間最短的器件決定。這就是時鐘同步,它解決了i2c匯流排的速度同步。

假設主控器1要傳送的資料data1為「101 ……」;主控器2要傳送的資料data2為「1001 ……」匯流排被啟動後兩個主控器在每傳送乙個資料位時都要對自己的輸出電平進行檢測,只要檢測的電平與自己發出的電平一致,他們就會繼續占用匯流排。在這種情況下匯流排還是得不到仲裁。當主控器1傳送第3位資料「1」時(主控器2傳送「0」 ),由於「線與」的結果sda上的電平為「0」,這樣當主控器1檢測自己的輸出電平時,就會測到乙個與自身不相符的「0」電平。這時主控器1只好放棄對匯流排的控制權;因此主控器2就成為匯流排的唯一主宰者。

不難看出:

根據上面的描述,「時鐘同步」與「匯流排仲裁」可以總結如下規律:

[1]同相器:當輸入高電平時輸出也是高電平,輸入低電平時輸出也是低電平。主要要於需要緩衝的場合,就是只要輸入很小的電流,可輸出較大的電流,增加帶載能力。

給我老師的人工智慧教程打call!

SCCB 匯流排和I2C匯流排區別

sccb seriai camera controlbus 是簡化的i2c協議,sio l是序列時鐘輸入線,sio o是序列雙向資料線,分別相當於i2c協議的scl和sda。sccb的匯流排時序與i2c基本相同,它的響應訊號ack被稱為乙個傳輸單元的第9位,分為don t care和na。don t...

i2c匯流排時序

一心想踏入linux device driver的世界,想著i2c匯流排相對於usb等其他匯流排較為簡單,就以i2c作為切入點,希望可以逐步理解ldd的設計思想,並能理解其裝置模型的概念。在此對近期於i2c匯流排及驅動原始碼的理解做備忘,以免徒勞。平台友善之臂s70 tiny6410 cpusams...

I2C匯流排死鎖

原文 現象 最近發現訪問i2c裝置時,主裝置復位可能會引起i2c死鎖,表現為scl為高,sda一直為低,後發現是從裝置拉死i2c匯流排,從裝置斷電之後,sda變高,上電後通訊正常。後來通過拉低scl訊號線,sda就會自動變成高電平,i2c匯流排恢復。原因 在正常情況下,i2c匯流排協議能夠保證匯流排...