嵌入式产品中的RTC(实时时钟)对于维持时间准确性至关重要。然而,实际应用中,我们常常会遇到时间偏差甚至时间回退到1970年的问题。今天,我们来探讨这些时间问题的根源及解决方法。
RTC在嵌入式产品中的重要性
在嵌入式产品中,RTC(实时时钟)模块负责维持时间的准确性,确保设备在各种条件下都能保持时间的正确同步。RTC的准确性直接影响数据记录的可靠性、系统协调的效率、安全机制的有效性以及用户体验的满意度。时间不同步可能导致数据记录错误,影响数据的可追溯性和分析;系统协调失败,影响整体系统的运行效率;安全机制失效,增加安全风险;以及用户体验下降,影响用户对设备的信任和使用体验。因此,确保RTC的准确性和可靠性是嵌入式系统设计中的一个重要环节。
然而,在实际应用中,我们常常会遇到一些不尽如人意的情况,比如时间偏差,甚至是时间回退到1970年。那么,是谁偷走了我们的时间呢?
RTC时间偏差的原因分析
在Linux系统启动过程中,系统会检测并挂载RTC模块。挂载完成后,系统会自动从外部RTC芯片中读取时间,并将其设置为系统时间。此后,除非通过相关命令控制RTC的读写,操作系统通常不会再次从RTC中获取或同步时间。那么,为什么重新上电后,时间就不对了呢?可能的原因包括:
外部RTC供电问题:如果外部RTC没有可靠的电源供电,可能会导致亏电或接触不良,从而使RTC时间复位到默认值(通常是1970年)。
RTC电路设计问题:如果RTC的精准匹配电路设计不合理,可能会导致时间偏差。
RTC驱动问题:如果RTC驱动没有正确配置,系统可能无法从RTC芯片中正确获取时间。
RTC设计与使用最佳实践
1. 硬件设计推荐方案
RTC设计推荐方案如图2所示,若采用I2C/SPI通信的RTC IC且已具备I2C/SPI驱动程序,RTC的使用就显得尤为简单,仅需要加上晶振电路就可以工作了。
图2 RTC硬件电路
RTC设计电路简约而不简单,时钟芯片的选择、电路设计、器件放置、阻抗控制、PCB走线规范均会影响RTC的时间基准的稳定性,如图3所示为ZLG致远电子基于Cortex-A7架构的800MHz主频的M6Y2C-256F256LI-T核心板以及配套硬件开发指南,ZLG致远电子每一款核心板均有提供标准的推荐电路,为设计者提供稳定可靠的设计参考。
图3 提供完善硬件支持的核心板
2. 软件配置与验证
以linux为例了解下RTC的使用。在内核配置中选择与硬件匹配的RTC驱动,以生成正确的内核镜像。
图4 启用PCF8563 RTC驱动
图5 启用片内RTC
然后结合硬件测试RTC功能,使用命令date –-help获取相关指令。hwclock –w命令将设置的时间同步到硬件,hwclock命令获取RTC时间,判断是否同步成功。