杨北海 韩霜 王敬儒
摘要:随着嵌入式的发展,定时器Real-Time Clock(RTC)的使用越来越广泛。结合Linux环境,使用Sigma Designs推出的全新SOC SMP8654多媒体处理方案平台来实现基于linux操作系统下RTC(实时时钟芯片)驱动。该文首先研究了SMP8654系统的框架,然后利用I/O口来模拟I2C协议进行数据通信,最后详细介绍了基于linux下RTC驱动的整体架构以及模块的实现。
关键词:SMP8654;Linux;RTC;I2C;驱动
中图分类号:TP316文献标识码: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协议及总线模拟
I2C协议是由PHILIPS公司开发的两线串行总线,主要用于连接CPU与外围设备。I2C总线由两线组成,分别为串行数据总线(SDA)和串行时钟总线(SCL),连接于I2C总线上的每一个设备都有唯一的地址进行识别,并且都可以作为发送器或者接收器。数据传输速率在标准模式下为100Kbit/S,在快速模式下达到400Kbit/S[3]。
I2C总线对数据的传输以及命令的控制都是通过时序信号来实现[4],主要信号包含三种:起始、停止以及应答。当SCL线为高电平时,SDA线由高电平向低电平切换表示为起始信号;当SCL线为高电平而SDA线由低电平向高电平切换表示为停止信号;当设备接收到八位数据时,必须向发送端发送一个应答信号,在响应的时钟脉冲期间,发送端将SDA置为高电平,接收端将SDA线置为低
在这个结构中,所有的功能基本由上层调用ioctl来实现完成:
int pcf8563_ioctl(struct inode *inode, struct file *filp, unsigned int cmd, unsigned long arg)
在这个函数中,cmd的传输读写命令为RTC_RD_TIME与RTC_SET_TIME,arg为指向struct rtc_time结构指针,用于存取时间。函数首先读取用户传输的命令cmd,判断是读或者写,如果是读时间,则调用rtc_read函数进行寄存器的读取,数据保存在arg参数;如果是写时间,则调用rtc_write函数往寄存器写入数据。
本文介绍了基于SMP8654平台的RTC驱动开发实现,主要介绍了平台的硬件结构并采用I/O口来模拟I2C总线协议,并在此基础上实现了RTC字符设备驱动程序。该驱动程序包含了底层对设备的读写以及对上层应用程序的数据传输,实现了RTC时钟功能。
[1]郑灵翔.嵌入式系统设计与应用开发[M].北京:北京航空航天大学出版社,2006.
[2]涂刚,阳富民,胡贯荣.嵌入式操作系统综述[J].计算机应用研究,2000(11):4-5,9.
[3]张勇,郭嘉崴.嵌入式linux实时性分析与实时性改进[J].沈阳师范大学学报:自然科学版,2006(4).
[4]周立功,陈明记,陈渝.ARM嵌入式Linux系统构建与驱动开发范例[M].北京:北京航空航天大学出版社,2006.
[5]毛德操,胡希明.Linux内核源代码情景分析[M].杭州:浙江大学出版社,2001.