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