I 2 C 也經(jīng)常拼寫(xiě)為 I2C,并且(很少)擴(kuò)展為完整的“內(nèi)部集成電路”綽號(hào),是飛利浦半導(dǎo)體(現(xiàn)為 NXP)于 1982 年發(fā)明的設(shè)備到設(shè)備通信協(xié)議。
從那時(shí)起,I2C 一直用于計(jì)算設(shè)備及其外圍設(shè)備之間的通信,并且自 2006 年 10 月 6 日起,它可以免費(fèi)實(shí)施,無(wú)需支付任何許可費(fèi)用。
該系統(tǒng)使用起來(lái)非常簡(jiǎn)單,只需要兩個(gè)或多個(gè)設(shè)備之間的 SDA(串行數(shù)據(jù))和 SCL(串行)時(shí)鐘線,以及一個(gè)上拉電阻器以保持線路正常高電平。在最基本的用法中,您可能有一個(gè) I2C 設(shè)備,例如 Arduino 板,充當(dāng)主設(shè)備(控制器),而單個(gè)從設(shè)備(外圍設(shè)備)設(shè)置為在發(fā)出請(qǐng)求時(shí)發(fā)出信號(hào)甚至發(fā)回?cái)?shù)據(jù)。
我已經(jīng)在許多設(shè)置中使用此接口進(jìn)行基本的一對(duì)一通信——例如我的JC Pro Macro 計(jì)算機(jī)輸入設(shè)備上的顯示——但實(shí)際上大量設(shè)備可以使用單個(gè)總線來(lái)傳遞消息。 該協(xié)議包括一個(gè)尋址字節(jié),隨后傳輸附加數(shù)據(jù)。128 個(gè)設(shè)備通常可以通過(guò) 7 個(gè)尋址位來(lái)訪問(wèn),因?yàn)榈?8 位用于指示是否要啟動(dòng)讀取或?qū)懭氩僮鳌?/p>
這是對(duì)協(xié)議工作原理的非常詳細(xì)的介紹,如果您想深入了解,TI 在此處更深入地解釋了詳細(xì)信息。通過(guò) i2c-bus.org還可以獲得大量信息。從概念的角度來(lái)看,這是一項(xiàng)有趣的技術(shù),但如果您只是想讓事情正常運(yùn)行,好消息是使用它的許多細(xì)節(jié)都可以通過(guò)預(yù)先編寫(xiě)的庫(kù)來(lái)處理。
為什么選擇 I2C?
如前所述,I2C 的最大優(yōu)勢(shì)在于其接線簡(jiǎn)單,同時(shí)仍允許在多個(gè)設(shè)備之間進(jìn)行通信。另一種選擇是 SPI,它速度更快,能夠進(jìn)行一對(duì)多傳輸,但需要四根線。RS-232 就其本身而言,甚至比 I2C 更簡(jiǎn)單,因?yàn)樗恍枰侠?a target="_blank">電阻,但只能進(jìn)行一對(duì)一通信。值得注意的是,許多 I2C 設(shè)備已經(jīng)包含上拉電阻,因此在這種情況下,您甚至不必添加額外的組件。
人們可能還聽(tīng)說(shuō)過(guò)TWI(雙線接口)和SMBus(系統(tǒng)管理總線)這兩個(gè)術(shù)語(yǔ),它們都是 I2C 的子集。I2C 橫幅中還有多種樣式,具有不同的功能,包括 8 位和 10 位尋址方案以及從 100kbit/s 到 3.2Mbit/s 的時(shí)鐘速度。好消息是,經(jīng)過(guò) 39 年的開(kāi)發(fā)和標(biāo)準(zhǔn)化,如果你有一個(gè)類似 I2C 的設(shè)備,并且你把它扔到總線上,它很有可能會(huì)工作。在基于 Arduino 的系統(tǒng)的上下文中,傳輸是通過(guò)預(yù)定義引腳上的Wire 庫(kù)處理的,這使得這更加簡(jiǎn)單。
Arduino I2C 示例
如上圖所示,JC Pro Macro 2可以在其 I2C 引腳上安裝 OLED 顯示器以獲取用戶反饋,這些引腳從其“Arduino” Pro 微控制器上的引腳 2 (SDA) 和 3 (SCL) 斷開(kāi)。此處的設(shè)置主要是從 Adafruit ssd1306 庫(kù)示例中復(fù)制/粘貼的。我設(shè)計(jì)了這個(gè)設(shè)備,我必須做的一個(gè)更改是將第 36 行從 0x3D 更改為 0x3C,因?yàn)槲沂褂玫?eBay 購(gòu)買(mǎi)的屏幕地址與Adafruit 銷(xiāo)售的不同。
在研究本文時(shí),我將 Adafruit 示例代碼(地址更改)直接加載到控制我的鍵盤(pán)的 Pro Micro 上。沒(méi)有任何進(jìn)一步的修改,它開(kāi)始在屏幕上顯示 Adafruit 示例。請(qǐng)注意,上面顯示的代碼中的第 35 行不是問(wèn)題,即使我沒(méi)有連接復(fù)位引腳。不管是不是這個(gè)結(jié)果,在開(kāi)發(fā)板重置后似乎確實(shí)需要一段時(shí)間才能重新開(kāi)始工作,但這通常不是什么大問(wèn)題。如前所述,如果您的地址正確,一切似乎都可以正常工作。
I2C 掃描儀:輕松獲取正確的 I2C 地址
如果您沒(méi)有正確的地址,一切都不會(huì)丟失,并且您不必在在線論壇上閑逛和/或猜測(cè)。使用這款 Arduino I2C 掃描儀實(shí)際上很容易找到。要安裝,只需在 Arduino IDE 庫(kù)管理器中搜索i2c 掃描儀。將執(zhí)行示例代碼加載到您的開(kāi)發(fā)板上并打開(kāi)您的串行監(jiān)視器。如果您有任何 I2C 設(shè)備連接到您的 Arduino,它們的地址將通過(guò)串行監(jiān)視器顯示。這是一個(gè)肯定可以節(jié)省大量挫敗感的工具!
可以用了!
雖然這個(gè)簡(jiǎn)短的概述應(yīng)該讓您開(kāi)始您的 I2C 之旅,但仍有大量的設(shè)備和技術(shù)可供探索。I2C 是一種在設(shè)備與設(shè)備之間以合理速度進(jìn)行通信的好方法,適用于許多應(yīng)用程序,同時(shí)使用最少的 GPIO 引腳。
審核編輯:郭婷
-
顯示器
+關(guān)注
關(guān)注
21文章
4984瀏覽量
140104 -
開(kāi)發(fā)板
+關(guān)注
關(guān)注
25文章
5078瀏覽量
97671 -
Arduino
+關(guān)注
關(guān)注
188文章
6471瀏覽量
187303
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論