I2C 總線——賦值、設備、數據傳輸、尋址

在創建電子電路時,許多開發人員需要使用大量中間芯片來匹配、採樣和尋址其各個模塊。為了盡量減少輔助芯片的數量,飛利浦早在 80 年代就提出了一種雙線雙向 I2C 串行網絡接口,專門設計用於管理單個設備中的多個芯片。

I2C 總線 - 分配、設備、數據傳輸、尋址

今天,僅 Philips 一家就為電子設備生產了一百多種 I2C 兼容設備,用途廣泛:內存、視頻處理器系統、模數和數模轉換器、顯示驅動器等。

I2C總線

I2C 總線是串行數據交換協議的一種改進,能夠以 100 至 400 kbps 的速率以通常的“快速”模式傳輸串行 8 位數據。數據交換的過程在這裡只在兩條線上實現(不包括公共線):用於數據的 SDA 線和用於同步的 SCL 線。

由於連接到總線的設備輸出級聯具有開路集電極或通道,因此總線變為雙向,從而復制了 AND 接線。因此,總線將芯片之間的連接數量降至最低,從而在板上留下更少的所需引腳和走線。結果,電路板本身變得更簡單、更緊湊並且生產技術更先進。

該協議允許您禁用地址解碼器和其他外部協商邏輯。可同時在 I2C 總線上運行的芯片數量受限於其容量——最大 400 pF。

I2C協議

I2C 兼容 IC 具有硬件噪聲抑制算法,即使在存在強干擾的情況下也能確保數據完整性。這些設備有一個接口,允許微電路相互通信,即使它們的電源電壓不同。在下圖中,您可以熟悉通過公共總線連接多個微電路的原理。

連接到總線上的每個設備都有自己唯一的地址,地址由它決定,並且根據設備的用途,它可以作為接收器或發送器工作。在傳輸數據時,這些設備可以是主機(master)或從機(slave)。主機是啟動數據傳輸並在 SCL 線上生成時鐘信號的設備。與主設備相關的從設備是目標設備。

設備連接圖

在 I2C 總線上的任何給定操作時刻,只有一個設備可以充當主機;它在 SCL 線上生成一個信號。主站可以是主接收器或主發射器。

原則上,總線允許多個不同的主機,但對形成控制信號和監控總線狀態的特性施加了限制;這意味著多個主機可以同時開始傳輸,但是由於仲裁消除了這種衝突,即主機在檢測到總線被另一個主機佔用時的行為方式。

所有設備都連接到總線,形成“與”接線,從而確保一對設備的同步。最初,SDA 和 SCL 信號為高電平。

啟動和停止

交換從主機產生 «START» 狀態開始:在 SDA 線上,信號從高狀態變為低狀態,而 SCL 線具有穩定的高電平。連接到總線的所有設備都將這種情況視為開始交換的命令。


啟停-同步信號

當在總線上傳輸數據時,每個主機在 SCL 線上生成一個單獨的時鐘信號。

交換以主機形成 STOP 狀態結束:在 SDA 線上,信號從低變為高,而 SCL 線具有穩定的高電平。

驅動器始終充當 START 和 STOP 信號的來源。一旦 «START» 信號固定,就意味著線路忙。當檢測到 STOP 信號時,線路空閒。

數據傳輸

在聲明 START 狀態後,主機立即將 SCL 線切換為低電平並將第一個消息字節的最高有效位發送到 SDA 線。消息中的字節數不受限制。只有當 SCL 線上的信號電平為低電平時,SDA 線上的變化才會啟用。只有當同步脈衝為高時,數據才有效且不應更改。

在接收到第八個數據位後,通過在 SDA 線上設置一個特殊的確認位來確認從機接收器已接收到來自主發送器的字節。

確認書

因此,當接收設備在 SDA 線上變低時,從發送器向接收器發送 8 位數據會在 SCL 線上產生一個額外的脈衝,表明它已接收到整個字節。

確認同步脈衝

確認是數據傳輸過程的一個組成部分。主機產生一個同步脈衝。當應答時鐘有效時,發送器向 SDA 發送一個低電平狀態。當同步脈衝為高電平時,接收器必須保持 SDA 為低電平。

如果目標從機不確認其地址,例如因為它當前正忙,則數據線必須保持高電平。然後船長可以發出停止信號以中止調度。

如果接收是由主接收器執行的,那麼它有義務在傳輸完成後通知從發送器——而不是通過確認最後一個字節。從機發送器釋放數據線,以便主機可以發出 STOP 信號或重複 START 信號。

與 SCL 線的連接是根據“與”原則進行的,從而確保了設備的同步。

主機沒有唯一的權利來控制 SCL 線從低電平到高電平的轉換。如果從機需要更多時間來處理接收到的位,它可以獨立地保持 SCL 為低電平,直到它準備好接收下一位數據。在這種情況下,SCL 線將在最長的低電平同步脈衝持續時間內保持低電平。

具有最低持續低電平的設備將保持空閒狀態,直到長期結束。當所有設備都完成低同步週期後,SCL 將變為高電平。

所有設備都將開始時鐘變高,第一個完成其周期的設備將最先將 SCL 線設置為低電平。因此,SCL 的低電平狀態的持續時間將由其中一個器件的同步脈衝的最長低電平狀態確定,而高電平狀態的持續時間將由其中一個器件的最短同步週期確定設備。

接收器可以使用同步信號作為在位和字節級別控制數據傳輸的手段。

如果設備能夠以高速率接收字節,但需要一定的時間來存儲接收到的字節或準備接收下一個字節,它可能會在接收並確認一個字節後繼續保持 SCL 為低電平,迫使發射器進入待機狀態。

沒有內置硬件電路的微控制器,例如在位級,可以通過增加其低狀態的持續時間來減慢時鐘速度。因此,主設備的波特率將由主設備的速度決定較慢的設備。


I2C總線

尋址

連接到 I2C 總線的每個設備都有一個唯一的程序地址,主機通過發送特定命令對其進行尋址。相同類型的微電路的特點是地址選擇器,以選擇器的數字輸入形式或模擬形式實現。地址被劃分為連接到總線的設備的地址空間。

正常模式採用七位尋址。尋址工作如下:在 «START» 命令後,主設備發送第一個字節,確定需要哪個從設備與主設備通信。還有一個通用的調用地址,它定義了總線上的所有設備,所有設備(理論上)都以確認響應它,但實際上這種情況很少見。

所以第一個字節的前七位是從機地址。最低有效位,第八位,指示發送數據的方向。如果有 «0»,則信息將從主機寫入該從機。如果為 «1»,則主站將從該從站讀取信息。

主機發送完地址字節後,每個從機將自己的地址與其進行比較。具有相同地址的任何人都是從機,並被定義為從機發送器或從機接收器,具體取決於地址字節的最低有效位的值。

從屬地址可以包括固定部分和可編程部分。很多同類型的設備經常在一個系統中工作,那麼地址的可編程部分允許總線上最多使用同類型的設備。地址字節中有多少位是可編程的取決於芯片上空閒引腳的數量。

有時,具有可編程地址範圍的模擬設置的引腳就足夠了,例如 SAA1064 - 具有完全此類實現的 LED 指示器驅動器。特定引腳的電位決定了芯片地址空間的偏移量,從而使同類型芯片在同一總線上運行時不會發生衝突。所有支持 I2C 總線的芯片都包含一組製造商在文檔中指定的地址。

«11110XX» 組合保留用於 10 位尋址。如果我們想像從 «START» 命令到 «STOP» 命令的數據交換,它將如下所示:


尋址

這裡允許簡單和組合的數據交換格式。組合格式意味著在 «START» 和 «STOP» 之間,主機和從機可以充當接收器和發送器,這在串行內存管理中很有用。

讓數據的第一個字節傳輸一個內存地址。然後,重複«START»命令並讀取從地址,內存數據將起作用。自動增加或減少先前訪問的地址的決定是由設備開發人員在先前研究了芯片文檔之後做出的。無論哪種方式,在收到 START 命令後,所有設備都必須恢復其邏輯並為地址現在將被命名這一事實做好準備。

我們建議您閱讀:

為什麼電流是危險的?