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

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應(yīng)用 > I2C總線驅(qū)動在嵌入式系統(tǒng)中的兩種實現(xiàn)

          I2C總線驅(qū)動在嵌入式系統(tǒng)中的兩種實現(xiàn)

          作者: 時間:2013-04-09 來源:網(wǎng)絡(luò) 收藏

          1 引 言

          總線(Inter-IC Bus)是一種通用的串行總線,是用于IC器件之間連接的二線制總線。他通過串行數(shù)據(jù)線(Serial Data Lines,SDL)及串行時鐘線(Serial ClockLine,SCL)兩線在連接到總線上的器件之間傳送信息,并根據(jù)地址識別每個器件。一個或多個微控制器以及外圍器件可以通過總線接口非常方便的連接在一起構(gòu)成系統(tǒng)。這種總線結(jié)構(gòu)的連線和連接引腳少,器件間總線簡單。結(jié)構(gòu)緊湊,因此其構(gòu)成系統(tǒng)的成本較低;并且在總線上增加器件不會影響系統(tǒng)的正常工作,所有的I。C器件共用一套總線,因此其系統(tǒng)修改和可擴展性好。即使有不同時鐘速度的器件連接到總線上,時間同步機制也能夠很方便地確定總線時鐘,因此在中得到了廣泛的應(yīng)用。 2 總線原理

          2.1 I2C工作原理

          I2C總線是由數(shù)據(jù)線SDA和時鐘線SCL構(gòu)成的串行總線,可發(fā)送和接收數(shù)據(jù)。每個連接到總線的器件都可以通過惟一的地址與主機通訊,主機可以作為主機發(fā)送器或主機接收器。他是一個真正的多主機總線,如果兩個或更多主機同時初始化,數(shù)據(jù)傳輸可以通過沖突檢測和仲裁防止數(shù)據(jù)被破壞。串行的8位雙向數(shù)據(jù)傳輸位速率在標(biāo)準(zhǔn)模式下可達(dá)100 kb/s,快速模式下可達(dá)400 kb/s,高速模式下可達(dá)3.4 Mb/s。連接到相同總線的IC數(shù)量只受到總線的最大電容400 pF限制。

          I2C總線在傳送數(shù)據(jù)過程中共有3種特殊的電平變換情況,他們分別是:起始(start)、停止(stop)和響應(yīng)(aek)。

          當(dāng)SCL為高電平時,SDA由高電平向低電平跳變,這個表示起始條件;當(dāng)SCL是高電平時,SDA線由低電平向高電平跳變表示停止條件。起始和停止條件一般由主機產(chǎn)生,總線在起始條件后被認(rèn)為處于忙的狀態(tài),在停止條件的某段時間后總線被認(rèn)為再次處于空閑狀態(tài)。

          響應(yīng)信號是指從機在接收到8b數(shù)據(jù)后,向主機發(fā)出特定的低電平脈沖,表示已收到數(shù)據(jù)。在響應(yīng)的時鐘脈沖期間,從機必須將SDA線拉低使他在這個時鐘脈沖的高電平期間保持穩(wěn)定的低電平,主機收到應(yīng)答信號后,根據(jù)實際情況做出是否繼續(xù)傳遞信號的判斷。若未收到應(yīng)答信號,則判斷為從機出現(xiàn)故障。

          2.2操作時序

          I2C總線運用主/從雙向通訊。主機和從機都可以工作于接收和發(fā)送狀態(tài)??偩€必須由主機(通常為微控制器)控制,主機產(chǎn)生串行時鐘(SCL)控制總線的傳輸方向,并產(chǎn)生起始和停止條件。SDA線上的數(shù)據(jù)狀態(tài)僅在SCL為低電平的期間才能改變,SCL為高電平的期間,SDA狀態(tài)的改變被用來表示起始和停止條件。具體時序見圖1。

          3中的I2C驅(qū)動的兩種實現(xiàn)

          3.1 系統(tǒng)自帶I2C寄存器的實現(xiàn)

          下面以ARM S3C4510B為例,給出基于寄存器方式的I2C驅(qū)動實現(xiàn)。S3C4510B內(nèi)含一個I2C總線主控器,可方便地與各種帶有I2C接口的器件相連。I2C總線控制器有3個特殊功能寄存器:一個控制狀態(tài)寄存器(I2CON),一個預(yù)分頻寄存器(I2CPS)和一個移位緩沖寄存器(I2CBUF)。通過配置這些寄存器,可實現(xiàn)正確的I2C數(shù)據(jù)傳輸時序。下面分別給出讀、寫實現(xiàn)的實例。讀操作:

          通過對控制狀態(tài)寄存器(I2CC()N)寫入OxlO發(fā)送啟動碼初始化串行I2C總線,然后總線控制器發(fā)送7位的從設(shè)備地址并通過移位緩沖寄存器發(fā)送讀/寫控制位,接收器則在主控器的SCL脈沖期間通過將SDA線從高電平下拉到低電平作為應(yīng)答信號。

          寫數(shù)據(jù)的操作 先設(shè)置控制狀態(tài)寄存器的BF位(0x01),然后寫入數(shù)據(jù)到移位緩沖寄存器。移位緩沖寄存器無論是被讀還是寫,BF位均會自動清零。若要進行連續(xù)的讀/寫操作,必須設(shè)置控制狀態(tài)寄存器的ACK位(0x08)。

          讀數(shù)據(jù)的操作 在設(shè)置控制狀態(tài)寄存器的BF位以后,可以進行讀數(shù)據(jù)的操作,當(dāng)讀/寫完最后一個字節(jié)時,可對ACK位進行復(fù)位通知發(fā)送器/接收器讀數(shù)據(jù)操作結(jié)束。

          在讀/寫操作完成以后,可通過對I2CCON寫入0x20生成結(jié)束碼。


          上一頁 1 2 下一頁

          評論


          相關(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); })();