終於進入到通訊界面這系列介紹的最後一塊 — I2C(也寫成I2C)。I2C 雖然只有簡單的兩根線,但它大概是我們聊過的通訊界面中最複雜的一種,它在這兩根線上可做到 multi-master、multi-slave 的多裝置通訊,還有著極爲巧妙的同步、協調以及錯誤處理機制,因此我們會花比前面兩個界面更多的篇幅來介紹它。
也是歷史悠久
I2C 和 SPI 的歷史一樣悠久,可以回溯到 1980 年代初期。當美洲大陸的 Motorola 發展出 SPI 時,遠在歐洲的荷蘭商飛利浦半導體公司爲了解決電視機及顯示器內部許多週邊 IC 之間的通訊問題,而發展出 I2C bus 這個標準。
I2C 是「inter IC communiction」的意思,也就是 IC 與 IC 中間的通訊界面。IC 是「Integrated Circuit」,指的是 I/O 擴展器、ADC、DAC 等週邊晶片,雖然 IC 本身也是一個縮寫字,但並沒有人把 I2C 寫成「IICC」,英文念法則是「I-square-C」,也就是那個小小的 2 是 I 平方的意思,中國大陸則習慣稱之爲「I 方 C」。
飛利浦爲 I2C 申請了專利,也註冊了商標,因此實務上要使用 I2C 技術必需要取得飛利浦半導體的授權並支付權利金。早年一些半導體公司爲了使用 I2C 技術卻又不願意支付權利金,便實作一些與 I2C 相容但又不完全一樣的設計,也另外取了一個不一樣的名字,以免侵犯到飛利浦半導體的商標權,因此常常看到的「2-wire bus」之類的界面名稱,其實多半是沒有付錢的 I2C bus 界面。
不過專利總有到期的一天。I2C 的美國專利(編號 US4689740A)在 1987 年獲得核准,而在 1995 年之前獲得核准的美國專利效期爲 17 年,因此 I2C 的美國專利在 2004 年到期。事實上飛利浦半導體曾經在 2000 年和 2001 年對數家美國的大型半導體公司發動專利訴訟,爲的就是 I2C 的使用授權,而當年台灣也有好幾家主機板製造商被捲入這場訴訟。
2006 年飛利浦拆分旗下的半導體公司,並獨立出 NXP(恩智浦)半導體,I2C 的商標及相關權利便由 NXP 半導體繼承,另外也由於專利已過期,使用 I2C 相關的技術已不再需要取得 NXP 的授權,但如果要使用 I2C 的商標、名稱,或是分配正式的 I2C address,仍然要付錢給 NXP。
I2C 的實體界面
I2C 的實體界面只有兩根訊號,分別稱之爲 SCL(serial clock)與 SDA(serial data),而由於 I2C 是一個 bus,在這個 bus 上所有的裝置都得透過這兩個訊號相連,也就是說 I2C 只需要兩根訊號線,就可以讓很多(多達上百個)裝置彼此之間互相通訊。
(圖片來源:Bird 提供)
上圖是一個典型的 I2C bus 電路,bus 上的所有裝置都透過 SCL/SDA 這兩根線相連。I2C 允許 bus 上可以有多個 master、多個 slave 存在,只要彼此的 address 不衝突、裝置數量沒有超過 bus 的電氣特性上限就沒有問題。
在這個電路中,有兩個小小的電阻,分別將 SCL 和 SDA 拉到 VCC。這兩顆電阻稱之爲 I2C bus 的「拉起電阻」(pull-ups),看起來好像沒什麼複雜的地方,但它們卻是 I2C bus 能正常運作的關鍵。
巧妙的 Wired-AND
要了解 I2C bus 的工作原理,就要從裝置驅動 bus 的方式說起。
I2C bus 上所有的裝置都是透過 open-drain 或 open-collector 的方式來驅動 SCL 或 SDA。一般 push-pull 的數位邏輯輸出電路會有 high/low 兩顆電晶體,各自負責把輸出拉到 high 或 low 的工作,但 open-drain 或 open-collector 的輸出則只有 low-side 一顆電晶體。
只需不到短短一分鐘...
輸入您的信箱與ID註冊即可享有一切福利!
會員福利
免費電子報
會員搶先看
主題訂閱
好文收藏
2020/11/08
“但是當你輸出 high 時,bus 上卻不一定是 high” 這句怪怪的
如果是Open-Drain架構 BUS上High都是Pull High電阻給 應該不會是晶片(裝置)給吧??
所有N-MOS都開路(高阻抗)時 BUS才會為High
2020/11/12
對 open drain 裝置來說,output high 就是把 N-MOS 放開沒錯,對 IC 內部的邏輯來說仍然是 output high
2020/07/16
能否告知I2C的PD如果阻值太小,除了耗電流太大外,是否對功能或是訊號本身有何影響??一值找不到合理的解釋!!
2020/07/20
打錯!!是pull high電阻