<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應用 > I2C總線的仲裁機制

          I2C總線的仲裁機制

          作者: 時間:2016-12-15 來源:網(wǎng)絡(luò) 收藏
          在多主的通信系統(tǒng)中。總線上有多個節(jié)點,它們都有自己的尋址地址,可以作為從節(jié)點被別的節(jié)點訪問,同時它們都可以作為主節(jié)點向其他的節(jié)點發(fā)送控制字節(jié)和傳送數(shù)據(jù)。但是如果有兩個或兩個以上的節(jié)點都向總線上發(fā)送啟動信號并開始傳送數(shù)據(jù),這樣就形成了沖突。要解決這種沖突,就要進行仲裁的判決,這就是I 2C總線上的仲裁。
          I2C總線上的仲裁分兩部分:SCL線的同步和SDA線的仲裁。
          1SCL線的同步(時鐘同步)
          SCL同步是由于總線具有線“與”的邏輯功能,即只要有一個節(jié)點發(fā)送低電平時,總線上就表現(xiàn)為低電平。當所有的節(jié)點都發(fā)送高電平時,總線才能表現(xiàn)為高電平。正是由于線“與”邏輯功能的原理,當多個節(jié)點同時發(fā)送時鐘信號時,在總線上表現(xiàn)的是統(tǒng)一的時鐘信號。這就是SCL的同步原理

          時鐘的同步
          2 SDA仲裁
          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ù)總線
          3仲裁過程


          兩個主節(jié)點的仲裁過程
          上圖是以兩個節(jié)點為例的仲裁過程。DATA1和DATA2分別是主節(jié)點向總線所發(fā)送的數(shù)據(jù)信號,SDA為總線上所呈現(xiàn)的數(shù)據(jù)信號,SCL是總線上所呈現(xiàn)的時鐘信號。當主節(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ù)沒有丟失。
          總結(jié):SDA仲裁和SCL時鐘同步處理過程沒有先后關(guān)系,而是同時進行的。


          關(guān)鍵詞: I2C總線仲裁機

          評論


          技術(shù)專區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();