RTC Q&A

Q1:为什么偶尔出现RTC时间会恢复到default值?

一般是因为电池供电不稳的原因,驱动强行把RTC时间设置到default值,这个default值可以在dtsi里面配置,例如在kernel/arch/arm/boot/dts/mercury6.dtsi文件设置如下:

则设置的为 1983/10/5 00:00:00

假如没配置的话, default值就是1970/1/1 00:00:00

设置的值顺序(秒  分  时  日  月份  年份  星期  天数),说明如下:

Q2:为什么我没有添加rtc供电的电池,reboot重启,或者断电重启后,rtc时间会同步呢?

在没有电池的情况下,断电,rtc是肯定会回到default状态的,如果断电rtc照样运行,那要排查一下硬件电路,是否有电容之类的,短暂存储和供电给rtc运行了,断电久一点,应该就不会走了。

至于reboot命令,本身电源就没有断开,reboot期间,rtc时间仍然可以走。

Q3:为什么hwclock写rtc异常?如下图

先检查kernel config有没有打开:

再检查dtsi(kernel/arch/arm/boot/dts/mercury6.dtsi)有没有打开:

如果都打开了,那请确认一下芯片内部没有内置rtc。

Q4:为什么kernel下执行"hwclock"后,系统会断电?

请确保kernel中已打开了如下两个驱动:

CONFIG_RTCPWC_SW_RST_OFF=y
CONFIG_RTCPWC_INNER_EHHE=y