I2C、I3C和SMBus的區別和聯系


I2C
I2C(Inter-Integrated Circuit,IIC)最初由飛利浦(Philips)半導體(后並入NXP)在1982年提出,主要目的是提供一種簡單的、成本低廉的串行總線,用於MCU和電視機原件進行通信。它在最初是由一個Master(可以多Master)和可以多達127個Slave在由兩根線(SDA, SCL)組成的總線上進行通訊

這樣MCU就可以不用再單獨和各個設備通訊,而僅僅用兩根線就可以和所有外圍設備愉快的通話了。這兩根線分別是數據線(SDA)和時鍾線(SCL)。如此這般,大大節約了芯片引腳數目,方便主板布線,節省了整體成本。良好的設計,慢慢讓它得到了廣泛應用。這些年下來,I2C從省電和提高速度方面進行了三次版本升級,速度從10KHz提高到最高可達5MHz。現在計算機領域,大多數低速設備都是靠I2C通訊:大多數傳感器的數據讀取界面是I2C;Clock芯片CK404界面是I2C;內存條SPD信息的讀取界面是I2C;有些控制器的界面是I2C,等等。隨着速度提高,有些中速設備也是I2C:經常遇到的例子是筆記本電腦的觸摸板(Touch Pad)和觸摸屏(Touch Panel),只不過界面是HS I2C。

SMBus
電腦里面常有的一個容易混亂的相似總線是SMBus,它由Intel在1995發布,最早用於和智能電池的通訊,后也經過三次提高,於2000年左右成熟后一直變化不大。SMBus脫胎於I2C,他可以說是I2C的一個子集。它在大部分情況下,也由一個Master(可以多Master)和眾多Slave組成,用兩根線(SMBDAT和SMBCLK)進行通訊:

I2C和SMBus兩者在一般應用下,區別不大,甚至大多數情況下互用也沒有問題。更讓人迷惑的是,兩者可以同時出現在一些設計中,這讓一些同學相當疑惑,兩者到底有什么區別?在I2C上重新發明一遍輪子有何意義呢?

答案在於I2C偏重速度,而SMBus偏重可靠性和成本。I2C速度從10KHz起步(理論上可以更低至0),最高5MHz;而SMBus最低10KHz,最高100KHz。也就是說在10KHz到100KHz上,兩者才通用,這就排除了中速和高速設備。I2C不強制Slave對地址請求發送回應(ACK),而SMBus要求必須ACK。於此對應,SMBus對NACK的要求也嚴格於I2C。這是因為SMBus面向電腦中很多可拆卸設備,必須確定該設備是否存在,避免誤操作。SMBus還加入了WatchDog,在SMBCLK拉低后,不得超過35ms(這就是10KHz的最低頻率的由來),否則Slave應該Reset。而I2C並沒有該限制。這讓SMBus避免了復雜的錯誤恢復電路。SMBus還提供了單獨的SMBSUS來用於Slave向Master報警。

I2C有什么缺陷?
I2C兩根線的設計相當簡潔而高效,讓MCU、PCH或CPU通過兩個PIN就可以通訊,節約了成本和簡化了設計。但是,所有的通訊都是由Master發起,Slave只是被動相應,這造成很大的麻煩。如果是輸出設備還行,但對輸入設備,CPU不知道有沒有數據,不得不定時Pull I2C總線,看看輸入存在與否,這與現代計算機系統設計初衷相反。隨着I2C使用越來越廣,越來越多的設備加入了更多的帶外(sideband)線來補足I2C的缺點,其中最重要的兩個線就是中斷線INT和一些RESET線,一個經典設計如下:

在圖中,左邊慢速I2C設備雖然共用了一個I2C總線,但每個設備都有自己的INT和Host相連,用於通知Host有事發生,而不是讓Host不停來查詢,這樣才能讓Host沒事進入省電狀態,更加高效。右邊的高速設備更是另辟自己的高速I2C總線。如此這般,理想中的簡潔設計在現實中越來越被破壞的支離破碎,常常是INT線比I2C線多得多。再加上進一步提高速度的需求,業界呼喚一種新的解決方案。於是I3C應運而生。

I3C
MIPI Alliance發布了I3C標准。I3C(Improved Inter Integrated Circuit)另一個名字叫做SenseWire,顧名思義,它的初衷是滿足眾多物聯網設備中的Sensor的,它帶來眾多的改進,除了常說的12.5MHz速度的提高之外:

更重要的是嵌入進協議的軟中斷。如此,就不需要單獨的INT連線了:

眾多帶外連線不見,高速I2C也不需要了,真正實現了高速和簡潔。它還向下兼容I2C,以前的設備也還用得上,一個混合系統是這樣:

它還節省了電力消耗:

I3C還有其他許多亮度:為了簡化設計,提出了I3C Hub;參考內存DDR的概念,提出了DDR加倍數據傳輸;支持省電模式;In-bound CRC校驗;Slave和Slave直接通訊。

結論
曾經有個同學把I2C叫做"I(ai),2(er),C(ci)"而被人狠狠嘲笑了一番,譏笑者一臉傲嬌的說“應該叫做I方C!這個“2”是指“平方”!”,更有非要用英文說"I-squared-C"來顯示技術niubility和知識淵博的。而實際上,我聽美國同事中叫它"I-squared-C"和"I-two-C"差不多一半一半,如此說來中文說法"I(ai),2(er),C(ci)"也並不過分(不過感覺有點2)。到了I3C,不知道傲嬌的同學如何用中文叫它,難道叫做“I三次方C”?也許可以和英文“I-three-C”一樣,叫做“I,3,C”就可以了。

MIPI I3C https://www.mipi.org/specifications/i3c-sensor-specification
原文地址:https://zhuanlan.zhihu.com/p/201075632


免責聲明!

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



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