www.久久久久|狼友网站av天堂|精品国产无码a片|一级av色欲av|91在线播放视频|亚洲无码主播在线|国产精品草久在线|明星AV网站在线|污污内射久久一区|婷婷综合视频网站

當前位置:首頁 > 嵌入式 > 嵌入式軟件

摘 要: 針對I2C總線的特點,Linux內核中定義了I2C驅動體系結構。在分析Linux的I2C總線驅動體系結構基礎上,介紹了在S3C2410中設計I2C總線驅動的方法。
關鍵詞: ARM-Linux;I2C體系結構;I2C總線驅動程序

 I2C總線是一種串行數(shù)據(jù)傳輸標準總線,使用數(shù)據(jù)線SDA和時鐘線SCL就可實現(xiàn)設備間的數(shù)據(jù)交互,它使得電路系統(tǒng)結構設計簡單,具有使用方便、通信速率高等優(yōu)點。因此,在嵌入式系統(tǒng)中,I2C總線被廣泛地應用在與RAM、EEPROM、RTC等設備間的接口電路中。近年來,隨著嵌入式系統(tǒng)應用不斷升溫,Linux憑借源碼開放、內核穩(wěn)定以及可裁剪性強等優(yōu)點成為在通信、工業(yè)控制、消費電子等領域的主流操作系統(tǒng)。而Linux設備驅動程序是所有Linux應用系統(tǒng)中不可或缺的組成部分,是現(xiàn)在Linux開發(fā)中的熱門領域。Linux內核已經把I2C總線協(xié)議定義為內核驅動的一部分,并形成了一種體系結構。本文正是在研究I2C總線驅動體系結構基礎上,提出了其在S3C2410中實現(xiàn)的基本方法。
1 I2C總線
 I2C總線是由雙向數(shù)據(jù)傳輸線SDA和時鐘線SCL構成的二線制串行總線,可構成主從和多主系統(tǒng)。I2C總線多采用主從雙向通信,即總線上在某一時刻只有一個主設備,總線上的其他設備都作為從設備。任何能夠進行發(fā)送和接收的設備都可以成為主設備,但是在同一時間內只能有一個設備作為主設備(通常為微控制器),其他每個I2C器件作為從設備與主設備進行通信,它們都有唯一的地址用來識別。
I2C總線的時序圖[1]如圖1所示。


 從圖1可以看到,I2C總線在傳送數(shù)據(jù)過程中使用了三種信號[2]。(1)開始信號:SCL為高電平時,SDA由高電平向低電平跳變,表示將要開始傳送數(shù)據(jù);(2)應答信號:從設備在接收到1 B數(shù)據(jù)后,向主設備發(fā)出一個低電平脈沖應答信號,表示已收到數(shù)據(jù),主設備根據(jù)從設備的應答信號做出是否繼續(xù)傳輸數(shù)據(jù)的操作(I2C總線每次數(shù)據(jù)傳輸時字節(jié)數(shù)不限制,但是每發(fā)送1 B都要有一個應答信號);(3)結束信號:SCL為低電平時,SDA由低電平向高電平跳變,表示數(shù)據(jù)傳送結束。
I2C總線具體的通信工作原理如下:主設備首先發(fā)出開始信號,接著發(fā)送1 B的數(shù)據(jù),其由高7 bit地址碼和最低1 bit方向位組成(方向位表明主設備與從設備間數(shù)據(jù)的傳送方向)。系統(tǒng)中所有從設備將自己的地址與主設備發(fā)送到總線上的地址進行比較,如果從設備地址與總線上的地址相同,該設備就是與主設備進行數(shù)據(jù)傳輸?shù)脑O備。接著進行數(shù)據(jù)傳輸,根據(jù)方向位,主設備接收從設備數(shù)據(jù)或發(fā)送數(shù)據(jù)到從設備。當數(shù)據(jù)傳送完成后,主設備發(fā)出一個停止信號,釋放I2C總線,然后所有從設備等待下一個開始信號的到來。
2 系統(tǒng)硬件設計
2.1 Linux驅動程序
 設備驅動程序是Linux內核的重要組成部分,是操作系統(tǒng)內核與底層硬件之間的接口。在ARM系統(tǒng)中,每個物理設備都有自己的控制器,每個硬件控制器都有自己的控制狀態(tài)寄存器(CSR),并且各不相同。這些寄存器用來啟動、停止、初始化設備,并對設備進行診斷,對硬件的控制主要是針對這些寄存器進行操作。設備驅動程序為應用程序屏蔽了硬件的底層細節(jié),這樣在應用程序看來,硬件設備只是一個文件,應用程序通過對應的設備驅動程序中定義的通信接口(write、read和ioctl等)像操作普通文件一樣實現(xiàn)對硬件設備的操作,簡化了對設備的訪問,使得應用程序的編寫相對簡單。
設備驅動程序一般有以下功能[3]:對硬件設備的初始化、加載和釋放;對設備進行管理,包括實時參數(shù)設置以及提供對設備的統(tǒng)一操作接口;讀取應用程序傳遞給設備文件的數(shù)據(jù)或回送應用程序請求的數(shù)據(jù);檢測或處理設備出現(xiàn)的錯誤等。
 Linux內核將打開、關閉、讀/寫和ioctl等所有相關操作封裝在一個結構體file_operations中,設備驅動程序利用結構體file_operations與文件系統(tǒng)聯(lián)系起來。另外還要使用module_init()和module_exit()兩個宏。module_init()的本質是在.initcall.init段使用空間中定義的一個指向初始化函數(shù)的指針。設備驅動程序通過調用代碼段中設備初始化函數(shù),完成初始化硬件和向內核注冊設備驅動程序。module_exit()功能與module_init()相反。
2.2 I2C總線驅動體系結構
 直接數(shù)字頻率合成器(DDS)是一種產生模擬波形的方法,其通常是通過數(shù)字形式的時間轉換信號再執(zhí)行數(shù)模轉換產生正弦波。因為DDS設備的運行基于數(shù)字,所以能夠在輸出頻率、正弦波頻率分解和運行于寬頻率頻譜之間相互轉換。本系統(tǒng)采用DDS AD9833作為超聲波發(fā)射單元的脈沖生成器,AD9833是可編程的,通過高速串口外圍接口(SPI),只需要一個外部時鐘去產生簡單的正弦波就可以工作了。AD9833可以在基于25 MHz的時鐘下產生0~12.5 MHz的波形[6]。
 I2C設備在Linux下完全可以作為一個字符設備,可以根據(jù)需要編寫一個字符設備驅動程序來支持I2C通信。但是由于I2C總線是一種標準總線,在PC和嵌入式系統(tǒng)中都得到了廣泛的應用,Linux專門為I2C總線定義了I2C驅動程序體系結構[4],使驅動程序有統(tǒng)一的接口,方便了驅動設計者設計,也便于移植。
在Linux系統(tǒng)中,I2C總線驅動體系由I2C核心、總線適配器驅動和設備驅動三部分組成。
 (1)I2C核心
 I2C核心即i2c-core.c,是Linux內核用來維護和管理的I2C總線的核心部分,實現(xiàn)了I2C總線驅動的框架。I2C核心為總線提供了統(tǒng)一的接口函數(shù),實現(xiàn)了I2C總線驅動和設備驅動的注冊、注銷及通信等功能。I2C核心是I2C總線適配器驅動和設備驅動之間的橋梁。
?。?)I2C總線適配器驅動
 I2C總線適配器驅動主要包括了對應具體硬件I2C控制器的I2C總線適配器i2c_adapter以及I2C總線適配器的通信傳輸算法i2c_algorithm以及總線驅動控制適配器通信函數(shù)等,為I2C核心提供了底層支持,是與硬件相關的。需要注意的是,I2C總線驅動程序只是提供了I2C總線的讀寫方法,其本身并不進行任何通信,它只是等待設備驅動調用其函數(shù)來對具體的硬件設備進行訪問。
 (3)I2C設備驅動程序
 I2C設備驅動程序通過I2C總線適配器驅動與具體的硬件設備進行通信。I2C設備驅動程序中主要包括了數(shù)據(jù)結構i2c_driver(用于管理i2c_client)、i2c_client(掛在I2C總線上的設備驅動程序)和需要根據(jù)具體設備實現(xiàn)的成員函數(shù)。標準的I2C驅動程序也是一個字符設備驅動程序,通過i2c-dev.c來進行管理,包括open、release、read、write、ioctl和lseek等。
Linux內核I2C總線驅動程序構架如圖2所示,其反映了I2C總線驅動體系間的關系。

3 S3C2410中I2C總線驅動程序的實現(xiàn)

本站聲明: 本文章由作者或相關機構授權發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點,本站亦不保證或承諾內容真實性等。需要轉載請聯(lián)系該專欄作者,如若文章內容侵犯您的權益,請及時聯(lián)系本站刪除。
換一批
延伸閱讀

LED驅動電源的輸入包括高壓工頻交流(即市電)、低壓直流、高壓直流、低壓高頻交流(如電子變壓器的輸出)等。

關鍵字: 驅動電源

在工業(yè)自動化蓬勃發(fā)展的當下,工業(yè)電機作為核心動力設備,其驅動電源的性能直接關系到整個系統(tǒng)的穩(wěn)定性和可靠性。其中,反電動勢抑制與過流保護是驅動電源設計中至關重要的兩個環(huán)節(jié),集成化方案的設計成為提升電機驅動性能的關鍵。

關鍵字: 工業(yè)電機 驅動電源

LED 驅動電源作為 LED 照明系統(tǒng)的 “心臟”,其穩(wěn)定性直接決定了整個照明設備的使用壽命。然而,在實際應用中,LED 驅動電源易損壞的問題卻十分常見,不僅增加了維護成本,還影響了用戶體驗。要解決這一問題,需從設計、生...

關鍵字: 驅動電源 照明系統(tǒng) 散熱

根據(jù)LED驅動電源的公式,電感內電流波動大小和電感值成反比,輸出紋波和輸出電容值成反比。所以加大電感值和輸出電容值可以減小紋波。

關鍵字: LED 設計 驅動電源

電動汽車(EV)作為新能源汽車的重要代表,正逐漸成為全球汽車產業(yè)的重要發(fā)展方向。電動汽車的核心技術之一是電機驅動控制系統(tǒng),而絕緣柵雙極型晶體管(IGBT)作為電機驅動系統(tǒng)中的關鍵元件,其性能直接影響到電動汽車的動力性能和...

關鍵字: 電動汽車 新能源 驅動電源

在現(xiàn)代城市建設中,街道及停車場照明作為基礎設施的重要組成部分,其質量和效率直接關系到城市的公共安全、居民生活質量和能源利用效率。隨著科技的進步,高亮度白光發(fā)光二極管(LED)因其獨特的優(yōu)勢逐漸取代傳統(tǒng)光源,成為大功率區(qū)域...

關鍵字: 發(fā)光二極管 驅動電源 LED

LED通用照明設計工程師會遇到許多挑戰(zhàn),如功率密度、功率因數(shù)校正(PFC)、空間受限和可靠性等。

關鍵字: LED 驅動電源 功率因數(shù)校正

在LED照明技術日益普及的今天,LED驅動電源的電磁干擾(EMI)問題成為了一個不可忽視的挑戰(zhàn)。電磁干擾不僅會影響LED燈具的正常工作,還可能對周圍電子設備造成不利影響,甚至引發(fā)系統(tǒng)故障。因此,采取有效的硬件措施來解決L...

關鍵字: LED照明技術 電磁干擾 驅動電源

開關電源具有效率高的特性,而且開關電源的變壓器體積比串聯(lián)穩(wěn)壓型電源的要小得多,電源電路比較整潔,整機重量也有所下降,所以,現(xiàn)在的LED驅動電源

關鍵字: LED 驅動電源 開關電源

LED驅動電源是把電源供應轉換為特定的電壓電流以驅動LED發(fā)光的電壓轉換器,通常情況下:LED驅動電源的輸入包括高壓工頻交流(即市電)、低壓直流、高壓直流、低壓高頻交流(如電子變壓器的輸出)等。

關鍵字: LED 隧道燈 驅動電源
關閉