Linux下I2C設備驅動開發和實現
發布時間:2008/8/20 0:00:00 訪問次數:650
i2c總線具有結構簡單使用方便的特點。本文描述了linux下i2c驅動的結構,并在此基礎上給出了i2c設備驅動和應用的實現。
1 引言
i2c (inter-integrated circuit)總線是一種由philips公司開發的兩線式串行總線,用于連接微控制器及其外圍設備。i2c總線最主要的優點是其簡單性和有效性。由于接口直接在組件之上,因此i2c總線占用的空間非常小,減少了電路板的空間和芯片管腳的數量,降低了互聯成本。i2c總線最初為音頻和視頻設備開發,現已應用于各種服務與管理場合,來實現配置或掌握組件的功能狀態,如電源、系統風扇、系統溫度等參數,增加了系統的安全性,方便了管理。
2 i2c總線概述
i2c總線是由數據線sda和時鐘scl構成的串行總線,可發送和接收數據,每個器件都有一個惟一的地址識別。i2c 規程運用主/從雙向通訊。器件發送數據到總線上,則定義為發送器,器件接收數據則定義為接收器。主器件和從器件都可以工作于接收和發送狀態。總線必須由主器件(通常為微控制器)控制,主器件產生串行時鐘(scl)控制總線的傳輸方向,并產生起始和停止條件。sda線上的數據狀態僅在scl為低電平的期間才能改變,scl為高電平的期間,sda狀態的改變被用來表示起始和停止條件。
i2c總線在傳送數據過程中共有三種類型信號,它們分別是:開始信號、結束信號和應答信號。
開始信號:scl為高電平時,sda由高電平向低電平跳變,開始傳送數據。
結束信號:scl為低電平時,sda由低電平向高電平跳變,結束傳送數據。
應答信號:接收數據的ic在接收到8bit數據后,向發送數據的ic發出特定的低電平脈沖,表示已收到數據。cpu向受控單元發出一個信號后,等待受控單元發出一個應答信號,cpu接收到應答信號后,根據實際情況作出是否繼續傳遞信號的判斷。若未收到應答信號,由判斷為受控單元出現故障。
linux中i2c總線的驅動分為兩個部分,總線驅動(bus)和設備驅動(device)。其中總線驅動的職責,是為系統中每個i2c總線增加相應的讀寫方法。但是總線驅動本身并不會進行任何的通訊,它只是存在那里,等待設備驅動調用其函數,參見圖。
設備驅動則是與掛在i2c總線上的具體的設備通訊的驅動。通過i2c總線驅動提供的函數,設備驅動可以忽略不同總線控制器的差異,不考慮其實現細節地與硬件設備通訊。
linux內核i2c總線驅動程序構架
在我們的linux驅動的i2c文件夾下有algos,busses,chips三個文件夾,另外還有i2c-core.c和i2c-dev.c兩個文件。其中i2c-core.c文件實現了i2c core框架,是linux內核用來維護和管理的i2c的核心部分,其中維護了兩個靜態的list,分別記錄系統中的i2c driver結構和i2c adapter結構。i2c core提供接口函數,允許一個i2c adatper,i2c driver和i2c client初始化時在i2c core中進行注冊,以及退出時進行注銷。同時還提供了i2c總線讀寫訪問的一般接口,主要應用在i2c設備驅動中。
busses文件夾下的i2c-mpc.c文件實現了powerpc下i2c總線適配器驅動,定義描述了具體的i2c總線適配器的i2c_adapter數據結構,實現比較底層的對i2c總線訪問的具體方法。i2c adapter 構造一個對i2c core層接口的數據結構,并通過接口函數向i2c core注冊一個控制器。i2c adapter主要實現對i2c總線訪問的算法,iic_xfer() 函數就是i2c adapter底層對i2c總線讀寫方法的實現。同時i2c adpter 中還實現了對i2c控制器中斷的處理函數。
i2c-dev.c文件中實現了i2c driver,提供了一個通用的i2c設備的驅動程序,實現了字符類型設備的訪問接口,實現了對用戶應用層的接口,提供用戶程序訪問i2c設備的接口,包括實現open,release,read,write以及最重要的ioctl等標準文件操作的接口函數。我們可以通過open函數打開 i2c的設備文件,通過ioctl函數設定要訪問從設備的地址,然后就可以通過 read和write函數完成對i2c設備的讀寫操作。
通過i2c driver提供的通用方法可以訪問任何一個i2c的設備,但是其中實現的read,write及ioctl等功能完全是基于一般設備的實現,所有的操作數據都是基于字節流,沒有明確的格式和意義。為了更方便和有效地使用i2c設備,我們可以為一個具體的i2c設備開發特定的i2c設備驅動程序,在驅動中完成對特定的數據格式的解釋以及實現一些專用的功能。
4 linux下i2c具體驅動開發
tmp75是ti公司推出的基于i2c總線的數字溫度傳感器,具有低的功耗,高數字分辨率,廣泛應用于電源溫度監控,計算機外設保護,筆記本和蜂窩電話中。針對該設備開發驅動程序,由于linux系統下已經實現了i2c core框架,i2c總線適配
i2c總線具有結構簡單使用方便的特點。本文描述了linux下i2c驅動的結構,并在此基礎上給出了i2c設備驅動和應用的實現。
1 引言
i2c (inter-integrated circuit)總線是一種由philips公司開發的兩線式串行總線,用于連接微控制器及其外圍設備。i2c總線最主要的優點是其簡單性和有效性。由于接口直接在組件之上,因此i2c總線占用的空間非常小,減少了電路板的空間和芯片管腳的數量,降低了互聯成本。i2c總線最初為音頻和視頻設備開發,現已應用于各種服務與管理場合,來實現配置或掌握組件的功能狀態,如電源、系統風扇、系統溫度等參數,增加了系統的安全性,方便了管理。
2 i2c總線概述
i2c總線是由數據線sda和時鐘scl構成的串行總線,可發送和接收數據,每個器件都有一個惟一的地址識別。i2c 規程運用主/從雙向通訊。器件發送數據到總線上,則定義為發送器,器件接收數據則定義為接收器。主器件和從器件都可以工作于接收和發送狀態。總線必須由主器件(通常為微控制器)控制,主器件產生串行時鐘(scl)控制總線的傳輸方向,并產生起始和停止條件。sda線上的數據狀態僅在scl為低電平的期間才能改變,scl為高電平的期間,sda狀態的改變被用來表示起始和停止條件。
i2c總線在傳送數據過程中共有三種類型信號,它們分別是:開始信號、結束信號和應答信號。
開始信號:scl為高電平時,sda由高電平向低電平跳變,開始傳送數據。
結束信號:scl為低電平時,sda由低電平向高電平跳變,結束傳送數據。
應答信號:接收數據的ic在接收到8bit數據后,向發送數據的ic發出特定的低電平脈沖,表示已收到數據。cpu向受控單元發出一個信號后,等待受控單元發出一個應答信號,cpu接收到應答信號后,根據實際情況作出是否繼續傳遞信號的判斷。若未收到應答信號,由判斷為受控單元出現故障。
linux中i2c總線的驅動分為兩個部分,總線驅動(bus)和設備驅動(device)。其中總線驅動的職責,是為系統中每個i2c總線增加相應的讀寫方法。但是總線驅動本身并不會進行任何的通訊,它只是存在那里,等待設備驅動調用其函數,參見圖。
設備驅動則是與掛在i2c總線上的具體的設備通訊的驅動。通過i2c總線驅動提供的函數,設備驅動可以忽略不同總線控制器的差異,不考慮其實現細節地與硬件設備通訊。
linux內核i2c總線驅動程序構架
在我們的linux驅動的i2c文件夾下有algos,busses,chips三個文件夾,另外還有i2c-core.c和i2c-dev.c兩個文件。其中i2c-core.c文件實現了i2c core框架,是linux內核用來維護和管理的i2c的核心部分,其中維護了兩個靜態的list,分別記錄系統中的i2c driver結構和i2c adapter結構。i2c core提供接口函數,允許一個i2c adatper,i2c driver和i2c client初始化時在i2c core中進行注冊,以及退出時進行注銷。同時還提供了i2c總線讀寫訪問的一般接口,主要應用在i2c設備驅動中。
busses文件夾下的i2c-mpc.c文件實現了powerpc下i2c總線適配器驅動,定義描述了具體的i2c總線適配器的i2c_adapter數據結構,實現比較底層的對i2c總線訪問的具體方法。i2c adapter 構造一個對i2c core層接口的數據結構,并通過接口函數向i2c core注冊一個控制器。i2c adapter主要實現對i2c總線訪問的算法,iic_xfer() 函數就是i2c adapter底層對i2c總線讀寫方法的實現。同時i2c adpter 中還實現了對i2c控制器中斷的處理函數。
i2c-dev.c文件中實現了i2c driver,提供了一個通用的i2c設備的驅動程序,實現了字符類型設備的訪問接口,實現了對用戶應用層的接口,提供用戶程序訪問i2c設備的接口,包括實現open,release,read,write以及最重要的ioctl等標準文件操作的接口函數。我們可以通過open函數打開 i2c的設備文件,通過ioctl函數設定要訪問從設備的地址,然后就可以通過 read和write函數完成對i2c設備的讀寫操作。
通過i2c driver提供的通用方法可以訪問任何一個i2c的設備,但是其中實現的read,write及ioctl等功能完全是基于一般設備的實現,所有的操作數據都是基于字節流,沒有明確的格式和意義。為了更方便和有效地使用i2c設備,我們可以為一個具體的i2c設備開發特定的i2c設備驅動程序,在驅動中完成對特定的數據格式的解釋以及實現一些專用的功能。
4 linux下i2c具體驅動開發
tmp75是ti公司推出的基于i2c總線的數字溫度傳感器,具有低的功耗,高數字分辨率,廣泛應用于電源溫度監控,計算機外設保護,筆記本和蜂窩電話中。針對該設備開發驅動程序,由于linux系統下已經實現了i2c core框架,i2c總線適配