RTC(Real_Time Clock)为整个电子系统提供时间基准,MCU、MPU、CPU 均离不开 RTC 电路设计,在设计 RTC 单元时应注意哪些事项?常见的 RTC 故障如何解决呢?

 
一、什么是 RTC
实时时钟(Real_Time Clock)简称为 RTC,主要为各种电子系统提供时间基准。通常把集成于芯片内部的 RTC 称为片内 RTC,在芯片外扩展的 RTC 称为外部 RTC。
 
图 1 时间格式
 
二、 RTC 的发展
1、早期 RTC
早期 RTC 常使用 74/54 系列、CC4000 系列及 555 集成电路构建秒脉冲源,再利用分频器、计数器、缓存器等得到分、时、日、月、年的计时信号,最后通过通信口送到处理器处理。由于电路搭建复杂且受器件特性影响较大,这样的 RTC 往往精度差、功耗大且占用大面积 PCB 空间,且这类产品面临“2000 年”的问题(千年虫问题详见百度)。
 
图 2 千年虫问题
 
2、中期 RTC
这一时期的 RTC 出现在 20 世纪 90 年代,由于采用特殊 CMOS 工艺,因此功耗大为降低,典型值约 0.5μA 以下,供电电压仅为 1.4V 以下。为节约宝贵的 IO 接口,通讯口也变为串行方式,出现了诸如三线 SIO/ 四线 SPI,部分产品采用 2 线 I2C 总线。封装上采用 SOP/SSOP 封装,体积大为缩小。得益于半导体技术的发展,这时的 RTC 精度、功耗等特性上得到实质性提高,已具备万年历功能甚至可以做到晶振停振自动检测功能。目前这类 RTC 正被广泛使用。
 
图 3  PCF8583
 
3、新一代 RTC
最新一代 RTC 产品中,除了包含第二代产品所具有的全部功能,更加入了复合功能,如低电压检测,主备用电池切换功能,抗印制板漏电功能,且本身封装更小(高度 0.85mm,面积仅为 2mm*2mm)。
 
三、RTC 使用
RTC 设计推荐方案如图 4 所示,若采用 I2C/SPI 通信的 RTC IC 且已具备 I2C/SPI 驱动程序,RTC 的使用就显得尤为简单,仅需要加上晶振电路就可以工作了。
 
图 4 RTC 硬件电路

 

 
RTC 设计电路简约而不简单,时钟芯片的选择、电路设计、器件放置、阻抗控制、PCB 走线规范均会影响 RTC 的时间基准的稳定性,如图 5 所示为致远电子基于 Cortex-A7 架构的 800MHz 主频的 M6Y2C-256F256LI-T 核心板以及配套硬件开发指南,致远电子每一款核心板均有提供标准的推荐电路,为设计者提供稳定可靠的设计参考。
 
图 5 提供完善硬件支持的核心板
 
软件方面,我们仅以 linux 为例了解下 RTC 的使用。在内核配置中选择与硬件匹配的 RTC 驱动,以生成正确的内核镜像。
 
图 6 启用 PCF8563 RTC 驱动
 
图 7 启用片内 RTC
 
然后结合硬件测试 RTC 功能,使用命令 date  –-help 获取相关指令。hwclock –w 命令将设置的时间同步到硬件,hwclock 命令获取 RTC 时间,判断是否同步成功。
 
图 8 date 命令(部分)
 
图 9 验证保存状态

 

 
四、RTC 问题
1、计时不准
RTC 的主要职责就是提供准确的时间基准,计时不准的 RTC 毫无价值可言。目前部分 MCU 在片内已集成 RTC,实际测试中在电池供电 6 小时环境下片内 RTC 的偏差在 1-2 分钟。因此,若对实时时钟有较高的要求则需优先考虑外扩 RTC,若能支持温度自动补偿则精度更佳,如 DS3231、PCF2129 可以在后备电池供电时根据温度变化自动修改补偿量。
 
图 10 常见 RTC 精度对比(供参考)
 
2、无法读写
RTC 无法读写(通信)时可从软、硬件两方面考虑。软件方面重点考虑通信驱动的问题,在嵌入式 linux 系统中常表现出 RTC 驱动无法检测到 RTC 的存在。比如在启动信息中打印 pcf8563_get_datetime: read error,或者无法对 I2C/SPI 操作。这类问题可以使用带协议解码的示波器排查、验证。
 
图 11  I2C 协议解码
 
硬件方面,以常用的 I2C 为例,最不可忽视的则是上拉电阻的使用。I2C 上拉电阻选择 1K-10K 为宜,可根据通信速率、长度、节点数而定。在节点数多、干扰大时还应在 SDA、SCL 线上串联 100~200ohm 左右的电阻,有效抑制干扰脉冲。另外,所有 IC 都有意外损坏的可能,必要时更换 RTC 芯片。
 
图 12  I2C 上拉电阻使用
 
3、掉电不保存
这种情况最可能的原因是未使用备用电源或备用电源没电了,应检查硬件电源电路。软件方面可能在用户程序、自启动脚本中设置了 RTC,每次重启则将 RTC 恢复为默认值,这时应从启动打印信息或系统日志中排查。