版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、實(shí)例解析實(shí)例解析linux內(nèi)核內(nèi)核I2C體系結(jié)構(gòu)體系結(jié)構(gòu)一、概述談到在linux系統(tǒng)下編寫I2C驅(qū)動(dòng),目前主要有兩種方式,一種是把I2C設(shè)備當(dāng)作一個(gè)普通的字符設(shè)備來(lái)處理,另一種是利用linuxI2C驅(qū)動(dòng)體系結(jié)構(gòu)來(lái)完成。下面比較下這兩種驅(qū)動(dòng)。第一種方法的好處(對(duì)應(yīng)第二種方法的劣勢(shì))有:●思路比較直接,不需要花時(shí)間去了解linux內(nèi)核中復(fù)雜的I2C子系統(tǒng)的操作方法。第一種方法問(wèn)題(對(duì)應(yīng)第二種方法的好處)有:●要求工程師不僅要對(duì)I2C設(shè)備的操
2、作熟悉,而且要熟悉I2C的適配器操作;●要求工程師對(duì)I2C的設(shè)備器及I2C的設(shè)備操作方法都比較熟悉,最重要的是寫出的程序可移植性差;●對(duì)內(nèi)核的資源無(wú)法直接使用。因?yàn)閮?nèi)核提供的所有I2C設(shè)備器及設(shè)備驅(qū)動(dòng)都是基于I2C子系統(tǒng)的格式。I2C適配器的操作簡(jiǎn)單還好,如果遇到復(fù)雜的I2C適配器(如:基于PCI的I2C適配器),工作量就會(huì)大很多。本文針對(duì)的對(duì)象是熟悉I2C協(xié)議,并且想使用linux內(nèi)核子系統(tǒng)的開發(fā)人員。網(wǎng)絡(luò)和一些書籍上有介紹I2C子系
3、統(tǒng)的源碼結(jié)構(gòu)。但發(fā)現(xiàn)很多開發(fā)人員看了這些文章后,還是不清楚自己究竟該做些什么。究其原因還是沒(méi)弄清楚I2C子系統(tǒng)為我們做了些什么,以及我們?cè)鯓永肐2C子系統(tǒng)。本文首先要解決是如何利用現(xiàn)有內(nèi)核支持的I2C適配器,完成對(duì)I2C設(shè)備的操作,然后再過(guò)度到適配器代碼的編寫。本文主要從解決問(wèn)題的角度去寫,不會(huì)涉及特別詳細(xì)的代碼跟蹤。二、I2C設(shè)備驅(qū)動(dòng)程序編寫首先要明確適配器驅(qū)動(dòng)的作用是讓我們能夠通過(guò)它發(fā)出符合I2C標(biāo)準(zhǔn)協(xié)議的時(shí)序。在Linux內(nèi)核源
4、代碼中的driversi2cbusses目錄下包含著一些適配器的驅(qū)動(dòng)。如S3C2410的驅(qū)動(dòng)i2cs3c2410.c。當(dāng)適配器加載到內(nèi)核后,接下來(lái)的工作就要針對(duì)具體的設(shè)備編寫設(shè)備驅(qū)動(dòng)了。編寫I2C設(shè)備驅(qū)動(dòng)也有兩種方法。一種是利用系統(tǒng)給我們提供的i2cdev.c來(lái)實(shí)現(xiàn)一個(gè)i2c適配器的設(shè)備文件。然后通過(guò)在應(yīng)用層操作i2c適配器來(lái)控制i2c設(shè)備。另一種是為i2c設(shè)備,獨(dú)立編寫一個(gè)設(shè)備驅(qū)動(dòng)。注意:在后一種情況下,是不需要使用i2cdev.c的
5、。1、利用i2cdev.c操作適配器,進(jìn)而控制i2c設(shè)備i2cdev.c并沒(méi)有針對(duì)特定的設(shè)備而設(shè)計(jì),只是提供了通用的read()、write()和ioctl()等接口,應(yīng)用層可以借用這些接口訪問(wèn)掛接在適配器上的i2c設(shè)備的存儲(chǔ)空間或寄存器,并控制I2Cstructi2c_msg__u16addrslaveaddress__u16flags標(biāo)志(讀、寫)__u16lenmsglength__u8bufpointertomsgdata針對(duì)s
6、mbus算法,需要熟悉structi2c_smbus_ioctl_data。使用的命令是I2C_SMBUS。對(duì)于smbus算法,不需要考慮“多開始信號(hào)時(shí)序”問(wèn)題。structi2c_smbus_ioctl_data__u8read_write讀、寫__u8comm命令__u32size數(shù)據(jù)長(zhǎng)度標(biāo)識(shí)unioni2c_smbus_data__userdata數(shù)據(jù)下面以一個(gè)實(shí)例講解操作的具體過(guò)程。通過(guò)S3C2410操作AT24C02e2pro
7、m。實(shí)現(xiàn)在AT24C02中任意位置的讀、寫功能。首先在內(nèi)核中已經(jīng)包含了對(duì)s3c2410中的i2c控制器驅(qū)動(dòng)的支持。提供了i2c算法(非smbus類型的,所以后面的ioctl的命令是I2C_RDWR)staticconststructi2c_algithms3c24xx_i2c_algithm=.master_xfer=s3c24xx_i2c_xfer.functionality=s3c24xx_i2c_func另外一方面需要確定為了實(shí)現(xiàn)
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫(kù)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 實(shí)例解析linux內(nèi)核i2c體系結(jié)構(gòu)
- i2c課程設(shè)計(jì)--基于arm的i2c接口設(shè)計(jì)
- pic單片機(jī)之i2c(從模式)實(shí)例講解
- 用FPGA實(shí)現(xiàn)8051內(nèi)核及外設(shè)I2C接口擴(kuò)展的研究.pdf
- i2c總線之(二)---時(shí)序
- i2c與smbus的區(qū)別
- 片上i2c總線設(shè)計(jì)
- J2EE規(guī)范體系結(jié)構(gòu)的研究與實(shí)例解析.pdf
- 片上I2C總線設(shè)計(jì).pdf
- i2c芯片的驅(qū)動(dòng)程序
- Linux集群體系結(jié)構(gòu).pdf
- 機(jī)頂盒內(nèi)的I2C主控制器設(shè)計(jì)與I2C從設(shè)備集成方法.pdf
- 同步串行通訊I2C總線的設(shè)計(jì).pdf
- 基于內(nèi)核的平臺(tái)體系結(jié)構(gòu)KBCSCW.pdf
- 彩電i2c總線中英文對(duì)照表
- 射頻芯片中I2C總線的功能測(cè)試.pdf
- 基于嵌入式linux的設(shè)備管理研究及I2C驅(qū)動(dòng)程序應(yīng)用.pdf
- 網(wǎng)絡(luò)處理器內(nèi)核體系結(jié)構(gòu)研究.pdf
- 嵌入式Linux內(nèi)核解析.pdf
- arm課程設(shè)計(jì)--基于arm的i2c接口設(shè)計(jì)
評(píng)論
0/150
提交評(píng)論