I2C總線在Linux系統(tǒng)中的驅(qū)動設(shè)計
1 引言
Linux操作系統(tǒng)因具有源代碼公開、便于裁減、有廣泛的處理器支持等優(yōu)點,成為當前嵌入式系統(tǒng)的熱門選擇?;?a class="contentlabel" href="http://m.butianyuan.cn/news/listbylabel/label/I2C">I2C總線的鍵盤擴展設(shè)備主要用于滿足嵌入式設(shè)備中對多按鍵的需求,驅(qū)動程序在系統(tǒng)啟動時對硬件進行初始化。在系統(tǒng)啟動后實現(xiàn)硬件和應用程序之間的數(shù)據(jù)交互。針對S3C2410微處理器和鍵盤掃描管理器件,深入討論如何在嵌入式操作系統(tǒng)ARM Linux中實現(xiàn)ZLG7290的驅(qū)動。
2 I2C總線
I2C總線是器件間串行傳輸總線,以其規(guī)范和帶I2C接口的外圍器件獲得廣泛應用。S3C2410處理器內(nèi)置有I2C總線接口。I2C總線是由數(shù)據(jù)線SDA和時鐘SCL構(gòu)成的串行總線,可發(fā)送和接收數(shù)據(jù),每個器件都有一個唯一的地址識別。I2C總線在傳送數(shù)據(jù)過程中共有3種信號:(1)開始信號:SCL為高電平時,SDA由高電平向低電平跳變,開始傳送數(shù)據(jù)。(2)結(jié)束信號:SCL為低電平時,SDA由低電平向高電平跳變,結(jié)束傳送數(shù)據(jù)。(3)應答信號:接收數(shù)據(jù)的IC接收到8 bit數(shù)據(jù)后,向發(fā)送數(shù)據(jù)的IC發(fā)出特定的低電平脈沖,表示已收到數(shù)據(jù)。CPU向受控單元發(fā)出一個信號后,等待受控單元發(fā)出應答信號,CPU接收到應答信號后,根據(jù)實際情況做出是否繼續(xù)傳遞信號的判斷。若未收到應答信號,則判斷為受控單元出現(xiàn)故障。圖1為S3C2410和ZLG7290的連接圖。
3 驅(qū)動模塊的結(jié)構(gòu)
S3C2410A內(nèi)嵌一個I2C總線控制器。在Linux操作系統(tǒng)中,該控制器的字符型驅(qū)動包括4個模塊:(1)i2c-dev:源程序為i2c-dev.c,I2C總線字符型驅(qū)動,與具體使用的I2C控制器無關(guān)。(2)i2c-core:源程序為i2c-core.c,I2C總線操作核心函數(shù),與具體使用的I2C控制器無關(guān)。(3)i2c-algo-s3c2410:源程序為i2c-algo-s3c2410.c,I2C總線控制器I2C驅(qū)動算法,與具體的控制器相關(guān)。(4)i2c-s3c2410:源程序為i2c-s3c2410.c,I2C總線控制器硬件抽象層,與具體的控制器相關(guān)。以上4個模塊依次是底層與上層的關(guān)系,I2C驅(qū)動模塊的層次結(jié)構(gòu)如圖2所示。
4 驅(qū)動源文件的編譯
驅(qū)動源文件包括i2c-algo-s3c2410.c,i2c-dev.c,i2c-core.c,i2c-s3c2410.c4個源文件。將其編譯為模塊,則產(chǎn)生4個模塊文件,編譯工作由Makefile文件完成,其文件內(nèi)容如下:
評論