主從芯片如何傳輸數據
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協議,它只能規定如何傳輸數據,這個數據是什么含義,它完全不能控制。數據的含義由設備決定。