RTC 应用指南
前言
本文档主要介绍RTC的校准方案,确保RTC计时准确。
说明:
未有特殊说明,Hi3516DV500与Hi3519DV500、Hi3516CV608与Hi3516CV610内容完全一致。
与本文档相对应的产品版本如下。
本文档(本指南)主要适用技术支持工程师。
在本文中可能出现下列标志,它们所代表的含义如下。
修订记录累积了每次文档更新的说明。最新版本的文档包含以前所有文档版本的更新内容。
概述
RTC芯片分类
常见的RTC芯片,大致可分为三类:
- 非集成RTC:只有RTC计时电路,不集成晶体、不集成温度补偿电路。这类芯片的计时精度主要取决于外接晶体的精度,而且受温度影响较大。通常在室温环境下,计时精度较高;随着温度升高或降低,计时偏差逐渐增大。
- 集成晶体的RTC:将RTC计时电路与晶体集成,但没有温度补偿电路。这类芯片在室温环境下,计时精度更高。但仍然无法消除温度的影响。
- 集成RTC:将RTC计时电路、晶体、温度补偿电路(含温度传感器)都集成在一颗芯片中,出厂时进行调教。这类RTC的计时精度可以做到很高,且由于温补电路的作用,受环境温度的影响很小。
RTC工作模式
内置RTC可支持固定分频模式:
- 与非集成RTC相同,内置RTC的时钟直接采用外部晶体与振荡电路产生的经过分频后的时钟,工作时分频比固定不变。这种工作模式下,RTC计时精度取决于外接晶体的频率精度,而且受环境温度影响。在非集成RTC这类芯片适用的场景,可以选择内置RTC替代外置非集成RTC,节省一些器件成本。
- HI3519DV500 RTC无内置温度补偿电路,只支持工作在固定分频模式,若RTC时钟的频偏较大,可通过调节RTC的分频系数来微调RTC的时钟频率。对计时精度有严格要求的客户,建议选择集成晶体的RTC,或者带有温度补偿的RTC。
RTC的硬件参考电路
硬件参考电路
RTC的硬件参考电路如图1所示,主要涉及晶体和电容的选择。

选择晶体
选择晶体需要注意以下几个指标:
- 标准负载电容(Load capacitance/CL):晶体的标准负载电容,晶体对负载电容有着严格的规定,只有实际负载电容和晶体的SPEC中的负载电容一致时,晶体频率才能达到标称频率。
-
串联电阻(Series resistance/Rs/ESR):晶体的谐振腔等效串联电阻,当ESR越大,表示晶体越难以驱动。晶体规格中会指出Rs的典型值与最大值。
芯片晶体振荡电路适用于Rs最大值<70KΩ的晶体。
-
最大驱动级别(Max Drive Level/DL):表示晶体最大的振荡幅度,当振荡幅度超过一定幅度时,晶体容易发生损坏。
晶体选型约束,如表1所示。
表 1 晶体选型约束表
选择电容
实际CL的示意图如图1所示。

CL_SPEC=CL1//CL2+Cs1//Cs2+Cs3
Pierce振荡器中,一般将CL1与CL2取相同的值。
其中:
- CL_SPEC为晶体规格书中规定的标准负载电容;
- CL1、CL2为晶体匹配电容;
- Cs1、Cs2、Cs3为寄生电容,一般取值为3~5pF。
以12.5pF的晶体为例,CL1与CL2一般取值为(12.5pF-3pF)*2=19pF。
因为寄生电容随PCB板设计以及晶体和主控选型不同而变化,故亦可确定PCB板设计以后,通过测试频偏来选取不同容值的CL1来获得最接近32.768kHz的输出频率,偏测试方法请参考“晶体相关指标测试方法”章节的相关内容。
Linux内核标准RTC驱动使用说明
编译
支持内核标准RTC驱动,使用前请打开内核RTC驱动选项。
注意:
打开 RTC 选项后没有接 RTC 电源或者 RTC 没有正常供电都会造成内核挂死。
使用
将内核烧写到单板后,启动单板,执行下面命令:
能够查看到RTC设备,表示内核标准RTC驱动正确加载。
内核标准RTC驱动支持ioctl系统调用。
表 1 内核标准RTC驱动 ioctl指令功能描述
-
通过如下命令可设置RTC时间:
-
通过如下命令可获取RTC时间:
晶体相关指标测试方法
频偏测试
- 用频率计通过同轴电缆连接专门的时钟测试脚(TEST_CLK)在U-Boot下,配置寄存器,将管脚复用为CLK_TEST功能,并选择32.768kHz时钟信号输出,测试RTC频率。
- 强烈建议:不要在晶振引脚上用示波器直接测量(一个典型无源探头的电容值在 10pF 之内,输入阻抗大约为 10MΩ。 两个值都会大大影响晶体振荡器的运行方式)。
- 当测得的频率过高时,负载电容的值必须增加,当测得的频率太低时,就要减少负载电容的值。客户可根据自己的产品需求来确定晶体振荡频偏范围。
须知:
在单板设计时需要将TEST_CLK管脚引出测试点,方便后续晶体指标测试。
安全因子测试
增加一个与晶振串联的电阻RQ,如图1所示。增加RQ的值,直到晶体恰好不起振,得到RQ电阻最大值RQmax。(RQmax的值应该由 SMD 电阻进行验证,不建议用可调电位器)。

借助于以上测试,可测得晶体振荡电路振荡裕度 (OA) 和安全因子。
振荡裕度 OA =RQmax + ESR
安全因子 (SF):

表 1 安全因子约束限定条件
注意:要求安全因子至少大于3。
例:晶体ESR为60kΩ,如果串联的额外电阻RQmax为120kΩ,则刚刚达到安全级别。
DL测试
芯片晶体振荡电路内部限制了RTC_XIN与RTC_XOUT管脚振荡的振荡幅度,可以通过以下公式估计电路工作时的实际Drive Level,并确定此值小于晶体规格中规定的最大Drive Level。
DL_actual=0.35*Rs_max*(π*f*VppXOUT*CL)2/2
其中:
- Rs_max为晶体规格书中的串联电阻的最大值。
- f为晶体的谐振频率。
- VppXOUT为示波器测量的RTC_XOUT管脚的peak to peak电压。
- CL为晶体规格书的标准负载电容。
说明:
由于测试电压时示波器探头的寄生电阻和电容效应,会导致测试结果存在偏差,因此以上公式只是较简单的估算DL的方法,如果有需求, 可以找晶体厂商进行更精确测试。
起振时间测试
一般情况下,对于RTC振荡电路而言,介于几百毫秒到几秒钟之间的起振时间均为正常值,晶体振荡器的起振时间取决于不同的因素:
- 频率越低起振时间就越长(相对24MHz系统时钟)。
- 负载电容越大,起振时间就越长。
- 晶体ESR越高起振时间就越长(晶体选型时关注)。
- 振荡裕度 (OA)越大,启动快(也就是说安全因子越大,启动越快)。
- 晶体寄生电容越大,起振时间越长。
鉴于以上因素的影响,测试起振时间前,优先测试安全因子和频偏。
用示波器量测RTC_Xout波形,捕获波形第一个上升沿,量测从第一个上升沿到输出稳定频率的时间,如图1所示。

Q&A
振荡器不振
【现象】
32.768K时钟无输出,RTC计时电路中的秒寄存器值恒定不变。
【分析】
使用示波器探头观察RTC_XIN管脚振荡波形,引起不同的振荡波形的情况有以下几种:
- 如果无振荡波形,可能是晶体损坏。
- 如果有32K左右频率正弦波,且peak to peak幅度小于600mV,则可能是因为CL1与CL2过大,导致振荡电路驱动不足,从而幅度偏小,振荡波形无法通过后续的施密特触发器。
- 如果有200K左右频率的正弦波,且peak to peak幅度小于600mV,则可能是因为CL1与CL2偏小,导致振荡电路振荡到200K频点,且由于200K频点振幅较小,所以无法通过后续的施密特触发器。
【解决】
- 如果确定晶体损坏,请更换晶体。
- 如果为32K左右频率正弦波,幅度不够,请检查CL1与CL2是否偏大,并更换正确的电容。
- 如果为200K左右频率正弦波,幅度不够,请检查CL1与CL2是否偏小,并更换正确的电容。
振荡器的输出频率是200K
【现象】
32.768K时钟输出频率接近200K,RTC计时电路中的秒寄存器值每秒钟增加6。
【分析】
因为32.768K晶体存在6.1倍频的谐振点,如果晶体有异常,则可能振荡到6倍频附近。
【解决】
建议首先检查CL1与CL2是否偏小;如果CL1与CL2为正确值,但振荡频率仍然为200K,则可以在电路中添加如图1所示的Rd,Rd取值为1/(2π x 32768 x CL2),Rd与CL2可以形成一个RC滤波器,降低6.1倍频处的环路增益。

说明:
一般情况不建议增加Rd,如果采用增加Rd的方法,需要确定RTC_XOUT管脚信号幅度不会过小。
振荡频率虽然是32.768K附近,但是频率却不准
【现象】
32.768K时钟输出频率偏离32.768K。
【分析】
振荡电路振荡频率主要由晶体和负载电容共同保证,晶体本身确定了频率的大致范围(即图1所示中的0偏差对应的频率),而实际负载电容的大小则确定了频率的偏移量(即图1所示中的实际频率偏离0的值)。

【解决】
如果频率偏离了32.768K,首先需要确认晶体引脚弯折不会对内部晶体部分施加应力,并确定焊接过程中的温度符合datasheet规范;其次,检查CL1与CL2取值是否正确,并更换正确的电容。




