I2C 背景
在傳統的方式下,當連接多個裝置到一個微控制器 (microcontroller) 時,每個裝置的位址和資料線通常需要分別連接,這將佔用微控制器寶貴的引腳,導致PCB上有大量的線路,並需要更多的元件來連接一切;這使得這些系統的生產成本高昂,並容易受到干擾和雜訊的影響。
為了解決這個問題,飛利浦(Philips)在1980年代開發了Inter-IC bus(亦稱為I2C,全名為inter integrated circuit),I2C是一種用於主機板上通訊的低頻寬、短距離協定,所有裝置透過兩條線路連接:串行資料(SDA)和串行時脈(SCL)。
I²C通訊協定僅使用兩條雙向開集 (open collector) 或開漏線路 (open drain line),分別是串行資料線(SDA)和串行時脈線(SCL),並使用電阻拉高;傳統上,常用的電壓為+5 V或+3.3 V;然而,最近+2.5 V、+1.8 V和+1.2 V變得更加普遍。
I2C 實作範例
無論連接了多少個從屬單元到I2C匯流排,只有兩個訊號與所有裝置連接;因此,因為主機裝置需要使用位址機制來與特定的從屬裝置進行通訊,所以會產生額外的開銷。
由於所有通訊只在兩條線上進行,因此所有裝置必須具有唯一的位址,以在匯流排上進行識別,從屬裝置具有預先定義的位址,但從屬裝置的位址較低位元可以被分配(通常是最後幾個位元),以允許在匯流排上有多個相同類型的裝置存在。
物聯網("IOT")的出現,加上I2C串行通訊的引腳數量相對較少,導致I2C的使用再度盛行起來,常見的應用包括串行資料管理,包括與感應器之間的串行資料傳輸、程式設計EEPROM以及擷取輪詢/接收感應器資料。
I2C 的運作理論
I2C採用主從協定。主機發起通訊,事件的順序如下:
主機發出起始狀態,這個狀態通知所有裝置,在串行資料線上等待指令。
主機發送目標裝置的位址和讀寫旗標。
具有匹配位址的裝置回應一個確認訊號。
主機和裝置之間的通訊在資料匯流排上進行,無論這個通訊是讀還是寫,主機和裝置都可以接收或傳輸資料,發送器將8位元的資料發送給接收器,接收器則回應1位元的確認訊號。
當通訊完成時,主機發出停止狀態,表示一切都完成了。
I2C通訊協定
由於只有兩條線路,這個協定需要額外的位址機制和確認機制,增加了額外的開銷。
I2C 的特色
I2C具有許多值得一提的重要特點,I2C通訊支援多種資料傳輸速度:標準模式(100 kbps)、快速模式(400 kbps)、快速模式加強版、高速模式(3.4 Mbps)和超高速模式(5.0 Mbps)。
其他特點包括:
內建碰撞偵測
10 位元位址
支援多主機
資料廣播 (一般呼叫,用於特定的控制或配置指令,以同時影響所有從機裝置)
欲了解更多其他功能的詳細資訊,請參閱本文結尾的參考資料。
I2C的優點與缺點
優點:由於只需要兩條線路,I2C非常適合在匯流排上連接許多裝置的電路板,隨著系統增加額外的裝置,這有助於降低電路的成本和複雜性。
缺點:由於只有兩條線路,處理位址和確認的額外開銷會增加複雜度,如果只需要簡單的點對點通訊、或單一裝置的操作,直接連接介面(direct-link interface, 如SPI)可能更加直接和高效,因為它不需要額外的位址和確認機制。
I2C在多裝置連接和複雜配置的場景下表現出色,但在單一裝置、或簡單通訊需求的情況下,可能會因為額外的開銷而顯得不那麼高效;因此,在選擇通訊協定時,需要根據具體的應用需求和系統配置進行評估和選擇最適合的解決方案。
Total Phase 模擬和除錯工具
透過 Total Phase 的產品,工程師可以對嵌入式系統進行即時監測、分析、和除錯,從而獲得對系統內部運作的深入了解;智慧化工具提供可見性,讓工程師能夠有效解決複雜的問題、優化系統性能,並提高產品的品質和可靠性。
Total Phase 的解決方案提供了強大的功能,例如:高速資料捕捉、協議分析、軟體除錯、和硬體測試等,這些工具和功能使工程師能夠深入了解系統的內部運作、追蹤故障和優化性能。
幾乎所有 Total Phase 產品採用 USB 匯流排供電,無需附加電源供應器,每一款產品完全支援 Windows,Linux,以及 Mac OS X 操作系統,並提供完整的分析軟體和應用程式介面(API);對於在研發運用 I2C,SPI,MDIO,或者 USB 產品的嵌入式系統工程師來說,Total Phase 的高性價比,及超小型工具是最佳的選擇。
Total Phase I2C/SPI主機轉接器和協定分析儀的詳細比較 >
參考資料
I2C (Inter-Integrated Circuit) Bus Technical Overview and Frequently Asked Questions - Embedded Systems Academy
Introduction to I2C - Embedded.com
I2C - Open Directory Project Listing
Comentarios