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

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設計應用 > 基于嵌入式Linux 的I2C設備驅動程序的分析

          基于嵌入式Linux 的I2C設備驅動程序的分析

          作者: 時間:2013-11-14 來源:網絡 收藏

            0 引言

            由于總線的通用性,作為一款優(yōu)秀的嵌入式操作系統(tǒng),也必須要對其要有很好的支持。在內核源碼中對總線的驅動是基于總線模型的,其驅動程序用到了特殊的幾個數據結構,對總線協議進行了更抽象更通用的定義,極大的增加了的可移植性。要編寫出自己的I2C 程序,必須對這種內核I2C總線驅動的架構有深刻的理解。

            1 I2C總線的硬件構成

            I2C 總線協議只有兩條總線線路,一條是串行數據線(SDA),一條是串行時鐘線(SCL)。SDA 負責數據的傳輸,SCL 負責數據傳輸的時鐘同步。I2C 設備通過這兩條總線連接到處理器的I2C總線控制器上,不同設備之間通過7 位地址來區(qū)別,而且數據的傳輸是雙向的,方向的確定由1位二進制數確定,地址位加方向位是操作I2C 設備的惟一標示,I2C 設備與CPU 的連接如圖1所示。

            

            I2C 總線上有3 種類型的信號,分別是:開始信號,結束信號和應答信號。這些信號都是由SDA和SCL上的電平變化來表示的。

            開始信號(S):當SCL為高電平時,SDA由高電平向低電平跳變,表示開始傳輸數據。

            結束信號(P):當SCL為高電平時,SDAY由低電平向高電平跳變,表示結束傳輸數據。

            相應信號(ACK):從機接收到8位數據后,在第9個時鐘周期,拉低SDA電平,表示已經接收到數據。

            當總線空閑時,SDA 和SCL 都處于高電平,主機檢測到總線空閑就可以向從機發(fā)送數據。主機首先發(fā)送開始信號S,接著發(fā)出8位數據(包括前7位的從機地址和1 為的方向位),然后等待從機發(fā)回確認信號ACK.

            當第8位為0時,表示向從機傳輸數據,主機收到確認信號后就可以連續(xù)的向從機寫入8 位數據;當第8 位為1時,表示向從讀取數據,這時主機就可以接收來自從機的一系列數據。最后當總個數據傳輸過程完成后,由主機發(fā)送結束信號P,表示本次的數據傳輸完成。

            2 的I2C設備驅動程序的層次結構

            因為I2C設備的種類繁多,如果為每一款I2C設備都編寫一個驅動程序,顯然不太現實也不太可能做到。所以,Linux中是對I2C 設備驅動采取了層次化處理,分為總線層和設備層。將I2C設備驅動的一些共同屬性抽象起來歸結起來作為總線層,而將具體I2C設備特殊操作作為設備層。在Linux中I2C設備驅動中用到的數據結構[4,7-8]的關系如圖2 所示。關于這部分代碼位于Linux內核源碼樹的/driver/i2c中。

            

            理解這層次結構重點是要理解4個數據結構,分別是屬于設備層的i2c_driver 與i2c_client,屬于總線層的i2c_adapter與i2c_algorithm.下面分別對這四個數據結構做簡要的說明。

            struct i2c_driver:具體的每一個I2C設備都應該對應著的一個驅動,這個結構體里面定義了Linux設備模型中用于I2C 總線管理的一系列函數指針和I2C 設備的信息。其中最重要的兩個成員是適配器檢測函數指針at-tach_adapter,和設備ID表id_table.

            struct i2c_client:一個連接在SDA 和SCL 總線上的具體設備是由i2c_client結構體描述的,定義了兩個成員變量表示這個具體設備所對應的適配器和驅動。

            struct i2c_adapter:此結構體表示CPU 里面具體的I2C控制器,本質上也是對應著一個物理設備,其中最要的成員變量是指向適配器驅動的程序的algo 結構體指針。

            struct i2c_algorithm:里面定義了具體適配器驅動程序的函數指針。特別是master_xfer函數指針,這個函數實現了適配器最底層的操作方法,也是I2C設備驅動中總線層里面要編寫的重要函數。

          linux操作系統(tǒng)文章專題:linux操作系統(tǒng)詳解(linux不再難懂)

          linux相關文章:linux教程



          上一頁 1 2 下一頁

          關鍵詞: Linux I2C 設備驅動

          評論


          相關推薦

          技術專區(qū)

          關閉
          看屁屁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); })();