I2C適配器——1

來源:互聯網
上載者:User

到底什麼是I2C適配器?
看了篇講LINUX I2C體系的書,說是主要的硬體有2個:一個client,一個adapter,I2C體繫結構圍繞她倆展開。
可是,到底什麼是adapter?是I2C控制器嗎?如果是的話,I2C控制器不就幾個寄存器麼,還搞這麼複雜作甚?
比如,單片機裡的I2C控制器,好歹搞她兩下她就幹活了

不甚理解這兒的I2C adapter。

wmmy2008 發表於 2010-07-31 17:35
i2c adapter 是一個struct, 用來抽象一個物理i2c bus ,而且還和linux 裝置驅動架構柔和在一起..

SK|fisker 發表於 2010-07-31 18:34
[i=s] 本帖最後由 SK|fisker 於 2010-07-31 18:36 編輯 [/i]

我是指的硬體i2c adapter~
對硬體不大熟
(啊,其實對軟體也不大熟)

剛稍微看了一下s3c2410的adapter相關的代碼,發現核心其實就是讀寫那幾個i2c控制寄存器。從頭到尾沒有見到有操作其他的硬體。
難道說是這樣——s3c2410內部整合了i2c adapter, 但是對它的操作介面是那幾個i2c的寄存器,我們根本不用關心所謂的adapter硬體細節。
但是如果這樣理解的話,又有了一個新問題:那為什麼在adapter驅動之外,還要搞一個client(slave)的驅動?!照說來adapter與slave相連之後,cpu直接讀寫adapter(/dev/i2c-0)不就完了嗎,因為cpu, adapter和slave是這種關係:
cpu----adapter----slave
實在搞不懂為什麼還搞一個slave的驅動

打字挺多,不知道說清楚了沒有
誠心希望各位看到文章的分享下看法

wmmy2008 發表於 2010-07-31 20:02
[b]回複 [url=http://linux.chinaunix.net/bbs/redirect.php?goto=findpost&pid=7280820&ptid=1168450]3#[/url] [i]SK|fisker[/i] [/b]

如果只說硬體的話,就是在CPU內部整合的一個I2C控制器(I2C匯流排的一個介面而已,不過這個介面是用來控制SCL線的)(提供給使用者的就是那幾個register),硬體上並沒的所謂的adapter,client這些東東,,adapter和client都是linux驅動軟體抽象出來的東西 ,不曉得說清楚沒的?   --這句話很正確

SK|fisker 發表於 2010-07-31 21:48
[b]回複 [url=http://linux.chinaunix.net/bbs/redirect.php?goto=findpost&pid=7280841&ptid=1168450]4#[/url] [i]wmmy2008[/i] [/b]

看了嵌入式精華區的幾篇I2C的文章,知道怎麼回事了
其實I2C的驅動也完全可以繞過client這個東西,直接存取/dev/i2c-x
不過所謂“adapter”確實還是有的,不過一個概念而已——那幾個register控制的東西是也。--這樣理解也沒有錯
唉,鑽牛角尖了。

linux初學三月 發表於 2010-07-31 22:32
一個具體的I2C裝置驅動需要實現兩個方面的介面,一個是對I2C core層的介面,用以掛接I2C adapter層來實現對I2C匯流排及I2C裝置具體的存取方法,包括要實現attach_adapter,detach_client,command等介面函數。另一個是對使用者應用程式層的介面,提供使用者程式訪問I2C裝置的介面,包括實現open,release,read,write以及最重要的ioctl等標準檔案操作的介面函數。

linux初學三月 發表於 2010-07-31 22:33
對I2C core層的介面函數的具體功能解釋如下:

attach_adapter:I2C driver在調用I2C_add_driver() 註冊時,對發現的每一個I2C adapter(對應一條I2C 匯流排)都要調用該函數,檢查該I2C adapter是否符合I2C driver的特定條件,如果符合條件則串連此I2C adapter,並通過I2C adapter來實現對I2C匯流排及I2C裝置的訪問。

detach_client:I2C driver在刪除一個I2C device時調用該函數,清除描述這個I2C device的資料結構,這樣以後就不能訪問該裝置了。

command:針對裝置的特點,實現一系列的子功能,是使用者介面中的ioctl功能的底層實現    ---非常正確

0vk0 發表於 2010-07-31 22:35
一個I2C裝置驅動的開發過程。實現的關鍵分為兩個部分,1. 對I2C core的介面,必須實現 struct i2c_drvier資料結構中的幾個特定的功能函數。這些函數是I2C驅動與I2C匯流排物理層(I2C控制器)和I2C裝置器件之間通訊的基礎。2. 對使用者應用程式層的介面,必須實現struct file_operation資料結構中的一些特定功能的函數,如 open ,release , read ,write,lseek等函數。以上兩類介面中,對I2C core的介面是對I2C裝置訪問的基礎,實現對I2C匯流排具體的存取方法;對使用者應用程式層的介面則是方便應用程式開發,實現裝置特定功能的必不可少的部分。

readkernel 發表於 2010-08-03 08:58
i2c adapter是軟體上抽象出來的i2c匯流排控制器介面
物理上一條i2c匯流排可以掛接多個硬體裝置(slave),一個CPU可以掛接多條i2c匯流排(想象一下PCI匯流排)
i2c匯流排控制器就是CPU訪問I2C匯流排的硬體介面,也就是你說的那幾個寄存器   ---正確

Linux I2C架構搞那麼複雜是為了通用性及為了符合Linux核心驅動模式而制定的。

單片機軟體做多了不習慣也是自然的。

star316 發表於 2010-08-05 15:17

簡單點了, 你的開發板上有幾個I2C介面,就有幾個adapter , 也就是有幾條I2C bus , I2C CLIENT 對應的就是你的外圍I2C 裝置,有幾個就有幾個CLIENT , 把這些裝置插入開發板, 對應其中的一條BUS, 那麼相應的就對應了其中的一個ADAPTER , 接下來的就是 CLIENT 與 ADAPTER 勾搭成對了, 後面就是做該做的事了   --通俗易通



註:與之相關聯的精華文章網址

http://bbs.chinaunix.net/thread-3622012-1-1.html

http://bbs.chinaunix.net/thread-2014978-1-1.html

http://bbs.chinaunix.net/thread-2038280-1-1.html

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.