I2C協議簡介


 

 

 主從芯片如何傳輸數據

AT24C02是一個存儲芯片,需要把數據從ARM板發給AT24C02,也需要從AT24C02讀取數據。

I2C是一個主從結構,Master發起傳輸,slave接收或回應

一主多從:如何選在哪個從芯片呢?每個從芯片都有設備地址,設備地址各不相同,這些地址都是在芯片里寫死的。

 

 

 

 

 

 

 

 

 設備地址是7位,先傳輸地址的最高位MSB。

SCL為低電平時,SDA可變化

SCL為高電平時,SDA不可變。

問:如何在SDA上實現雙向傳輸?

主從設備里面必然有兩個引腳,發送引腳和接收引腳。

 1)主設備發送時,從設備不應該發送。

可以通過SCL區分控制。

2)主設備發送時,從設備的發送引腳不影響SDA上傳輸的數據。同樣從設備發送時,主設備的發送引腳不要影響SDA上傳輸的數據。怎樣做到呢?

如上圖所示,使用開極電路。

使用一真值表來表示A、B以及SDA引腳電平狀態。

 

 1)當A為低電平時,主設備里的三極管不導通。B為低電平時,從設備里的三極管也是不導通的。那么此時SDA引腳的電平狀態是什么?

如果沒有接那個上拉電阻,那么SDA引腳是出於懸空狀態的,懸空引腳的電平狀態是無法確定的,這也是為什么加上上拉電阻的原因。加上上拉電阻后,此時SDA引腳電平的狀態是由上拉電阻決定的,為1。

2)當A為低電平時,主設備三極管不導通。B為高電平時,從設備的三極管導通,因此SDA引腳的電平為低電平。

后面兩種情況的分析,和上面兩種情況的原理是一樣的,在此不再贅述。

從上面分析可以看出,

1)芯片不影響數據線上即SDA上的數據,只要使這個芯片不驅動三極管即可。

2)要使SDA引腳上電平為高電平,不要驅動主從設備任意的三極管

3)要使SDA引腳上電平為低電平,驅動主從設備上的任意一個三極管即可。

舉個例子:

主設備發送8bit數據給從設備

 

 

 

 問題:SCL是不是一直由主控芯片來決定?

答案:不是的。第9個時鍾以后,如果某一方(比如說,我現在還忙不過來,再等一會兒),它可以一直把SCL拉低。當SCL為低電平時,主從芯片都不應該使用I2C總線。

SCL為低電平時,表示大家都在忙,當變為高電平時,再來操作。

注意:對於I2C協議,它只能規定如何傳輸數據,這個數據是什么含義,它完全不能控制。數據的含義由設備決定。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM