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