I2C串行芯片X1288及其在電子電能表中的應用
摘要:介紹了一種基于I2C總線接口的多功能串行芯片X1288的性能特點和工作原理,給出了X1288在電子電能表設計中的應用方法,同時給出了 X1288和AT89C52的連接電路。實際應用表明:X1288能簡化電路設計并可提高硬件的工作效率。 關鍵詞:X1288;I2C總線接口;電子電能表 1 引言 X1288是美國Xicor公司生產(chǎn)的一種集E2PROM、實時時鐘、日歷、CPU監(jiān)控和兩路報警于一體的多功能集成電路芯片。X1288的時鐘采用一種價格低廉的32.768kHz晶振,具有百分秒、秒、分、時、日、月、年及星期信息,并可設定兩個報警時間,其時鐘和報警寄存器的雙通道結構使得它能在讀寫數(shù)據(jù)時仍保持時鐘的準確性。此外,X1288還可提供32k字節(jié)的E2PROM陣列,并具有電源和CPU監(jiān)控功能。 X1288串行芯片一般采用I2C總線來實現(xiàn)與主控制器的數(shù)據(jù)交換。I2C是由Philips公司開發(fā)的一種用于內部IC控制的雙向二線串行總線,通過該總線可很好地解決現(xiàn)代電子系統(tǒng)中眾多IC之間,及IC與外界的通信需要,并可大大簡化電路設計,提高硬件電路的工作效率。 2 X1288的引腳定義
本文引用地址:http://cafeforensic.com/article/201610/307582.htmX1288芯片具有16腳SOIC或14腳TSSOP小體積封裝形式。圖1為14腳TSSOP封裝的引腳示意圖,各引腳的定義如下: X1、X2:這兩個引腳可分別用作片內振蕩器的反相放大器的輸入和輸出端。應用時需外接一個32.768kHz的石英晶體,其作用是為系統(tǒng)時鐘/振蕩器提供時間基準。 RESET:復位信號輸出端。當看門狗超時或電壓跌落到固定的VTRIP門限時,此引腳將向主處理器發(fā)送一個低電平有效的漏極開路輸出信號,以使電路系統(tǒng)快速復位。 SDA:串行數(shù)據(jù)端,為漏極開路輸出的雙向引腳,用于數(shù)據(jù)的輸入輸出。實際應用時需接上拉電阻,并應與其它漏極或集電極開路輸出端線相或。該端的輸入緩沖器總是處于激活狀態(tài),輸出電路可通過一個斜率控制的下拉控制輸出信號的下降時間。設計時通常把電路設計成400kHz的二線接口。 SCL:串行時鐘端口。 PHZ/IRQ:可編程頻率/中斷輸出端。當編程為頻率輸出時,該端接到內部振蕩器的輸出腳,以輸出頻率為32.768kHz、4096Hz或1Hz的信號,也可以無信號輸出。當編程為中斷輸出時,該端可在報警發(fā)生時激活,以向主機請求中斷。
VBACK:備用電源輸入端。當VCC小于VBACK-0.2V時,電源控制電路將切換至VBACK供電;而當VCC超過VBACK時,又會自動切回VCC供電方式,圖2所示是其電源控制過程示意圖。 3 X1288的主要寄存器及其功能 X1228中的時鐘/控制寄存器(CCR)位于從E2PROM陣列中分離出來的一個區(qū)域,地址位于[000]0h~[003]Fh之間。CCR一般被分成5段,可分別用于狀態(tài)寄存器(1字節(jié))、實時時鐘(8字節(jié))、控制寄存器(4字節(jié))、報警寄存器1和報警寄存器0(各8字節(jié))。 3.1 狀態(tài)寄存器(SR) 狀態(tài)寄存器是易失性的,其地址是003Fh。表1所列是其命令格式,各命令字的具體含義如下: 表1 狀態(tài)寄存器(SR) 地址名稱 7 6 5 4 3 2 1 0 缺省值 003Fh SR BAT AL1 AL0 0 0 RWEL WEL RTCF 01h BAT:后備電源標志位。當BAT為“1”時,表明器件在使用后備電源。 AL1、AL0:報警選擇位。X1288中有兩個報警寄存器,若其中的某一報警時間與實時時鐘相同時,相應的AL1或AL0位將變?yōu)?ldquo;1”;當讀取SR的值后,該位又變?yōu)?ldquo;0”。 RWEL:時鐘/控制寄存器(CCR)寫入控制位。對CCR進行寫操作時,必須先使該位為“1”。 WEL:CCR和E2PROM的寫入控制位。在對CCR和E2PROM進行寫操作時,必須先使該位為“1”。同理,如果要寫入時鐘和控制寄存器,也必須先寫“02h”至SR(使RWEL為“1”),再寫“06h” (使WEL為“1”)。 RTCF:掉電標志位。當全部電源(包括VCC和VBACK)失效后,該位變?yōu)? “1”;而在系統(tǒng)再次上電后,如果要對RTC進行第一次有效寫操作,則應首先將使該位為“0”。 需要說明的是,雖然SR中的第3、4位沒有使用,但這些位必須置“0”。 圖4 3.2 實時時鐘(RTC) 實時時鐘寄存器的地址0030h~0037h分別對應秒、分、時、日、月、年、星期和百分秒,并采用BCD碼表示。通過啟動一條讀命令并確定相應的地址,即可讀取時間信息。因為時鐘是連續(xù)運行的,而每次讀操作都需要一定的時間,這就有可能在讀操作過程中使時間發(fā)生改變。本器件是由讀命令將時間鎖存在分立的鎖存器中,因而可以避免讀操作過程中時間發(fā)生變化。當一次讀出并不是由讀操作引起時,系統(tǒng)將發(fā)出報警。 可以通過向RTC寄存器中寫入數(shù)據(jù)來設定時間和日期。通過一次不完全連續(xù)的寫操作可避免改變當前時間,在RTC數(shù)據(jù)輸入字節(jié)之前的ACK位時,時鐘的下降沿會將當前的時間值裝載到分立的緩沖器中,以使時鐘繼續(xù)運行。而此時新的串行輸入數(shù)據(jù)將取代緩沖器的值。當有效的寫操作結束后,系統(tǒng)產(chǎn)生停止位時,這個新值才被裝載到RTC寄存器中。向RTC寫入單個字節(jié)并不對其它字節(jié)的數(shù)據(jù)產(chǎn)生影響。 當X1288在VCC和VBACK都失效以后,即使再次上電后,其時鐘也將停止增加,直到在時鐘寄存器中進行至少一個字節(jié)的寫操作以后。 讀出和設定時鐘應注意:百分秒寄存器(SSEC)是只讀的;小時寄存器(HR)中的MIL位是12/24時制選擇位“1”為24時制,“0”為12時制,H21位是AM/PM標志位“1”代表PM,“0”代表AM;星期中的七天只用三位(DY0~2)來計數(shù),其值在0~6之間循環(huán),數(shù)字所代表星期中的哪一天可由設計者決定,缺省值為0。 3.3 控制寄存器 表2所示是4個控制寄存器的命令字列表,其中的DTR是數(shù)字化微調寄存器,它的作用是調整每秒的計數(shù)值和ppm誤差,以便在長時間內獲得更好的計時精度。DTR2是符號位,“1”為正補償,“0”為負補償;DTR1、DTR0可分別提供10ppm、20ppm的補償。由DTR0~DTR2三位可表示-30ppm~+30ppm的補償范圍。 表2 控制寄存器 地址名稱 7 6 5 4 3 2 1 0 缺省值 0013h DTR 0 0 0 0 0 DTR2 DTR1 DTR0 00h 0012h ATR 0 0 ATR5 ATR4 ATR3 ATR2 ATR1 ATR0 00h 0011h INT IM AL1E AL0E FO1 FO0 只讀只讀只讀 00h 0010h BL BP2 BP1 BP0 WD1 WD0 只讀只讀只讀 00h ATR寄存器用來微調X1和X2之間的片內負載電容,其范圍從+116ppm~-37ppm,具體電容值的大小可由下式計算: CART=[(ATR的十進制值)%26;#215;0.25]+11.0pF 實際上,數(shù)字和模擬結合起來的微調范圍可高達+146ppm。BL中的BP2~BP0位是塊保護位,這些位可用來決定對E2 PROM陣列中8個保護段的某些具體段提供寫保護(參見表3所列);WD1、WD0用來設置看門狗時限。 表3 塊保護位與E2PROM陣列保護區(qū) BP2 BP1 BP0 被保護的地址陣列中被鎖部分 0 0 0 無無 0 0 1 6000h~7FFFh 高端1/4 0 1 0 4000h~7FFFh 高端1/2 0 1 1 0000h~7FFFh 全陣列 1 0 0 0000h~007Fh 第一頁 1 0 1 0000h~00FFh 第二頁 1 1 0 0000h~01FFh 前四頁 1 1 1 0000h~03FFh 前八頁INT是中斷控制和頻率輸出寄存器,其中AL1E和AL0E是報警中斷信號(IRQ)的輸出使能位,這兩位分別結合SR中的AL1和AL0,可用來指示報警是否發(fā)生;IM是脈沖中斷方式控制位,當報警條件匹配時,IRQ將輸出一個單次脈沖,若IM設為“1”,則脈沖輸出是周期性的;FO1和FO0是頻率輸出控制位,主要用于選擇內部振蕩器的三種分頻輸出之一并在PHZ端輸出。 3.4 報警寄存器 X1288有兩個報警寄存器,地址分別在0000h~0007h和0008h~000Fh,通過這兩個報警寄存器可設置兩個報警時間。報警寄存器的內容與RTC很類似,不同之處在于其最高位被設置為使能位,而取消了HR中的12/24時制控制位。使能位規(guī)定了哪些寄存器可用來與實時時鐘寄存器作比較。通過設置EMOn位并結合其它使能位和特定的報警時間,用戶可以建立在每年的同一時間(精確到秒)觸發(fā)一次報警。用戶可以通過輪詢AL0和AL1軟標志來確定一次報警的發(fā)生,或者使能IRQ輸出作為一個硬件報警標志。當所有的使能位都被設置成“0”時,整個系統(tǒng)無報警。 4 I2C總線數(shù)據(jù)傳送方式 X1288在應用時一般作為從器件通過串行I2C總線來實現(xiàn)與主控制器的通信。其中,SDA用來接收、發(fā)送數(shù)據(jù);SCL用于接收產(chǎn)生的同步脈沖,當SCL為低時,SDA上的數(shù)據(jù)發(fā)生變化,為高時表明可以接收SDA上的數(shù)據(jù)。 I2C總線在SCL為高且SDA線上出現(xiàn)一個下降沿時啟動;而在SCL為高且SDA線上出現(xiàn)一個上升沿時停止。啟動和停止信號都由主控器產(chǎn)生,這樣,總線上帶有I2C接口的器件就能很容易地檢測到這些信號。但對于不具備這種接口的單片機來說,為了能夠準確地檢測到這些信號,必須保證在總線的一個時鐘周期內對SDA線至少進行兩次采樣。 I2C總線上的應答信號是用于表明數(shù)據(jù)傳輸成功的信號。當發(fā)送的設備發(fā)送了啟動位和8位數(shù)據(jù)之后,在第9個SCL有效時,接收設備將使SDA為低以產(chǎn)生有效的應答信號,該信號可用來說明數(shù)據(jù)已成功接收。當接收設備發(fā)送了表明數(shù)據(jù)已成功接收的應答信號之后,發(fā)送設備可選擇繼續(xù)發(fā)送數(shù)據(jù)或發(fā)送停止位以結束發(fā)送,如發(fā)送設備沒有收到接收設備的應答信號,則說明發(fā)送失敗,此時應重發(fā)。 一般情況下,I2C總線上可同時接多個設備,每個器件都有唯一的地址。X1288有兩個從設備地址(從地址的高4位):其中1010為訪問E2PROM陣列;1101為訪問CCR。從地址的3~1位為器件的選擇位,它們規(guī)定為111,最低位R/W用于定義此操作是讀或寫。I2C總線上傳送的每一個字節(jié)為8位,而啟動一次I2C總線后傳輸?shù)淖止?jié)數(shù)可以是一個,也可以是多個。每傳送一個字節(jié)后,都必須跟隨一個應答位,并且先發(fā)送的數(shù)據(jù)位為最高位。在全部數(shù)據(jù)傳送結束后主控制器發(fā)送終止信號。X1288有兩種寫操作方式,分別為單字節(jié)寫或頁面寫。圖4所示是對X1288完成一個字節(jié)的寫操作時序,由圖可見,寫操作共由四個字節(jié)組成,其中包括一個從地址字節(jié)、一個要訪問的地址字(2字節(jié))、一個字節(jié)的操作數(shù)。采用頁面寫時,它將以和單字節(jié)寫操作相同的方式啟動,但在第一個字節(jié)傳送之后不結束寫周期,主機可發(fā)送多于63個字節(jié)到存儲器陣列和多于7個字節(jié)到CCR。X1288有三種基本的讀操作方式:當前地址讀、隨機讀和序列讀。
5 應用實例 在多用戶電子電能表的設計中,X1288的實時時鐘可保證系統(tǒng)時間的正確性,并為多費率的電價計量等提供準確的時間;當由于外部干擾而產(chǎn)生死循環(huán)時,單片機能自動復位;32k字節(jié)的E2PROM則可用于保證所有用戶的電能累積值、預交電費余額和異常故障等重要數(shù)據(jù)的可靠保存和靈活更改;當系統(tǒng)掉電時,系統(tǒng)中的電源管理系統(tǒng)將會自動轉為鋰離子電池供電方式。 X1288與單片機的接線如圖5所示, 由于AT89C52本身沒有帶I2C總線接口,設計中使用P1.6/ P1.7作為I2C總線接口的SCL/SDA。本電路為單主系統(tǒng),單片機只對X1288進行讀寫操作,因此可通過對I2C總線典型信號的時序模擬編制應用程序。文獻2中提供了一套I2C總線數(shù)據(jù)模擬傳送的通用軟件包,可方便地作為讀寫子程序來設計系統(tǒng)軟件,其中包括基本的啟動、停止、發(fā)送應答位、發(fā)送非應答位的子程序,同時還有應答位檢查、發(fā)送一個字節(jié)數(shù)據(jù)、接收一個字節(jié)數(shù)據(jù)、發(fā)送n個字節(jié)數(shù)據(jù)和接收n個字節(jié)數(shù)據(jù)等子程序。 6 結束語 X1288作為微處理器的外圍器件,它把最基本的功能組合在了一起,因而具有較高的性價比,可大大降低電路板的空間和功耗,因此,是系統(tǒng)可靠運行的關鍵器件。
評論