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