嵌入式系統中的I2C總線時序
I2C 總線在嵌入式系統中非常常見,本文詳細講解 I2C 總線的時序規則。
許多電子工程師第一次接觸 I2C 總線,都是通過 EEPROM 或 ROM 通信。實際上,I2C 的應用遠不止存儲芯片,其使用場景與 RS?485、SPI 等總線類似。

EEPROM內存系統架構圖
1. 位傳輸
I2C 是由飛利浦公司開發的雙向兩線同步串行總線,只需要 SCL(時鐘線) 和 SDA(數據線) 兩根線,就能實現總線上多個芯片之間的控制與數據傳輸。

I2C 總線位傳輸
I2C 總線上的數據是逐位傳輸的:
SCL 為高電平時:SDA 上的數據必須保持穩定,不允許變化。
SCL 為低電平時:SDA 可以改變電平狀態。
關鍵時序條件
起始條件:SCL 為高電平時,SDA 從高電平變為低電平 → 表示傳輸開始。
停止條件:SCL 為高電平時,SDA 從低電平變為高電平 → 表示傳輸結束。
空閑狀態:SDA 與 SCL 均保持高電平 → 表示總線空閑。
2. 數據傳輸
字節傳輸
主機發送數據時,先發出起始信號,然后將 SDA 設為輸出模式,先發送最高位(MSB),依次發送 8 位數據。
發送完 8 位后,主機會將 SDA 切換為輸入模式,等待從機回復 ACK(應答) 或 NAK(非應答),之后再發送下一個字節。
從機地址
I2C 總線上的每個設備都有固定地址,通常由芯片上的 A0、A1、A2 引腳配置。
地址字節包含:
7 位地址位(D7~D1)
1 位讀寫方向位(D0)
設備地址的高 4 位(D7~D4)通常由廠商固定為 1111,低 3 位(D3~D1)由 A2、A1、A0 引腳設置。
D0 = 0:寫操作
D0 = 1:讀操作
這就是常見地址如 0xA0、0xA1 的由來。

EEPROM設備地址
3. 讀 / 寫流程
① 寫操作流程
主機發送停止信號,避免總線忙碌導致寫入失敗。
主機發送總線復位信號,確保總線空閑。
主機發送起始信號,啟動寫操作。
主機發送從機地址 + 寫位(W/R=0),等待從機 ACK。
收到 ACK 后,主機連續寫入多個字節,每寫完 1 字節等待從機 ACK。
收到最后一次 ACK 后,主機發送停止信號,釋放總線。
② 讀操作流程
主機發送停止信號,避免總線忙碌導致讀取失敗。
主機發送總線復位信號,確保總線空閑。
主機發送起始信號,啟動讀操作。
主機發送從機地址 + 讀位(W/R=1),等待從機 ACK。
收到 ACK 后,主機連續讀取多個字節,每讀完 1 字節向從機回復 ACK。
讀完最后 1 字節并回復 ACK 后,主機發送停止信號,釋放總線。
I2C 在嵌入式領域應用廣泛,在各類電源、工控、消費電子設備中都十分常見。













評論