摘要:本文介紹了兩個固件,用作Teridian? 71M6521電表IC的演示程序,版本號為4.8p。這些固件有助于改善71M6521在功率模式之間轉換時的可靠性,并在器件恢復工作模式后提供適當?shù)?a href="http://www.1cnz.cn/tags/實時時鐘/" target="_blank">實時時鐘(RTC)修正。文章討論了程序修改及設計細節(jié),便于用戶對現(xiàn)有固件進行必要的更新。?
?
概述
微調“保險絲”
微調“保險絲”實際上指的是一組非易失(NV)存儲器,在Maxim的Teridian電表IC生產(chǎn)過程中用于調整IC的模擬和數(shù)字特征參數(shù)。器件出廠后,微調“保險絲”內存儲的內容不再改變,用于后續(xù)產(chǎn)品中的參數(shù)補償,例如,用來微調VREF電壓,使其穩(wěn)定在1.195 VDC ,誤差不超過±1mV;還可用于調整VBIAS內部電壓,使其穩(wěn)定在目標值。
IC工作期間,按照固定的時間間隔讀取微調“保險絲”的數(shù)值,由IC內部的硬件電路進行適當?shù)膮?shù)調整。從“保險絲”讀取的數(shù)據(jù)送入硬件控制電路和位于I/O RAM的保險絲寄存器(圖1)。71M6521系列產(chǎn)品中共包含7個獨立的微調“保險絲”數(shù)值,向I/O RAM寄存器0x20FD (TRIMSEL)寫入1-7之間的任何數(shù)值,可從I/O RAM寄存器0x20FF (TRIM)中讀取相應的“保險絲”數(shù)據(jù)。
圖1. 微調保險絲工作原理
錯誤讀取微調“保險絲”
71M6521 IC支持三種低功耗模式(休眠模式、LCD單獨有效模式以及關斷模式)。低功耗模式下,無法支持IC正常工作的電流消耗。
在極端的電磁干擾(EMI)環(huán)境下,或者是當電源超乎尋常地反復斷電的情況下,可能會影響到“保險絲”數(shù)據(jù)的讀取和參數(shù)調整,錯誤地讀取到某個“保險絲”數(shù)據(jù)。發(fā)生這種情況時,可能導致幾種錯誤結果。當電源發(fā)生高速“振蕩”,使得71M6521在工作模式與關斷模式之間反復切換時,將會提高器件故障的概率,當交流電緩慢爬升、下降,而后續(xù)使用的是“軟”電源時,很容易發(fā)生這種狀況。電源振蕩導致71M6521在正常供電(正常工作模式)和低功耗(關斷)模式之間頻繁切換,由于“保險絲”讀取錯誤導致器件故障的可能性非常小,只有當電表在長達若干天,甚至幾個星期的時間內頻繁斷電時,才有可能看到故障狀況。
“保險絲”讀取錯誤導致IC工作故障可能有幾種不同的表現(xiàn)形式,具體取決于錯誤讀取的“保險絲”數(shù)據(jù)。故障現(xiàn)象可能是以下幾種情況之一:
MPU軟件運行在未知狀態(tài),但依據(jù)固件的不同,有些情況下可能終止內部時鐘,使看門狗定時器無法復位電表。
產(chǎn)生未知的內部電源電壓和檢測門限,這種情況下可能導致外部電源作用到V1引腳,在喚醒時鐘尚未建立的前提下進入休眠模式。有些情況下,不恰當?shù)爻跏蓟瘍炔侩娫催_到一個超時限制時,可能導致RTC計時錯誤。
在電表中從根本上消除EMI可能不太現(xiàn)實,但是,在器件進入關斷模式時通過測試IC的微調“保險絲”,固件可以檢測并避免發(fā)生上述故障。
新版本演示程序解決的另一問題是RTC時間偏移的修正。早期軟件中所包含的RTC程序集成了長期抖動導致RTC偏差的修正,復位后進行調整。
改進程序的應用示例
本應用筆記介紹的程序支持所有版本的71M6521,包括71M6521BE、71M6521DE和71M6521FE。Maxim推薦在帶有備份電池的新設計中采用固件修正。
功率模式切換期間可能產(chǎn)生的失效
71M6521中的微調“保險絲”由控制邏輯保證,重復上電或極端EMI可能影響微調“保險絲”的數(shù)據(jù)讀取。失效原因包括:
電表頻繁斷電或出現(xiàn)極端EMI。
電表從工作狀態(tài)進入關斷模式,新的鋰電池供電的情況下,錯誤地讀取微調“保險絲”的數(shù)據(jù)。電池電壓(典型值為3.6 VDC)與71M6521正常工作時的電壓(典型值為3.3 VDC)不同,導致失效。
配備電池的電表似乎更容易受到影響,因為不帶電池的電表在主電源斷電并再次上電后,能夠經(jīng)歷一次干凈的復位(POR)過程。
在供電模式轉換期間,可能引發(fā)上文提及的失效現(xiàn)象,但很難準確定位具體故障,因為這取決于諸多因素:斷電或EMI、電表固件、電池選擇、電源設計等,這些都會影響到微調“保險絲”的讀取錯誤。大多數(shù)電表即使在極端測試條件下,也不會發(fā)生故障。
當電表返回正常工作模式時,電源能夠支持更大的工作電流,即可提供微調自校準數(shù)據(jù)。但可能需要重新恢復電表的工作狀態(tài)。
RTC失效事件
RTC程序用于補償電表在低功耗模式下產(chǎn)生的時間偏差,但并非在啟動時同步調整,而會累計抖動產(chǎn)生的漂移。
4.8p演示程序
程序測試
實際測試時為演示板配備了新電池,配置顯示默認值(顯示RTC的時鐘)。然后,在8周內每隔10秒重復一次交流電的斷電/上電。簡單地把電源穩(wěn)定在標稱交流電壓,然后開始測試。好的設計應該能夠正確地恢復系統(tǒng)工作,合理顯示時間信息。程序經(jīng)過8周測試后沒有出現(xiàn)失效。
軟件的影響
4.8p演示程序能夠在運行main()之前出發(fā)PLL_OK中斷,保證在固件初始化期間能夠檢測到掉電故障并進行相應的處理。必須謹慎管理其它中斷操作,以避免出現(xiàn)嚴重的故障現(xiàn)象。
任何情況下,4.8p演示軟件都可以在喚醒定時器中保持一個非零數(shù)值。正常工作時,喚醒定時器不會計數(shù)或觸發(fā)喚醒過程,除非IC意外進入休眠或僅顯示LCD模式。發(fā)生這種事件時,將觸發(fā)喚醒定時器工作,喚醒電表并從故障狀態(tài)下恢復電表工作。
程序存儲位置
目標代碼應該把修正程序放置在閃存的前8KB。Keil? IDE中,可以在項目平臺更改目標程序,選擇<點擊鼠標右鍵>optionsBL_51 Locate TabCode Space。演示程序中,該指令置于存儲器盡可能低的位置:
?C_C51STARTUP,?PR?_?PLL_ISR?BATMODES_20,?PR?_?BATMODE_CHANGE?BATMODES_20,
?C_C51STARTUP包含演示程序的啟動代碼。
?PR?_?PLL_ISR?BATMODES_20SAFE,?PR?_?BATMODE_CHANGE?BATMODES_20SAFE執(zhí)行PLL_OK中斷例程時需要。
PLL_OK中斷
以下程序應該置于PLL_OK中斷例程,檢測到關斷模式時運行。4.8p mainatmodes_20.c中給出了經(jīng)過測試的程序代碼。
?
extern void trim_test(void) small reentrant; EA = 0; CONFIG0 = 0; // Make sure we are running as fast as we can. IFLAGS = (~IE_PLLFALL_) & (~IE_PLLRISE_); // force an edge to occur WAKE = 0x81; // force a wake timer wake if sleep is forced trim_test(); // From start-up code.
?
評論
查看更多