到底什麼是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