導讀
RTC是一種用于記錄時間的電子設備,廣泛應用于各種嵌入式系統中。本文通過實際案例分析RTC在實際應用中的問題并給出實際建議,如時間“歸零”、RTC時間誤差過大等。
RTC (Real Time Clock):實時時鐘,是一個獨立的定時器,無論器件處于運行模式、低功耗模式還是復位狀態,只要電源電壓保持在工作范圍內,RTC就會一直工作,實現計時功能。RTC電路雖然簡單,但實際應用中還是會出現一些問題,例如時間“歸零”、RTC時間誤差過大等等,既涉及到硬件方面,也涉及到軟件方面。下面結合實際遇到的問題進行一些方案討論和建議。
另外,在32位Linux系統上,不可避免的會遇到2038年問題,也放在這里一并闡述。
?從倉庫發貨的全新產品,為何RTC時間是1970年?
全新產品,開機后系統時間是1970年,有兩種可能性:
產品RTC電池沒有正確安裝,或者鋰電池與電池倉之間的隔離塑料墊片沒有去掉,RTC沒電不工作。
- 安裝了RTC電池,但RTC電池已經被耗盡,這情況一般出現在較長時間庫存產品上。
提示:RTC獨立供電的產品,使用前必須正確安裝RTC電池,并在第一次開機的時候設置正確的RTC時間。庫存產品,不安裝RTC電池,或者在安裝電池時做好供電隔離。
?產品運行一段時間后,RTC變成1970年了,引起程序運行異常
正常運行的系統,經過一段時間后內核出現如下提示:
rtc-pcf8563 0-0051: low voltage detected, date/time is not reliable.
說明RTC電池電壓已經偏低。這樣會導致RTC時間不可靠,從而影響到Linux系統時間的準確性。
PCF8563芯片具有電池電壓檢測功能,當電壓低于0.9V時將無法保證時鐘信息的準確性(參考圖1),進而導致系統運行異常。

圖1 PCF8563RTC芯片低壓檢測功能
為了避免出現RTC電池電壓偏低的情況,可以做如下方面的考慮:
- 可考慮用可充電的RTC電池,并設計充電電路;
- 關閉RTC芯片的CLKOUT功能,降低RTC功耗,延長RTC電池續航時間;
- 增加超級電容,正常上電時由系統電源供電,系統掉電后由超級電容供電,超級電容耗盡再用鋰電池供電。
圖2是RTC多電源供電參考原理圖。

圖2 RTC多電源供電參考原理圖
設計時需注意以下幾點:
RTC_VDD 僅供電給時鐘芯片的VDD引腳;
預留CLKOUT 信號測試點,用于調試時鐘精度,調試結束后關閉該功能可減少功耗。
?讓人頭疼的“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
+關注
關注
87文章
11459瀏覽量
212790 -
實時時鐘
+關注
關注
4文章
302瀏覽量
66808 -
RTC
+關注
關注
2文章
608瀏覽量
68300
發布評論請先 登錄
“耐高溫!”RTC時鐘芯片+電池的應用案例(二)

【米爾-RK3562開發板試用評測】rtc測評
小安派BW21-CBV-Kit教程——基礎RTC例程與簡易RTC鬧鐘

RTC芯片有Linux PCA2131驅動程序嗎?
如何利用RTC外設實現萬年歷功能
飛凌嵌入式ElfBoard ELF 1板卡-開發板適配之I2C-RTC
RTC時鐘芯片+電池的應用案例(一)

嵌入式學習-飛凌嵌入式ElfBoard ELF 1板卡-shell編程入門之提取字符并設置rtc時間
飛凌嵌入式ElfBoard ELF 1板卡-shell編程入門之提取字符并設置rtc時間
RTC與WebRTC的主要區別
RTC技術在實時通信中的應用 RTC與VoIP的區別
什么是RTC模塊?

評論