加入星計劃,您可以享受以下權(quán)益:

  • 創(chuàng)作內(nèi)容快速變現(xiàn)
  • 行業(yè)影響力擴散
  • 作品版權(quán)保護
  • 300W+ 專業(yè)用戶
  • 1.5W+ 優(yōu)質(zhì)創(chuàng)作者
  • 5000+ 長期合作伙伴
立即加入
  • 正文
  • 相關(guān)推薦
  • 電子產(chǎn)業(yè)圖譜
申請入駐 產(chǎn)業(yè)圖譜

技術(shù) | I2C 子系統(tǒng)(四)

2022/06/07
1371
閱讀需 6 分鐘
加入交流群
掃碼加入
獲取工程師必備禮包
參與熱點資訊討論

4、I2C Synchronization And Arbitration

本文講解三個重要的 I2C 概念:時鐘延展、同步、仲裁

Data and ACK/NACK

正常情況

接收機必須向從機發(fā)送傳輸結(jié)束的信號。

異常情況

  1. 發(fā)送到總線上的地址,卻沒有匹配的從機從機處于 busy 狀態(tài)。在傳輸過程中,從機獲取其不理解的數(shù)據(jù)或命令。在傳輸過程中,從機無法再接收任何數(shù)據(jù)字節(jié)。

主機可以生成停止條件以中止傳輸,或生成重復(fù)啟動條件以啟動新傳輸。

Clock stretching 時鐘延展

  1. 時鐘延展:通過將 SCL 線保持在低電平來暫停傳輸。在 SCL 再次拉高之前,傳輸無法進行。從機通過將 SCL 線拉低,強制主機進入等待狀態(tài)。時鐘延展功能是可選的,不是必選的時鐘延展導(dǎo)致需要更多時間來存儲接收到的字節(jié)或準(zhǔn)備另一個要傳輸?shù)淖止?jié)通過延長每個時鐘低電平周期來降低總線時鐘。任何主機的速度都與該設(shè)備的內(nèi)部運行速度相適應(yīng)。在 Hs 模式下,此握手功能只能在字節(jié)級別使用

I2C 主設(shè)備始終控制著時鐘線 SCL,不論是往設(shè)備寫還是從設(shè)備讀。一般情況下,如果操作對象是 EEPROM 或者其他簡單設(shè)備而言,無所謂,但是,如果從設(shè)備是處理器,在接到主機命令后要去處理一些運算然后得出結(jié)果返回給主機。這個時候可能造成來不及處理。怎么辦?這時,從設(shè)備會主動控制時鐘線把它拉低!直到數(shù)據(jù)準(zhǔn)備好之后再釋放時鐘線,把控制權(quán)交還給 MASTER。這也是 I2C 通信系統(tǒng)中,從機唯一能控制總線的時候!

關(guān)鍵是很多 I2C 主機不支持 clock stretching 功能,所以,無法和帶有 clock stretching 功能的從機通信!所以,各位在選擇主機器件之前,必須要注意這一點,不然整個設(shè)計方案可能報廢,影響很大。

Synchronization And Arbitration

在多主的通信系統(tǒng)中??偩€上有多個節(jié)點,它們都有自己的尋址地址,可以作為從節(jié)點被別的節(jié)點訪問,同時它們都可以作為主節(jié)點向其他的節(jié)點發(fā)送控制字節(jié)和傳送數(shù)據(jù)。

但是如果有兩個或兩個以上的節(jié)點都向總線上發(fā)送啟動信號并開始傳送數(shù)據(jù),這樣就形成了沖突。要解決這種沖突,就要進行仲裁的判決,這就是 I2C 總線上的仲裁。

I2C 總線上的仲裁分兩部分:SCL 線的同步和 SDA 線的仲裁,這兩部分沒有先后關(guān)系,同時進行。

SCL Synchronization

SCL 同步是由于總線具有線“與”的邏輯功能,即只要有一個節(jié)點發(fā)送低電平時,總線上就表現(xiàn)為低電平。當(dāng)所有的節(jié)點都發(fā)送高電平時,總線才能表現(xiàn)為高電平。正是由于線“與”邏輯功能的原理,當(dāng)多個節(jié)點同時發(fā)送時鐘信號時,在總線上表現(xiàn)的是統(tǒng)一的時鐘信號。這就是 SCL 的同步原理。

同步過程如下圖:

SDA Arbitration

SDA線的仲裁也是建立在總線具有線“與”邏輯功能的原理上的。節(jié)點在發(fā)送1位數(shù)據(jù)后,比較總線上所呈現(xiàn)的數(shù)據(jù)與自己發(fā)送的是否一致。是,繼續(xù)發(fā)送;否則,退出競爭。

SDA 線的仲裁可以保證 I2C 總線系統(tǒng)在多個主節(jié)點同時企圖控制總線時通信正常進行并且數(shù)據(jù)不丟失??偩€系統(tǒng)通過仲裁只允許一個主節(jié)點可以繼續(xù)占據(jù)總線。

  1. 仲裁在 SDA 上進行,此時 SCL 為高電平。A 主機傳輸高電平,B 主機傳輸?shù)碗娖?,A 失去仲裁。丟失仲裁的主機將生成時鐘脈沖,直到丟失仲裁的字節(jié)結(jié)束。
仲裁過程:

DATA1 和 DATA2 分別是主節(jié)點向總線所發(fā)送的數(shù)據(jù)信號,SDA 為總線上所呈現(xiàn)的數(shù)據(jù)信號,SCL 是總線上所呈現(xiàn)的時鐘信號。

當(dāng)主節(jié)點 1、2 同時發(fā)送起始信號時,兩個主節(jié)點都發(fā)送了高電平信號。這時總線上呈現(xiàn)的信號為高電平,兩個主節(jié)點都檢測到總線上的信號與自己發(fā)送的信號相同,繼續(xù)發(fā)送數(shù)據(jù)。

第2個時鐘周期,2個主節(jié)點都發(fā)送低電平信號,在總線上呈現(xiàn)的信號為低電平,仍繼續(xù)發(fā)送數(shù)據(jù)。

在第3個時鐘周期,主節(jié)點1發(fā)送高電平信號,而主節(jié)點2發(fā)送低電平信號。根據(jù)總線的線“與”的邏輯功能,總線上的信號為低電平,這時主節(jié)點1檢測到總線上的數(shù)據(jù)和自己所發(fā)送的數(shù)據(jù)不一樣,就斷開數(shù)據(jù)的輸出級,轉(zhuǎn)為從機接收狀態(tài)。這樣主節(jié)點2就贏得了總線,而且數(shù)據(jù)沒有丟失,即總線的數(shù)據(jù)與主節(jié)點2所發(fā)送的數(shù)據(jù)一樣,而主節(jié)點1在轉(zhuǎn)為從節(jié)點后繼續(xù)接收數(shù)據(jù),同樣也沒有丟掉 SDA 線上的數(shù)據(jù)。因此在仲裁過程中數(shù)據(jù)沒有丟失。

再次提醒:SDA仲裁和SCL時鐘同步處理過程沒有先后關(guān)系,而是同時進行的。

相關(guān)推薦

電子產(chǎn)業(yè)圖譜

研究生在讀,熟悉硬件、STM32單片機、嵌入式Linux。已收獲小米、聯(lián)發(fā)科、浙江大華、上能電氣、英威騰、匯川技術(shù)、格力、富士康等大廠offer。在這里分享求職經(jīng)驗、嵌入式學(xué)習(xí)規(guī)劃、考研、嵌入式Linux技術(shù)文章等。