<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 如何正確設(shè)計(jì)實(shí)時(shí)時(shí)鐘RTC?

          如何正確設(shè)計(jì)實(shí)時(shí)時(shí)鐘RTC?

          作者:ZLG致遠(yuǎn)電子 時(shí)間:2018-04-12 來源:電子產(chǎn)品世界 收藏

            (Real_Time Clock)為整個(gè)電子系統(tǒng)提供時(shí)間基準(zhǔn),、MPU、CPU均離不開電路設(shè)計(jì),在設(shè)計(jì)單元時(shí)應(yīng)注意哪些事項(xiàng)?常見的RTC故障如何解決呢?

          本文引用地址:http://www.ex-cimer.com/article/201804/378274.htm

            一、什么是RTC

            實(shí)時(shí)時(shí)鐘(Real_Time Clock)簡稱為RTC,主要為各種電子系統(tǒng)提供時(shí)間基準(zhǔn)。通常把集成于芯片內(nèi)部的RTC稱為片內(nèi)RTC,在芯片外擴(kuò)展的RTC稱為外部RTC。

              

            圖1 時(shí)間格式

            二、 RTC的發(fā)展

            1、早期RTC

            早期RTC常使用74/54系列、CC4000系列及555集成電路構(gòu)建秒脈沖源,再利用分頻器、計(jì)數(shù)器、緩存器等得到分、時(shí)、日、月、年的計(jì)時(shí)信號(hào),最后通過通信口送到處理器處理。由于電路搭建復(fù)雜且受器件特性影響較大,這樣的RTC往往精度差、功耗大且占用大面積PCB空間,且這類產(chǎn)品面臨“2000年”的問題(千年蟲問題詳見百度)。

              

            圖2 千年蟲問題

            2、中期RTC

            這一時(shí)期的RTC出現(xiàn)在20世紀(jì)90年代,由于采用特殊CMOS工藝,因此功耗大為降低,典型值約0.5μA以下,供電電壓僅為1.4V以下。為節(jié)約寶貴的IO接口,通訊口也變?yōu)榇蟹绞?,出現(xiàn)了諸如三線SIO/四線SPI,部分產(chǎn)品采用2線I2C總線。封裝上采用SOP/SSOP封裝,體積大為縮小。得益于半導(dǎo)體技術(shù)的發(fā)展,這時(shí)的RTC精度、功耗等特性上得到實(shí)質(zhì)性提高,已具備萬年歷功能甚至可以做到晶振停振自動(dòng)檢測功能。目前這類RTC正被廣泛使用。

              

            圖3 PCF8583

            3、新一代RTC

            最新一代RTC產(chǎn)品中,除了包含第二代產(chǎn)品所具有的全部功能,更加入了復(fù)合功能,如低電壓檢測,主備用電池切換功能,抗印制板漏電功能,且本身封裝更小(高度0.85mm,面積僅為2mm*2mm)。

            三、RTC使用

            RTC設(shè)計(jì)推薦方案如圖4所示,若采用I2C/SPI通信的RTC IC且已具備I2C/SPI驅(qū)動(dòng)程序,RTC的使用就顯得尤為簡單,僅需要加上晶振電路就可以工作了。

              

            圖4 RTC硬件電路

            RTC設(shè)計(jì)電路簡約而不簡單,時(shí)鐘芯片的選擇、電路設(shè)計(jì)、器件放置、阻抗控制、PCB走線規(guī)范均會(huì)影響RTC的時(shí)間基準(zhǔn)的穩(wěn)定性,如圖5所示為致遠(yuǎn)電子基于Cortex-A7架構(gòu)的800MHz主頻的M6Y2C-256F256LI-T核心板以及配套硬件開發(fā)指南,致遠(yuǎn)電子每一款核心板均有提供標(biāo)準(zhǔn)的推薦電路,為設(shè)計(jì)者提供穩(wěn)定可靠的設(shè)計(jì)參考。

              

            圖5 提供完善硬件支持的核心板

            軟件方面,我們僅以linux為例了解下RTC的使用。在內(nèi)核配置中選擇與硬件匹配的RTC驅(qū)動(dòng),以生成正確的內(nèi)核鏡像。

              

            圖6 啟用PCF8563 RTC驅(qū)動(dòng)

              

            圖7 啟用片內(nèi)RTC

            然后結(jié)合硬件測試RTC功能,使用命令date –-help獲取相關(guān)指令。hwclock –w命令將設(shè)置的時(shí)間同步到硬件,hwclock命令獲取RTC時(shí)間,判斷是否同步成功。

              

            圖8 date命令(部分)

              

            圖9 驗(yàn)證保存狀態(tài)

            四、RTC問題

            1、計(jì)時(shí)不準(zhǔn)

            RTC的主要職責(zé)就是提供準(zhǔn)確的時(shí)間基準(zhǔn),計(jì)時(shí)不準(zhǔn)的RTC毫無價(jià)值可言。目前部分在片內(nèi)已集成RTC,實(shí)際測試中在電池供電6小時(shí)環(huán)境下片內(nèi)RTC的偏差在1-2分鐘。因此,若對(duì)實(shí)時(shí)時(shí)鐘有較高的要求則需優(yōu)先考慮外擴(kuò)RTC,若能支持溫度自動(dòng)補(bǔ)償則精度更佳,如DS3231、PCF2129可以在后備電池供電時(shí)根據(jù)溫度變化自動(dòng)修改補(bǔ)償量。

              

            圖10 常見RTC精度對(duì)比(供參考)

            2、無法讀寫

            RTC無法讀寫(通信)時(shí)可從軟、硬件兩方面考慮。軟件方面重點(diǎn)考慮通信驅(qū)動(dòng)的問題,在嵌入式linux系統(tǒng)中常表現(xiàn)出RTC驅(qū)動(dòng)無法檢測到RTC的存在。比如在啟動(dòng)信息中打印pcf8563_get_datetime: read error,或者無法對(duì)I2C/SPI操作。這類問題可以使用帶協(xié)議解碼的示波器排查、驗(yàn)證。

              

            圖11 I2C協(xié)議解碼

            硬件方面,以常用的I2C為例,最不可忽視的則是上拉電阻的使用。I2C上拉電阻選擇1K-10K為宜,可根據(jù)通信速率、長度、節(jié)點(diǎn)數(shù)而定。在節(jié)點(diǎn)數(shù)多、干擾大時(shí)還應(yīng)在SDA、SCL線上串聯(lián)100~200ohm左右的電阻,有效抑制干擾脈沖。另外,所有IC都有意外損壞的可能,必要時(shí)更換RTC芯片。

              

            圖12 I2C上拉電阻使用

            3、掉電不保存

            這種情況最可能的原因是未使用備用電源或備用電源沒電了,應(yīng)檢查硬件電源電路。軟件方面可能在用戶程序、自啟動(dòng)腳本中設(shè)置了RTC,每次重啟則將RTC恢復(fù)為默認(rèn)值,這時(shí)應(yīng)從啟動(dòng)打印信息或系統(tǒng)日志中排查。

           



          關(guān)鍵詞: RTC MCU

          評(píng)論


          相關(guān)推薦

          技術(shù)專區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();