① 一文搞懂I2C通信
I2C通信,全稱為集成電路匯流排(Inter-Integrated Circuit),是一種廣泛應用於主板、嵌入式系統和手機與周邊設備組件之間的串列通信匯流排。其設計源於飛利浦公司在1980年代初,旨在簡化微控制器與感測器、顯示器、IoT設備、EEPROM等之間的數據交換。I2C協議的簡單性使其成為了眾多電子設備之間通信的首選方案。
I2C通信的主要特點包括標准模式(100Kbps)、快速模式(400Kbps)、高速模式(3.4Mbps)和超快速模式(5Mbps)。硬體層面,I2C僅需SDA(串列數據線)和SCL(串列時鍾線)兩個引腳,並要求這些引腳配備上拉電阻,以確保匯流排的穩定性和數據的有效傳輸。
上拉電阻的計算公式基於邏輯低電壓(VLO)、邏輯低電流(IOL)、信號的最大上升時間(TR)和匯流排電容(CB)。以5V電源為例,每條上拉電阻阻值至少應為1.53kΩ;而對於3.3V電源,每個電阻阻值至少為967Ω。為簡化計算,常見選擇值為4.7kΩ。在調試過程中,當測量SDA或SCL信號的邏輯LOW電壓高於0.4V時,可判斷灌電流可能過高,盡管這不意味著設備立即停止工作,但操作超出規格的設備時需謹慎,以避免通信故障、縮短設備使用壽命甚至永久損壞。
I2C通信的數據傳輸協議包括開始條件、地址位、讀寫位、應答位、數據位和停止條件。開始條件由主設備在通信開始時發送,用於喚醒所有從機。地址位用於識別特定從機,主設備發送地址後,從機通過比較地址位來確定是否參與通信。讀寫位指示數據傳輸方向,應答位由接收設備在數據傳輸後返回,以確認數據接收成功。數據傳輸後,接收設備返回一個ACK位,表示成功接收數據。最後,停止條件由主設備發出,用於結束數據傳輸。
I2C通信的實現涉及硬體連接和軟體驅動。硬體連接包括SDA和SCL線的正確配置,以及上拉電阻的正確選擇。軟體驅動則需遵循特定的通信協議,包括數據傳輸格式和設備識別規則。在實際應用中,I2C匯流排允許主設備連接多個從機,每個從機使用7位或10位地址進行識別。多個主設備可以連接到同一匯流排上,但需通過檢測SDA線電平來避免沖突。
在I2C的實際應用中,DS18B20溫度感測器是一個典型的例子,它使用I2C匯流排與微控制器通信,實現溫度數據的讀取和處理。華大半導體HC32L136和ESP32等微控制器都支持I2C介面,可以輕松地驅動DS18B20等感測器。