01我們習以為常的IIC通常是什么樣子?
在我們研發/應用工程師眼中,IIC的形象通常是如圖這樣的吧?(你們說是不是?)
是的,對于理想的硬件調程序,這個層面已經基本夠用。(我是已經get到了)
02IIC還可以是這樣的
簡單實用的IIC電平匹配電路,原理很簡單、也很巧妙。
Si8400芯片,做UART或者IIC隔離是很不錯的。做隔離也有實際意義的:
比如涉及強電的板子,需要隔離后的UART口打印調試信息,方便debug;電容式觸摸按鍵調試中,某些產品采用隔離的IIC接口(如Azoteq,Cypress等芯片大部分采用IIC)調試能得到更準確的數據(原理上涉及到人體大地等構成的寄生電容,挺有意思,可以看創易棧的觸摸按鍵相關內容)。
有朋友會問,我見過5V芯片和3V芯片,直接把IIC接在一起的,不需要做電壓匹配呀?
這個不建議用。需要仔細看數據手冊的:一般來說3V芯片的I/O都有如圖的保護結構,導致SCL、SDA信號高電平被限制在3V+0.3V,5V芯片經常不能正確識別的。
03支持雙電壓的高速IIC接口
TI的TXS0102帶OE功能的高速IIC接口芯片。
這個有什么好處呢?
當然有,除了支持電平匹配;從它的MOS結構也可以看出,對SCL和SDA的上升邊緣有個加速過程,速度可以支持到2Mbps喔。
04觸碰IIC的核心
每一個IIC總線器件內部的SDA、SCL引腳電路結構都是一樣的,引腳的輸出驅動與輸入緩沖連在一起。其中輸出為漏極開路的場效應管、輸入緩沖為一只高輸入阻抗的同相器[1]。這種電路具有兩個特點:
①由于SDA、SCL為漏極開路結構,借助于外部的上拉電阻實現了信號的“線與”邏輯;
②引腳在輸出信號的同時還將引腳上的電平進行檢測,檢測是否與剛才輸出一致。為 “時鐘拉伸”和“總線仲裁”提供硬件基礎。
I2C總線接口內部結構
IIC設備對總線的操作僅有“把線路拉到地”——輸出邏輯0。基于IIC總線的設計,線路上不可能出現電平沖突現象。如果一設備發送邏輯0,其他發送邏輯1,那么線路看到的只有邏輯0。也就是說,如果出現電平沖突,發送邏輯0的始終是“贏家”。總線的物理接法允許主設備往總線寫數據的同事讀取數據。這樣兩主設備爭總線的時候“贏家”并不知道競爭的發生,只有“輸家”發現了沖突——當寫一個邏輯1,卻讀到了0——而退出競爭。
時鐘拉伸(Clock stretching)
如果被控器希望主控器降低傳送速度可以通過將SCL主動拉低延長其低電平時間的方法來通知主控器,當主控器在準備下一次傳送發現SCL的電平被拉低時就進行等待,直至被控器完成操作并釋放SCL線的控制控制權。這樣以來,主控器實際上受到被控器的時鐘同步控制。可見SCL線上的低電平是由時鐘低電平最長的器件決定;高電平的時間由高電平時間最短的器件決定。這就是時鐘拉伸,它解決了I2C總線的速度同步。
總線仲裁
假設主控器1要發送的數據DATA1為“101 ……”;主控器2要發送的數據DATA2為“1001 ……”總線被啟動后兩個主控器在每發送一個數據位時都要對自己的輸出電平進行檢測,只要檢測的電平與自己發出的電平一致,他們就會繼續占用總線。在這種情況下總線還是得不到仲裁。當主控器1發送第3位數據“1”時(主控器2發送“0” ),由于“線與”的結果SDA上的電平為“0”,這樣當主控器1檢測自己的輸出電平時,就會測到一個與自身不相符的“0”電平。這時主控器1只好放棄對總線的控制權;因此主控器2就成為總線的唯一主宰者。
總結
① 對于整個仲裁過程主控器1和主控器2都不會丟失數據;
② 各個主控器沒有對總線實施控制的優先級別;
③總線控制隨即而定,他們遵循“低電平優先”的原則,即誰先發送低電平誰就會掌握對總線的控制權。
根據上面的描述,“時鐘拉伸”與“總線仲裁”可以總結如下規律:
①主控器通過檢測SCL上的電平來調節與從器件的速度同步問題——時鐘拉伸;
②主控器通過檢測SDA上自身發送的電平來判斷是否發生總線“沖突”——總線仲裁。因此,I2C總線的“時鐘同步”與“總線仲裁”是靠器件自身接口的特殊結構得以實現的。
編輯:lyn
-
硬件
+關注
關注
11文章
3371瀏覽量
66373 -
IIC
+關注
關注
11文章
302瀏覽量
38423 -
IIC接口
+關注
關注
0文章
23瀏覽量
11719
發布評論請先 登錄
相關推薦
評論