英語

I2C協議

本文件概述了基本的I2C事務以及執行這些事務的核心API。

符號說明

S

起始條件

P

停止條件

Rd/Wr (1 位)

讀/寫位。Rd 等於 1,Wr 等於 0。

A, NA (1 位)

確認(ACK)和非確認(NACK)位

Addr (7 位)

I2C 7 位地址。請注意,可以擴充套件此地址以獲得 10 位 I2C 地址。

Data (8 位)

一個普通的資料位元組。

[..]

由 I2C 裝置傳送的資料,而不是由主機介面卡傳送的資料。

簡單傳送事務

i2c_master_send() 實現

S Addr Wr [A] Data [A] Data [A] ... [A] Data [A] P

簡單接收事務

i2c_master_recv() 實現

S Addr Rd [A] [Data] A [Data] A ... A [Data] NA P

組合事務

i2c_transfer() 實現。

它們與上述事務類似,但是傳送起始條件 S 而不是停止條件 P,並且事務繼續。 例如,讀取一個位元組,然後寫入一個位元組

S Addr Rd [A] [Data] NA S Addr Wr [A] Data [A] P

修改後的事務

還可以透過為 I2C 訊息設定以下標誌來生成對 I2C 協議的以下修改。 除了 I2C_M_NOSTART 之外,通常只需要解決裝置問題

I2C_M_IGNORE_NAK

通常,如果客戶端有 [NA],則訊息會立即中斷。 設定此標誌會將任何 [NA] 視為 [A],併發送所有訊息。 這些訊息仍然可能無法實現 SCL lo-> hi 超時。

I2C_M_NO_RD_ACK

在讀取訊息中,跳過主機的 A/NA 位。

I2C_M_NOSTART

在組合事務中,在某些時候不會生成“S Addr Wr/Rd [A]”。 例如,在第二個部分訊息上設定 I2C_M_NOSTART 會生成類似以下內容

S Addr Rd [A] [Data] NA Data [A] P

如果為第一個部分訊息設定 I2C_M_NOSTART 變數,則我們不會生成 Addr,但是會生成起始條件 S。這可能會使總線上的所有其他客戶端感到困惑,因此請勿嘗試。

通常,這用於將系統記憶體中多個數據緩衝區的傳輸收集到看起來像是對 I2C 裝置的單個傳輸的內容中,但也可能被一些罕見裝置用於方向更改之間。

I2C_M_REV_DIR_ADDR

這將切換 Rd/Wr 標誌。 也就是說,如果您想進行寫入,但需要發出 Rd 而不是 Wr,反之亦然,則設定此標誌。 例如

S Addr Rd [A] Data [A] Data [A] ... [A] Data [A] P
I2C_M_STOP

強制在訊息後停止條件 (P)。 一些與 I2C 相關的協議(例如 SCCB)需要這樣做。 通常,您真的不希望在一個傳輸的訊息之間被打斷。