X25045是帶有串行E2PROM的CPU監控器,F在型號改為X5045,性能相同
圖2是它的引腳圖:

CS/WDI:片選輸入/看門狗復位輸入;
SO:串行輸出;
WP:寫保護輸入;
Vss:地;
Vcc:電源;
RESET:復位輸出;
SCK:同步時鐘輸入;
SI:串行輸入。
X25045的狀態寄存器描述器件的當前狀態,各位意義如表1所列。
表1
7 |
6 |
5 |
4 |
3 |
2 |
1 |
0 |
0 |
0 |
WD1 |
WD0 |
BL1 |
BL0 |
WEL |
WIP |
其中,WD1、WD0是看門狗定時時間設置位;BL1、BL0是存儲單元寫保護區設置位;WEL是只讀標志,1表明寫使能開關打開;WIP也是只讀標志,1代表芯片內部正處于寫周期。電復位時,各位都被清零。
X25045芯片功能包括以下4種:
(1)上電復位控制。在對X25045通電時,ERSET引腳輸出有效的復位信號,并保持至少200ms,使CPU有效復位。
(2)電源電壓監控。當檢測到電源電壓低于內部門檻電壓VTRIP時,RESET輸出復位信號,直至電源電壓高于VTRIP并保持至少200ms,復位信號才被撤消。VTRIP的出廠值根據芯片型號不同共有5個級別的電壓范圍。對于需要電源電壓精確監控的應用,用戶可以搭建編程電路,對芯片內VTRIP電壓進行微調。
(3)看門狗定時器。芯片內部狀態寄存器的WD1、WD0是看門狗定時設置位,通過狀態寄存器寫指令WRSR修改這2個標志位,就能在3種定時間隔中進行選擇或關閉定時器。對看門狗的復位由CS輸入電平的下降沿完成。表2是WD1、WD0組合的含義。
表2
WD1 |
WD0 |
看門狗定時值 |
0 |
0 |
1.4s |
0 |
1 |
600ms |
1 |
0 |
200ms |
1 |
1 |
禁止看門狗工作 |
(4)串行E2PROM。芯片內含512字節存儲單元,10萬次可靠寫,數據保持時間100年。XICOR設計了3種保護方式防止誤寫。包括:WP寫保護引腳,當引腳被拉低時,內部存儲單元狀態寄存器都禁止寫入;存儲區域寫保護模式,通過對狀態寄存器的BL1、BL0位的設置,可以選擇對不同的存儲區域進行寫保護;在進行任何寫操作前都必須打開寫使能開關,而且在上電初始化寫操作完成時,寫使能開關自動關閉。顯然,在幾方面的保護之下,產生誤寫的可能性極小,表3是BL1、BL0組合的含義。
表3
BL1 |
BL0 |
寫保護的單元地址 |
0 |
0 |
沒有保護 |
0 |
1 |
180H~1FFH |
1 |
0 |
100H~1FFH |
1 |
1 |
000H~1FFH |
對X25045的操作是通過4根口線CS、SCK、SI和SO進行同步串行通信來完成的。SCK是外部輸入的同步時鐘信號。在對芯片定改指令或數據時,時鐘前沿將SI引腳信號輸入;在讀郵數據時,時鐘后沿將數據位輸出到SO引腳上。數據的輸入/輸出都是高位在先。
芯片內部共有6條指令,如表4所列。
表4
命令名稱 |
命令格式 |
內 容 |
WREN |
0000 0110 |
打開寫使能開關 |
WRDI |
0000 0100 |
關閉寫使能開關 |
RDSR |
0000 0101 |
讀狀態寄存器 |
WRSR |
0000 0001 |
寫狀態寄存器 |
READ |
0000 A8011 |
讀存儲單元 |
WRITE |
0000 A8010 |
寫存儲單元 |
(1)WREN和WRDI是寫使能開關的開/關指令。它們都是單字節指令。
(2)RDSR和WRSR是狀態寄存器的讀/寫指令。在從SI輸入指令后,RDSR的執行結果,即狀態寄存器內容須從SO讀出;而WRSR需要緊接著輸入修改數據。
(3)READ和WEITE是存儲單元的讀/寫指令。輸入指令后(指令碼第三代表存儲單元地址的最高位),接著輸入低八位地址,最后就可以連續讀出或寫入數據。其中,讀指針和寫指針的工作方式完全不同,讀指針的全部8位用來計數,0FFH溢出后變成00H;寫指針只用最低兩位計數,XXXXXX11B溢出后變成XXXX XX00B,所以連續寫的實際結果是在4個單元中反復寫入。另外,由于E2PROM的寫入時間長,所以在連續兩條寫指令之間應讀取WIP狀態,只有內部寫周期結束時才可輸入下一條寫指令。
AT89C2051內部沒有SPI接口硬件,因此本系統利用了單片機的4根口線和軟件模擬讀寫時序的方式與X25045通信。軟件包在文末給出。
四、軟件原理
X25045的通信接口軟件:
CS BIT P3.2
SCK BIT P3.3
SI BIT P3.4
SO BIT P3.5
(1)X25045數據寫入程序
功能:將緩沖區數據寫入指定地址開始的單元。
入口:F0、R3是E2PROM單元地址最高位低八位;R0是緩沖區首地址;R2是緩沖區長度。
WRITEX:LCALL STAX ;指令啟動
MOV A,#06H ;輸出WREN
LCALL BYTE_OUT
LCALL STAX ;下一指令啟動
MOV A,#02H ;輸出WRITE
MOV C,F0 ;插入單元地址最高位
MOV ACC.3,C
LCALL BYTE_OUT
MOV A,R3 ;輸出單元地址低八位
LCALL BYTE_OUT
BYWR:MOV A,@R0 ;從緩沖區取數輸出
LCALL BYTE_OUT
INC R0 ;指針加1
DJNZ R2,BYWR ;緩沖區未空則繼續輸出
LCALL ENDX ;指令結束
LCALL WIP_CHK ;等待WIP=0
RET
(2)X25045數據讀出程序
功能:把指定地址開始的單元數據讀出并放入緩沖區
入口:與寫入程序相同。
READX:LCALL STAX
MOV A,#03H ;輸出READ
MOV C,F0
MOV ACC.3,C
LCALL BYTE_OUT
MOV A,R3 ;輸出低八位地址
LCALL BYTE_OUT
BYRD:LCALL BYTE_IN ;輸入數據送入緩沖區
MOV @R0,A
INC R0 ;指針加1
DJNZ R2,BYRD ;緩沖區未滿則繼續輸入
LCALL ENDX
RET
(3)X25045狀態寄存器寫入程序
功能:對狀態寄存器進行設置。
入口:ACC是修改值。
WRSR:LCALL STAX
PUSH ACC
MOV A,#06H ;輸出WREN
LCALL BYTE_OUT
LCALL STAX
MOV A,#01H ;輸出WRSR
LCALL BYTE_OUT
POP ACC ;輸出設置值
LCALL BYTE_OUT
LCALL ENDX
LCALL WIP_CHK ;等待WIP=0
RET
(4)X25045狀態寄存器讀出程序
功能:讀出狀態寄存器當前值。
出口:ACC是當前值。
RDSR:LCALL STAX
MOV A,#05H
LCALL BYTE_OUT
LCALL BYTE_IN
LCAL ENDX
RET
(5)其他子程序
WIP_CHK:LCALL RDSR ;等待X25045結束內部寫周期
JB ACC.0,WIP_CHK
RET
STAX:SETB CS ;啟動X25045指令
NOP ;先拉高CS,再拉你SCK,最后拉低CS
CLR SCK
NOP
CLR CS
NOP
RET
ENDX:CLR SCK ;結束X25045指令
SETB CS ;先拉低SCK后拉高CS
NOP
NOP
RET
BYTE_OUT:MOV R4,#08H ;向X25045寫入一字節數據
BOUT1:CLR SCK
RLC A
MOV SI,C
SETB SCK
NOP
NOP
DJNZ R4,BOUT1
RET
BYTE_IN:MOV R4,#08H ;從X25045讀出一字節數據
BIN1:CLR SCK
MOV C,SO
RLC A
SETB SCK
NOP
NOP
DJNZ R4,BIN1
RET
RST_DOG:SETB CS ;復位看門狗定時器
NOP
CLR CS
NOP
SETB CS
RET
|