楊北海 韓霜 王敬儒
摘要:隨著嵌入式的發(fā)展,定時器Real-Time Clock(RTC)的使用越來越廣泛。結(jié)合Linux環(huán)境,使用Sigma Designs推出的全新SOC SMP8654多媒體處理方案平臺來實現(xiàn)基于linux操作系統(tǒng)下RTC(實時時鐘芯片)驅(qū)動。該文首先研究了SMP8654系統(tǒng)的框架,然后利用I/O口來模擬I2C協(xié)議進(jìn)行數(shù)據(jù)通信,最后詳細(xì)介紹了基于linux下RTC驅(qū)動的整體架構(gòu)以及模塊的實現(xiàn)。
關(guān)鍵詞:SMP8654;Linux;RTC;I2C;驅(qū)動
中圖分類號:TP316文獻(xiàn)標(biāo)識碼:A文章編號:1009-3044(2012)26-6403-03
Based on SMP8654 Platform RTC Driver to Achieve
YANG Bei-hai, HAN Shuang, WANG Jing-ru
(Navy Maritime Security Repair Factory, Qingdao 266071, China)
Abstract:With the development of embedded timer Real-Time Clock(RTC)is more widely used. Linux environment, use the SOC SMP8654 Sigma Designs launch new multimedia processing solutions platform based on the Linux operating system, RTC(real-time clock chip) driver. The paper first studied the the SMP8654 systems framework, and then use the I / O port to emu? late I2C protocol for data communications, the last details of the implementation of the overall architecture and modules based on RTC driver under linux.
Key words: SMP8654; Linux; RTC; I2C items; driver 2.1 I2C協(xié)議及總線模擬
I2C協(xié)議是由PHILIPS公司開發(fā)的兩線串行總線,主要用于連接CPU與外圍設(shè)備。I2C總線由兩線組成,分別為串行數(shù)據(jù)總線(SDA)和串行時鐘總線(SCL),連接于I2C總線上的每一個設(shè)備都有唯一的地址進(jìn)行識別,并且都可以作為發(fā)送器或者接收器。數(shù)據(jù)傳輸速率在標(biāo)準(zhǔn)模式下為100Kbit/S,在快速模式下達(dá)到400Kbit/S[3]。
I2C總線對數(shù)據(jù)的傳輸以及命令的控制都是通過時序信號來實現(xiàn)[4],主要信號包含三種:起始、停止以及應(yīng)答。當(dāng)SCL線為高電平時,SDA線由高電平向低電平切換表示為起始信號;當(dāng)SCL線為高電平而SDA線由低電平向高電平切換表示為停止信號;當(dāng)設(shè)備接收到八位數(shù)據(jù)時,必須向發(fā)送端發(fā)送一個應(yīng)答信號,在響應(yīng)的時鐘脈沖期間,發(fā)送端將SDA置為高電平,接收端將SDA線置為低
在這個結(jié)構(gòu)中,所有的功能基本由上層調(diào)用ioctl來實現(xiàn)完成:
int pcf8563_ioctl(struct inode *inode, struct file *filp, unsigned int cmd, unsigned long arg)
在這個函數(shù)中,cmd的傳輸讀寫命令為RTC_RD_TIME與RTC_SET_TIME,arg為指向struct rtc_time結(jié)構(gòu)指針,用于存取時間。函數(shù)首先讀取用戶傳輸?shù)拿頲md,判斷是讀或者寫,如果是讀時間,則調(diào)用rtc_read函數(shù)進(jìn)行寄存器的讀取,數(shù)據(jù)保存在arg參數(shù);如果是寫時間,則調(diào)用rtc_write函數(shù)往寄存器寫入數(shù)據(jù)。
本文介紹了基于SMP8654平臺的RTC驅(qū)動開發(fā)實現(xiàn),主要介紹了平臺的硬件結(jié)構(gòu)并采用I/O口來模擬I2C總線協(xié)議,并在此基礎(chǔ)上實現(xiàn)了RTC字符設(shè)備驅(qū)動程序。該驅(qū)動程序包含了底層對設(shè)備的讀寫以及對上層應(yīng)用程序的數(shù)據(jù)傳輸,實現(xiàn)了RTC時鐘功能。
[1]鄭靈翔.嵌入式系統(tǒng)設(shè)計與應(yīng)用開發(fā)[M].北京:北京航空航天大學(xué)出版社,2006.
[2]涂剛,陽富民,胡貫榮.嵌入式操作系統(tǒng)綜述[J].計算機(jī)應(yīng)用研究,2000(11):4-5,9.
[3]張勇,郭嘉崴.嵌入式linux實時性分析與實時性改進(jìn)[J].沈陽師范大學(xué)學(xué)報:自然科學(xué)版,2006(4).
[4]周立功,陳明記,陳渝.ARM嵌入式Linux系統(tǒng)構(gòu)建與驅(qū)動開發(fā)范例[M].北京:北京航空航天大學(xué)出版社,2006.
[5]毛德操,胡希明.Linux內(nèi)核源代碼情景分析[M].杭州:浙江大學(xué)出版社,2001.