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

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應(yīng)用 > Coo1Runner-Ⅱ器件I2C接口協(xié)議

          Coo1Runner-Ⅱ器件I2C接口協(xié)議

          作者: 時間:2011-12-22 來源:網(wǎng)絡(luò) 收藏
            這里將說明I2C的主要通信協(xié)議,更詳細的說明和時序圖請參考I2C規(guī)范文檔。
            I2C總線包括兩個信號線,即SDA和SCL。所有通信都發(fā)生在這兩個信號線上,連接到同一條總線上的設(shè)備數(shù)目受限于最大的總線電容。SDA和SCL都是雙向的,通過上拉電阻連接到系統(tǒng)電源??偩€空閑時,這兩個總線保持高電平。在總線上的I2C設(shè)備的輸出數(shù)據(jù)階段,必須是漏極開路或是集電極開路以實現(xiàn)線與功能。

            每個設(shè)備都有唯一的地址,可以工作在發(fā)送模式或接收狀態(tài),也可以被配置為主設(shè)備或從設(shè)務(wù)。方設(shè)備啟動一次總線數(shù)據(jù)傳輸,并產(chǎn)生時鐘信號,總線上任何其他設(shè)備都會被視為從設(shè)備。I2C協(xié)議同時還具有仲裁機制,如果多臺主設(shè)備同時申請控制總線,只有一臺設(shè)備成功獲取總線而不會丟失數(shù)據(jù)。

            一次數(shù)據(jù)傳輸開始于一個START命令,結(jié)束于一個STOP命令。SDA在時鐘SOL低電平時變化,高電平時保持穩(wěn)定。START被定義為當SOL為高電平時,SDA由高到低的跳變;STOP被定義為當SOL為高時,SDA由低到高的跳變,如圖所示。

          I2C總線的—次數(shù)據(jù)傳輸



            如圖 I2C總線的—次數(shù)據(jù)傳輸

            每個數(shù)據(jù)包包含8位數(shù)據(jù),后跟一個ACK位。因此一次數(shù)據(jù)傳輸共需要9個SOL,首先傳輸MSB。發(fā)送設(shè)備在ACK周期釋放SDA,接收設(shè)備必須在過程中驅(qū)動SDA為低。如果從設(shè)備沒有將SDA驅(qū)動為低,則表明其不能夠接收數(shù)據(jù),主設(shè)備將產(chǎn)生一個STOP狀態(tài)以退出本次傳輸;如果主設(shè)備沒有將SDA驅(qū)動為低,則表明從設(shè)備發(fā)送的是最后一個字節(jié)。標準I2C通信包含4部分,即起始位、從地址、數(shù)據(jù)傳輸和停止位。I2C協(xié)議規(guī)定了兩種地址格式,即7位和10位,本設(shè)計為7位。起始位之后是7位地址,第8位是讀寫位,“0”為寫;“1”為讀。僅僅與地址相匹配的從設(shè)備在第9個SOL發(fā)一個ACK到SDA,將SDA拉低。

            一旦地址匹配成功,主從之間數(shù)據(jù)傳輸就會建立,讀/寫位決定數(shù)據(jù)傳輸方向。主設(shè)備發(fā)一個STOP命令終止一次傳輸。然而,主設(shè)備在沒有發(fā)出STOP之前也可能產(chǎn)生一個START信號,此情況被定義為重復(fù)開始(Repeat START)。


          評論


          相關(guān)推薦

          技術(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); })();