0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

Linux的RTC回到了1970年,是时光倒流了么?

ZLG致远电子 2024-12-17 11:37 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

导读

RTC是一种用于记录时间的电子设备,广泛应用于各种嵌入式系统中。本文通过实际案例分析RTC在实际应用中的问题并给出实际建议,如时间“归零”、RTC时间误差过大等。

RTC (Real Time Clock):实时时钟,是一个独立的定时器,无论器件处于运行模式、低功耗模式还是复位状态,只要电源电压保持在工作范围内,RTC就会一直工作,实现计时功能。RTC电路虽然简单,但实际应用中还是会出现一些问题,例如时间“归零”、RTC时间误差过大等等,既涉及到硬件方面,也涉及到软件方面。下面结合实际遇到的问题进行一些方案讨论和建议。

另外,在32位Linux系统上,不可避免的会遇到2038年问题,也放在这里一并阐述。

4bd26ad8-bc28-11ef-8084-92fbcf53809c.jpg  从仓库发货的全新产品,为何RTC时间是1970年?

全新产品,开机后系统时间是1970年,有两种可能性:

产品RTC电池没有正确安装,或者锂电池与电池仓之间的隔离塑料垫片没有去掉,RTC没电不工作。

  1. 安装了RTC电池,但RTC电池已经被耗尽,这情况一般出现在较长时间库存产品上。

提示:RTC独立供电的产品,使用前必须正确安装RTC电池,并在第一次开机的时候设置正确的RTC时间。库存产品,不安装RTC电池,或者在安装电池时做好供电隔离。

4bd26ad8-bc28-11ef-8084-92fbcf53809c.jpg  产品运行一段时间后,RTC变成1970年了,引起程序运行异常

正常运行的系统,经过一段时间后内核出现如下提示:

rtc-pcf8563 0-0051: low voltage detected, date/time is not reliable.

说明RTC电池电压已经偏低。这样会导致RTC时间不可靠,从而影响到Linux系统时间的准确性。

PCF8563芯片具有电池电压检测功能,当电压低于0.9V时将无法保证时钟信息的准确性(参考图1),进而导致系统运行异常。

4c0f0510-bc28-11ef-8084-92fbcf53809c.jpg

图1 PCF8563RTC芯片低压检测功能

为了避免出现RTC电池电压偏低的情况,可以做如下方面的考虑:

  • 可考虑用可充电的RTC电池,并设计充电电路;
  • 关闭RTC芯片的CLKOUT功能,降低RTC功耗,延长RTC电池续航时间;
  • 增加超级电容,正常上电时由系统电源供电,系统掉电后由超级电容供电,超级电容耗尽再用锂电池供电。

图2是RTC多电源供电参考原理图。

4c28b280-bc28-11ef-8084-92fbcf53809c.jpg

4c312a6e-bc28-11ef-8084-92fbcf53809c.png

图2 RTC多电源供电参考原理图

设计时需注意以下几点:

RTC_VDD 仅供电给时钟芯片的VDD引脚;

RTC_VDD供电线路上使用的二极管选型低压降、低漏电流

I2C 上拉电阻使用系统电源;

预留CLKOUT 信号测试点,用于调试时钟精度,调试结束后关闭该功能可减少功耗。


4bd26ad8-bc28-11ef-8084-92fbcf53809c.jpg  让人头疼的“2038年”问题

先介绍一下UNIX世界的时间,Unix纪元时间是从协调世界时(UTC)1970年1月1日0点开始算起,到现在的总秒数。这个时间也被称为POSIX时间。Linux沿用UNIX时间,在32位处理器的Linux系统里,定时器是32位的,最大计数是0xFFFFFFFF,而在Linux系统中,rtc_time定义的是秒、分、小时等都是有符号整数。

struct rtc_time { int tm_sec; int tm_min; int tm_hour; int tm_mday; int tm_mon; int tm_year; int tm_wday; int tm_yday; int tm_isdst;};

32位定时器有符号整数最大计数为0x7FFFFFF,换算成十进制是2147483647。

2147483647秒,换算成年的话,是68.09625973490614年,大概是68年零18天。所以,UNIX时间,从1970年1月1日零时起,经过68年零18天后(确切是2038年1月19日中午1107),计数器溢出,RTC将无法正常工作。在32位系统上解决这个问题,需要升级到Linux内核到高版本,同时升级glibc,工作量很大,对一些发布较久的处理器,原厂不一定能提供新版本内核,这是很让人头疼的。如果选用选用64位处理器,跑64位Linux系统就没这个问题了。

升级到64位Linux系统后,RTC计数器最大值为0x7FFFFFFFFFFFFFFF,换算成十进制是9223372036854775807。9223372036854775807秒,换算成年,大约是292亿年,完全不用去考虑RTC时间溢出的问题了。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • Linux
    +关注

    关注

    88

    文章

    11817

    浏览量

    219543
  • 实时时钟
    +关注

    关注

    4

    文章

    363

    浏览量

    68509
  • RTC
    RTC
    +关注

    关注

    2

    文章

    665

    浏览量

    72227
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    深入剖析MAX1970/MAX1971/MAX1972:高性能双路降压调节器的设计与应用

    深入剖析MAX1970/MAX1971/MAX1972:高性能双路降压调节器的设计与应用 在电子设计领域,电源管理芯片的性能直接影响着整个系统的稳定性和效率。今天,我们就来深入探讨一下MAXIM公司
    的头像 发表于 03-21 15:30 602次阅读

    实时时钟(RTC

    在电子设备的精密世界里,实时时钟(RTC)如同一位永不疲倦的守夜人,默默维持着系统的时间秩序。无论主电源中断还是设备进入低功耗休眠,RTC都能依靠备用电源(如锂电池或超级电容)持续运行,确保时间信息
    的头像 发表于 03-12 08:21 231次阅读
    实时时钟(<b class='flag-5'>RTC</b>)

    国产RTC8900高精度时钟模块

    超高精度RTC,内置晶体+温补,功耗1.0μA,针对工控、电力、安防监控、数据中心等领域对RTC精度的较高要求,提供了超高精度RTC系列,精度有±2ppm/±3.4ppm/±5ppm,支持多种封装
    的头像 发表于 02-04 11:27 271次阅读
    国产<b class='flag-5'>RTC</b>8900高精度时钟模块

    Linux/Android系统如何通过RTC实现自动开机?

    在嵌入式开发中,我们经常会遇到这样的需求:设备需要在指定时间自动开机(比如物联网网关定时唤醒采集数据、工业设备按班次启动、服务器远程维护后自动重启)。而实现这一功能的核心,往往离不开RTC(实时时钟) 芯片—— 它能在设备关机后依靠备用电池继续计时,到预设时间后触发硬件开机信号。
    的头像 发表于 02-01 16:59 2007次阅读
    <b class='flag-5'>Linux</b>/Android系统如何通过<b class='flag-5'>RTC</b>实现自动开机?

    LT1970A:高精度可控电流限制的功率运算放大器

    LT1970A:高精度可控电流限制的功率运算放大器 在电子工程师的日常设计中,功率运算放大器是一个关键的组件,它在各种应用场景中都发挥着重要作用。今天要给大家介绍的是 Linear
    的头像 发表于 01-27 14:20 237次阅读

    LT1970:500mA 功率运算放大器的卓越性能与应用解析

    LT1970:500mA 功率运算放大器的卓越性能与应用解析 一、引言 在电子设计领域,功率运算放大器是一种至关重要的元件,它能够为各种电路提供必要的功率放大功能。今天,我们将深入探讨 Linear
    的头像 发表于 01-27 14:20 319次阅读

    瑞芯微(EASY EAI)RV1126B RTC使用

    正常运行。不同的时钟芯片内部机制不一样,但在Linux系统中驱动封装了不同时钟芯片的操作细节,为应用程序提供了统一的时间操作接口。1.1开发板的RTC资源EASYE
    的头像 发表于 01-08 14:30 816次阅读
    瑞芯微(EASY EAI)RV1126B <b class='flag-5'>RTC</b>使用

    浅谈爱普生RTC模块的特点与用途

    实时时钟(RTC)在众多需要精确计时的应用中起着不可或缺的作用,而RTC又不仅仅只是一个用来计时的电子元器件。在以下文章中,将介绍实时时钟(RTC)与RTC模块,同时了解爱普生的
    的头像 发表于 01-04 09:16 804次阅读
    浅谈爱普生<b class='flag-5'>RTC</b>模块的特点与用途

    内部支持的RTC还独立校准,这照比NTP来说优势是什么?

    我看芯源有支持内置独立校准的RTC,这种时钟准?这照比NTP来说,优势在哪里?
    发表于 12-03 07:59

    是谁偷走了我的时间?RTC时间异常的秘密

    嵌入式产品中的RTC(实时时钟)对于维持时间准确性至关重要。然而,实际应用中,我们常常会遇到时间偏差甚至时间回退到1970的问题。今天,我们来探讨这些时间问题的根源及解决方法。RTC
    的头像 发表于 09-02 11:35 2564次阅读
    是谁偷走了我的时间?<b class='flag-5'>RTC</b>时间异常的秘密

    星通时频22周|以时光为尺,丈量频率的精准与热爱

    方寸晶片间雕刻时光的精度,用精准守护每一个设备的“心跳”!22,是8030个日夜的匠心坚守,是8030个日夜的沉淀,是22载与晶振共舞的光阴:累计交付超30亿颗
    的头像 发表于 08-14 11:26 1027次阅读
    星通时频22周<b class='flag-5'>年</b>|以<b class='flag-5'>时光</b>为尺,丈量频率的精准与热爱

    AT32的ERTC与RTC的区别

    的日历逻辑,直接给出、月、日、时、分、秒,大大简化了软件操作和降低了出错概率 。 中断与闹钟功能 RTC :较为基础,通常只提供一个中断请求,用于闹钟功能 。 ERTC :提供多个中断源,包括两个
    发表于 07-11 10:48

    【RA4L1-SENSOR】RTC实时时钟

    在使用SLCDC配置好段码LCD屏之后,则能不用来显示个时间呢 下面展示下配置RTC的流程 时钟源要选择外部低俗时钟,就是图中的Sub-clock Frequency Comparision
    发表于 06-13 12:10

    “耐高温!”RTC时钟芯片+电池的应用案例(二)

    实时时钟,简称RTC,是广泛应用于电子产品的重要元器件。爱普生RTC实时时钟具有高精度、高稳定性和多功能等特点,广泛应用于多个行业。RTC时钟芯片主要功能是保持设备时间的准确运行,即使在主电源断电
    的头像 发表于 06-04 17:35 1973次阅读
    “耐高温!”<b class='flag-5'>RTC</b>时钟芯片+电池的应用案例(二)

    【米尔-RK3562开发板试用评测】rtc测评

    至系统时钟。MYD-YR3562⽀持内部与外部双RTC架构,开发板 系统默认使用外部 RTC。针对常规功耗场景的 RTC功能验证,可通过 Linux 系统标准工 具(如 hwclock
    发表于 05-31 15:04