RM新时代网站-首页

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

Linux的RTC回到了1970年,是時(shí)光倒流了么?

ZLG致遠(yuǎn)電子 ? 2024-12-17 11:37 ? 次閱讀

導(dǎo)讀

RTC是一種用于記錄時(shí)間的電子設(shè)備,廣泛應(yīng)用于各種嵌入式系統(tǒng)中。本文通過(guò)實(shí)際案例分析RTC在實(shí)際應(yīng)用中的問(wèn)題并給出實(shí)際建議,如時(shí)間“歸零”、RTC時(shí)間誤差過(guò)大等。

RTC (Real Time Clock):實(shí)時(shí)時(shí)鐘,是一個(gè)獨(dú)立的定時(shí)器,無(wú)論器件處于運(yùn)行模式、低功耗模式還是復(fù)位狀態(tài),只要電源電壓保持在工作范圍內(nèi),RTC就會(huì)一直工作,實(shí)現(xiàn)計(jì)時(shí)功能。RTC電路雖然簡(jiǎn)單,但實(shí)際應(yīng)用中還是會(huì)出現(xiàn)一些問(wèn)題,例如時(shí)間“歸零”、RTC時(shí)間誤差過(guò)大等等,既涉及到硬件方面,也涉及到軟件方面。下面結(jié)合實(shí)際遇到的問(wèn)題進(jìn)行一些方案討論和建議。

另外,在32位Linux系統(tǒng)上,不可避免的會(huì)遇到2038年問(wèn)題,也放在這里一并闡述。

4bd26ad8-bc28-11ef-8084-92fbcf53809c.jpg ?從倉(cāng)庫(kù)發(fā)貨的全新產(chǎn)品,為何RTC時(shí)間是1970年?

全新產(chǎn)品,開機(jī)后系統(tǒng)時(shí)間是1970年,有兩種可能性:

產(chǎn)品RTC電池沒(méi)有正確安裝,或者鋰電池與電池倉(cāng)之間的隔離塑料墊片沒(méi)有去掉,RTC沒(méi)電不工作。

  1. 安裝了RTC電池,但RTC電池已經(jīng)被耗盡,這情況一般出現(xiàn)在較長(zhǎng)時(shí)間庫(kù)存產(chǎn)品上。

提示:RTC獨(dú)立供電的產(chǎn)品,使用前必須正確安裝RTC電池,并在第一次開機(jī)的時(shí)候設(shè)置正確的RTC時(shí)間。庫(kù)存產(chǎn)品,不安裝RTC電池,或者在安裝電池時(shí)做好供電隔離。

4bd26ad8-bc28-11ef-8084-92fbcf53809c.jpg ?產(chǎn)品運(yùn)行一段時(shí)間后,RTC變成1970年了,引起程序運(yùn)行異常

正常運(yùn)行的系統(tǒng),經(jīng)過(guò)一段時(shí)間后內(nèi)核出現(xiàn)如下提示:

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

說(shuō)明RTC電池電壓已經(jīng)偏低。這樣會(huì)導(dǎo)致RTC時(shí)間不可靠,從而影響到Linux系統(tǒng)時(shí)間的準(zhǔn)確性。

PCF8563芯片具有電池電壓檢測(cè)功能,當(dāng)電壓低于0.9V時(shí)將無(wú)法保證時(shí)鐘信息的準(zhǔn)確性(參考圖1),進(jìn)而導(dǎo)致系統(tǒng)運(yùn)行異常。

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

圖1 PCF8563RTC芯片低壓檢測(cè)功能

為了避免出現(xiàn)RTC電池電壓偏低的情況,可以做如下方面的考慮:

  • 可考慮用可充電的RTC電池,并設(shè)計(jì)充電電路;
  • 關(guān)閉RTC芯片的CLKOUT功能,降低RTC功耗,延長(zhǎng)RTC電池續(xù)航時(shí)間;
  • 增加超級(jí)電容,正常上電時(shí)由系統(tǒng)電源供電,系統(tǒng)掉電后由超級(jí)電容供電,超級(jí)電容耗盡再用鋰電池供電。

圖2是RTC多電源供電參考原理圖。

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

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

圖2 RTC多電源供電參考原理圖

設(shè)計(jì)時(shí)需注意以下幾點(diǎn):

RTC_VDD 僅供電給時(shí)鐘芯片的VDD引腳;

RTC_VDD供電線路上使用的二極管選型低壓降、低漏電流

I2C 上拉電阻使用系統(tǒng)電源;

預(yù)留CLKOUT 信號(hào)測(cè)試點(diǎn),用于調(diào)試時(shí)鐘精度,調(diào)試結(jié)束后關(guān)閉該功能可減少功耗。


4bd26ad8-bc28-11ef-8084-92fbcf53809c.jpg ?讓人頭疼的“2038年”問(wèn)題

先介紹一下UNIX世界的時(shí)間,Unix紀(jì)元時(shí)間是從協(xié)調(diào)世界時(shí)(UTC)1970年1月1日0點(diǎn)開始算起,到現(xiàn)在的總秒數(shù)。這個(gè)時(shí)間也被稱為POSIX時(shí)間。Linux沿用UNIX時(shí)間,在32位處理器的Linux系統(tǒng)里,定時(shí)器是32位的,最大計(jì)數(shù)是0xFFFFFFFF,而在Linux系統(tǒng)中,rtc_time定義的是秒、分、小時(shí)等都是有符號(hào)整數(shù)。

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位定時(shí)器有符號(hào)整數(shù)最大計(jì)數(shù)為0x7FFFFFF,換算成十進(jìn)制是2147483647。

2147483647秒,換算成年的話,是68.09625973490614年,大概是68年零18天。所以,UNIX時(shí)間,從1970年1月1日零時(shí)起,經(jīng)過(guò)68年零18天后(確切是2038年1月19日中午1107),計(jì)數(shù)器溢出,RTC將無(wú)法正常工作。在32位系統(tǒng)上解決這個(gè)問(wèn)題,需要升級(jí)到Linux內(nèi)核到高版本,同時(shí)升級(jí)glibc,工作量很大,對(duì)一些發(fā)布較久的處理器,原廠不一定能提供新版本內(nèi)核,這是很讓人頭疼的。如果選用選用64位處理器,跑64位Linux系統(tǒng)就沒(méi)這個(gè)問(wèn)題了。

升級(jí)到64位Linux系統(tǒng)后,RTC計(jì)數(shù)器最大值為0x7FFFFFFFFFFFFFFF,換算成十進(jìn)制是9223372036854775807。9223372036854775807秒,換算成年,大約是292億年,完全不用去考慮RTC時(shí)間溢出的問(wèn)題了。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • Linux
    +關(guān)注

    關(guān)注

    87

    文章

    11292

    瀏覽量

    209318
  • 實(shí)時(shí)時(shí)鐘

    關(guān)注

    4

    文章

    245

    瀏覽量

    65767
  • RTC
    RTC
    +關(guān)注

    關(guān)注

    2

    文章

    538

    瀏覽量

    66458
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    嵌入式學(xué)習(xí)-飛凌嵌入式ElfBoard ELF 1板卡-shell編程入門之提取字符并設(shè)置rtc時(shí)間

    ,主要分為以下幾個(gè)步驟: 一、使用echo命令輸出一段提示信息,表示開始測(cè)試RTC功能。 二、使用date命令設(shè)置系統(tǒng)時(shí)間為20231月1日0時(shí)0分0秒。 三、使用hwclock命令將系統(tǒng)時(shí)間寫入
    發(fā)表于 12-12 17:26

    飛凌嵌入式ElfBoard ELF 1板卡-shell編程入門之提取字符并設(shè)置rtc時(shí)間

    控制和條件處理; 五、支持與其他Unix及Linux命令行工具配合使用; awk的語(yǔ)法結(jié)構(gòu)比較簡(jiǎn)單,它的基本語(yǔ)法格式如下: awk \'pattern {action}\' filename 設(shè)置rtc時(shí)間
    發(fā)表于 12-11 16:49

    RTC與WebRTC的主要區(qū)別

    在數(shù)字通信領(lǐng)域,實(shí)時(shí)通信(RTC)和WebRTC是兩個(gè)經(jīng)常被提及的術(shù)語(yǔ)。它們都旨在提供即時(shí)的、高質(zhì)量的通信體驗(yàn),但它們?cè)趯?shí)現(xiàn)方式、應(yīng)用場(chǎng)景和技術(shù)支持上有所不同。 1. 定義與起源 1.1 實(shí)時(shí)通信
    的頭像 發(fā)表于 12-11 15:41 ?249次閱讀

    RTC技術(shù)在實(shí)時(shí)通信中的應(yīng)用 RTC與VoIP的區(qū)別

    在數(shù)字化時(shí)代,實(shí)時(shí)通信(RTC)技術(shù)已經(jīng)成為我們?nèi)粘I詈凸ぷ髦胁豢苫蛉钡囊徊糠?。從視頻會(huì)議到在線教育,從遠(yuǎn)程醫(yī)療到社交網(wǎng)絡(luò),RTC技術(shù)都在發(fā)揮著重要作用。 一、RTC技術(shù)在實(shí)時(shí)通信
    的頭像 發(fā)表于 12-11 15:38 ?384次閱讀

    提升效率:RTC時(shí)鐘實(shí)用設(shè)置

    今天來(lái)給大家講解的是RTC時(shí)鐘實(shí)用性,提升絕對(duì)的效率。
    的頭像 發(fā)表于 11-04 16:35 ?773次閱讀
    提升效率:<b class='flag-5'>RTC</b>時(shí)鐘實(shí)用設(shè)置

    什么是RTC模塊?

    什么是“RTC”?“RTC”是實(shí)時(shí)時(shí)鐘的縮寫,它是一種測(cè)量時(shí)間的電子設(shè)備。什么是“RTC模塊”?“RTC模塊”是一個(gè)集成了RTCIC、振蕩器電路和主時(shí)鐘的單封裝模塊。無(wú)需自行設(shè)計(jì)振蕩器
    的頭像 發(fā)表于 07-24 14:14 ?400次閱讀
    什么是<b class='flag-5'>RTC</b>模塊?

    esp32c3的rtc gpio不足怎么解決?

    關(guān)于esp32c3,我看io0-io3不建議使用,那么rtc gpio 就只有io4和io5了,但我需要用2個(gè)rtc io和一個(gè)有adc功能的io,有什么辦法?多謝。
    發(fā)表于 06-18 06:38

    不修改menuconfig的話,有哪個(gè)API可以修改rtc時(shí)鐘源

    rtc_clk_slow_freq_set(RTC_SLOW_FREQ_32K_XTAL);)來(lái)設(shè)置時(shí)鐘源的時(shí)候,一直不能喚醒。 不修改menuconfig的話,有哪個(gè)API可以修改rtc 時(shí)鐘源
    發(fā)表于 06-14 08:08

    使用STM8L做內(nèi)部RTC做時(shí)鐘,時(shí)鐘計(jì)時(shí)計(jì)到了超過(guò)24時(shí)怎么解決?

    我在使用STM8L做內(nèi)部RTC做時(shí)鐘的時(shí)候,發(fā)現(xiàn)了一個(gè)問(wèn)題。時(shí)鐘計(jì)時(shí)計(jì)到了超過(guò)24時(shí)。昨天下午我設(shè)置了一個(gè)初始時(shí)間,今天早上8:19的時(shí)候讀取STM8內(nèi)部RTC時(shí)間顯示的是 2018.8.2932:19:05時(shí)間計(jì)時(shí)
    發(fā)表于 04-19 06:59

    STM32F103 RTC日期讀取不對(duì)怎么解決?

    STM32F103 RTC日期讀取不對(duì)問(wèn)題,有沒(méi)有什么辦法解決?這個(gè)問(wèn)題究竟是STM32的庫(kù)本身有問(wèn)題還是其他什么原因呢?如果是庫(kù)的問(wèn)題,難道ST公司這么多年了,一直都不管
    發(fā)表于 04-16 07:08

    STM32L431 RTC時(shí)間混亂問(wèn)題如何解決?

    我現(xiàn)在在用STM32L431做門鎖,5號(hào)電池供電(有紐扣電池),五百臺(tái)門鎖生產(chǎn)時(shí)寫入讀出正常(2022),從工廠運(yùn)回公司,抽檢發(fā)現(xiàn)某臺(tái)門鎖的RTC時(shí)間混亂了,變成了2073,斷電重啟后還是
    發(fā)表于 03-22 07:41

    RTC電池壽命的評(píng)估考慮因素

    本案例是一個(gè)帶RTC功能的工業(yè)產(chǎn)品,RTC部分的供電電路如下下圖,產(chǎn)品發(fā)往市場(chǎng)半年以后,就提示更換RTC電池,遠(yuǎn)遠(yuǎn)低于設(shè)計(jì)壽命5。
    發(fā)表于 03-15 10:29 ?637次閱讀
    <b class='flag-5'>RTC</b>電池壽命的評(píng)估考慮因素

    蘋果 Lightning 數(shù)據(jù)線芯片IC(高耐壓防倒流)APS0217數(shù)據(jù)手冊(cè)

    電子發(fā)燒友網(wǎng)站提供《蘋果 Lightning 數(shù)據(jù)線芯片IC(高耐壓防倒流)APS0217數(shù)據(jù)手冊(cè).pdf》資料免費(fèi)下載
    發(fā)表于 01-15 15:04 ?8次下載

    倒流數(shù)據(jù)線芯片HX519 數(shù)據(jù)手冊(cè)

    電子發(fā)燒友網(wǎng)站提供《防倒流數(shù)據(jù)線芯片HX519 數(shù)據(jù)手冊(cè).pdf》資料免費(fèi)下載
    發(fā)表于 01-12 15:34 ?4次下載

    RTC第二個(gè)功能和應(yīng)用程序

    一般RTC模塊設(shè)備管理時(shí)間日歷、計(jì)時(shí)器等。從到二。一些愛普生RTC模塊可以通過(guò)使用來(lái)自32768 Hz的分割頻率來(lái)管理次第二功能。本文件描述了RTC模塊的三個(gè)具體的應(yīng)用程序。(表1)
    發(fā)表于 01-03 15:45 ?0次下載
    RM新时代网站-首页