Linux下RTC设备驱动?

Linux下RTC设备驱动?,第1张

RTC(实时钟)借助电池供电,在系统掉电的情况下依然可以正常计时。它通常还具有产生周期性中断以及闹钟(Alarm〉中断的能力,是一种典型的字符设备。作为一种字符设备驱动,RTC需要有file_operations中接口函数的实现,如open () 、release () 、read () 、poll () 、ioctl ()等,而典型的IOCTL包括RTC_SET_TIME、RTC_ALM_READ、RTC_ALM_SET、RTC_IRQP_SET、RTC_IRQP_READ等,这些对于所有的RTC是通用的,只有底层的具体实现是与设备相关的。因此,drivers/rtc/tc-dev.c实现了RTC驱动通用的字符设备驱动层,它实现了file_opearations的成员函数以及一些通用的关于RTC的控制代码,并向底层导出rtc_device_register () 、rtc_device_unregister ()以注册和注销RTC导出rtc_class_ops结构体以描述底层的RTC硬件 *** 作。这个RTC通用层实现的结果是,底层的RTC驱动不再需要关心RTC作为字符设备驱动的具体实现,也无需关心一些通用的RTC控制逻辑。

系统时间一般是保存在时钟寄存器中的,由于绝对时间值比较大,所以寄存器中都是放一个相对时间值,即系统时间(日期+时间)减去一个固定的值(多数是1900年,也有的用1970年)后的秒数。取系统时间时会再把这个值加回来,从而得到真正的系统时间。

uboot中取时间的函数是将时钟寄存器中的值取出后,加上那个固定值(如1900年),直接返回,如果时间寄存器中放的是12年的秒数,在u-boot中就会显示是1912年。

linux kernel计算日期中有点不同,在算出年号后(加上1900年),接着判断,年号<=1969,再加上100,所以同样时间寄存器值将会校正为2012了。

你的系统显示不一致,可能原因是u-boot和kernel源代码移植不完整,u-boot和kernel实时时钟的存储和计算策略不一致。

实时时钟RTC(Real_Time Clock):

1、RTC 是集成电路,通常称为时钟芯片。RTC通常为8PIN,有SOP8、MSOP8、TSSOP8等多种封装。其中有6个I/O口的功能是一样的,分为:晶体接口2PIN、MCU接口2PIN、主电源1PIN、地1PIN。这样就剩下2个I/O的功能定义被区分开了。所以会有许多的RTC型号。例如 荷电科技的H1208、H8563、H1302、H1307、H1381等等。大家看到后会发现许多RTC在I/O口的定位上有明显的区别,所以PCB设计时需要多注意。

2、RTC通常情况下需要外接32.768kHz晶体,匹配电容、备份电源等元件。RTC除了I/O口的定位不同,还有功能上的区别,比如与MCU的接口,现在常用的是I2C接口(距离短,可以与其他器件共用)还有RAM的数量、静态功耗大小、中断的数量,特别是精度的区别。 RTC的精度可以说与温度有很大的关系,而温度会影响晶体的频率。所以就产生实时时钟的衍生产品:时钟模块(内置晶体、电容、电池等等),其精度可保持在每天误差小于0.50秒。但时钟模块相比时钟芯片而言会高出许多。

3、 RTC最重要的功能是提供到2099年内的日历功能,对于时间来说,无论快慢都是误差,而匹配电容在RTC的外围器件上其他非常重要的作用,它可以适当修正晶体与RTC之间匹配问题。特别是像H1208 这样的RTC,把匹配电容内置,这样就可以保证RTC精度的一致性,不会出现有的RTC走得快,有些又走得慢。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/7591635.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-07
下一篇 2023-04-07

发表评论

登录后才能评论

评论列表(0条)

保存