历史上的今天
今天是:2025年04月19日(星期六)
2018年04月19日 | 如何正确设计实时时钟RTC?
2018-04-19 来源:ZLG致远电子
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恢复为默认值,这时应从启动打印信息或系统日志中排查。
史海拾趣
|
一、开关元件 开关、干簧管和霍耳元件都是用来控制线路的通断的器件。不同的是开关一般是人工手动操作的,而干簧管和霍克元件则是通过磁信号来控制线路的通和断。 1.开关 在手机中使用的开关通常是薄膜按键开关,它由触点和触片组成。按键的两个 ...… 查看全部问答> |
|
单脉冲序列对双激式开关电源变压器铁心的磁化开关电源原理与设计(连载53) 2-1-1-4.脉冲序列对双激式开关电源变压器铁心的磁化 双激式变压器与单激式变压器的区别主要是两者输入电压的参数不一样。单激式变压器输入的电压是单极性直流脉冲,而双激式变压器输入的电压是双极性交流脉冲。为了简单起见,我们把双激式变压器 ...… 查看全部问答> |
|
我做摄像头的数据采集,用CreateFile打开设备,然后调用DeviceIoControl函数,第二个参数需要的是控制CODE,这个CODE需要驱动来提供?不是标准调用吧。如果驱动没有提供读数据的控制CODE,那我是不是就没有办法用DeviceIoControl得到数据了?… 查看全部问答> |
|
我是青岛的目前原来是从事应用程序开发的,想转型做WinCE BSP开发,现在已经辞职在家专心学习WinCE BSP开发,现在实验用的板子是飞凌的OK2440III。由于在青岛没有找到这方面的朋友,所以许多问题只能靠自己研究或是到网上查资料。现在我有下面的一 ...… 查看全部问答> |
|
driverStudio 生成的驱动程序 实现 IO读写功能 驱动程序代码中两个操作如下: NTSTATUS RW6070Device::RW6070_IOCTL_800_Handler(KIrp I) { NTSTATUS status = STATUS_SUCCESS; //t … 查看全部问答> |
|
小弟手上的开放板的外部晶振是25M,串口通信,波特率为115200时,BRR是0x0135. 想问下0x0135是怎么算出来的?看了STM32的数据手册,没看懂。… 查看全部问答> |
|
RT-Thread开源实时操作系统/STM32F103VB0.3.0b3版本 这个版本更新有些多,RT-Thread/STM32F103VB 0.3.0 beta3更改记录:- 内核,添加IAR EWARM 5.x工程,在内核定义中做相应的平台定义;- 添加文件系统组件DFS,DFS是一套虚拟文件系统(类似Linux的VFS,但几乎不占 ...… 查看全部问答> |
|
有关2812的资料其寄存器都没有地址,所见的都是C语言的头文件,用了结构体和共用体,找不出起物理地址了,想用一段汇编,找不到外设和寄存器的地址,没法编那.谁有这方面的资料?或给指点一下… 查看全部问答> |




