IS23SC1604是采用ISSI公司先進(jìn)的CMOS技術(shù)生產(chǎn)的低成本、低功耗、安全性高的帶有保密功能的16K位串行EEPROM。 IS23SC1604的安全特性為智能卡應(yīng)用提供了較高級(jí)別的存儲(chǔ)器安全保護(hù)。存儲(chǔ)器分為四個(gè)不等分應(yīng)用區(qū),每個(gè)應(yīng)用區(qū)有多個(gè)密碼保護(hù),能夠有效保護(hù)對(duì)該區(qū)的讀/寫/擦除操作。 IS23SC1604的存儲(chǔ)區(qū)分布如表1所示。
表1存儲(chǔ)器分布表
另外,在每一區(qū)都有一個(gè)讀寫允許標(biāo)志位。其中一、二、三、四區(qū)的寫允許標(biāo)志位的位地址(十進(jìn)制)分別是:216、9816、11904、13992;而一、二、三、四區(qū)的讀允許標(biāo)志位的位地址(十進(jìn)制)分別為:217、9817、11905、13993。是否允許對(duì)芯片存儲(chǔ)區(qū)讀寫,除了和相應(yīng)的密碼有關(guān)之外,還與相應(yīng)的讀寫標(biāo)志有關(guān)。 以下為IS23SC1604的匯編語(yǔ)言讀寫程序,僅供有關(guān)技術(shù)人員參考。 ; R1=DATA TO CHIP
; R0=DATA FROM CHIP
; R2=8 BIT COUNTER
; R7=TIME DELAY COUNTER
; R3=BYTE NUMBER
; 40H=ATR INPUT ADDRESS
; 50H=READ DATA OUT
; 79H=WRITE/ERASE OK/NOT OK ID
; 71H=READ DATA ADDRESS HIGH 8 BIT
; 72H=READ DATA ADDRESS LOW 8 BIT
; 73H=DATA BYTE
; 76H=BYTE NUMBER
; 77H=FIRST PSC BYTE
; 78H=SECOND PSC BYTE
ORG 00H
START:
PIN_CLK EQU P1.0
PIN_IO EQU P1.1
PIN_RST EQU P1.4
PIN_FUS EQU P1.3
PIN_PGM EQU P1.2
; * * * * * * * * * * * * * * * * * * * * * * * * * * * *
; 讀 復(fù) 位 應(yīng) 答
; * * * * * * * * * * * * * * * * * * * * * * * * * * * *
READ_ATR:
MOV R0,# 40H
MOV R3,# 40H
SETB PIN_RST
SETB PIN_CLK
SETB PIN_PGM
SETB PIN_IO
LCALL DELAY_10US
CLR PIN_PGM
CLR PIN_CLK
LCALL DELAY_5US
CLR PIN_RST
LOOP_1_BYTE:
LCALL READ_8_BIT
MOV @R0,A
INC R0
DJNZ R3,LOOP_1_BYTE
RET
ADDRESS:
MOV P1,# 0FFH
SETB PIN_RST
SETB PIN_CLK
SETB PIN_PGM
SETB PIN_IO
LCALL DELAY_10US
CLR PIN_PGM
CLR PIN_CLK
LCALL DELAY_5US
CLR PIN_RST
LCALL DELAY_3US
LCALL MUL_8
MOV A,71H
MOV B,72H
ORL A,B
JZ ZERO_BACK
MOV A,71H
JZ HIGH_ZERO
MOV A,72H
JZ LOW_ZERO
LCALL HIGH_Z
LCALL LOW_Z
JMP ZERO_BACK
HIGH_ZERO:
LCALL HIGH_Z
JMP ZERO_BACK
LOW_ZERO:
LCALL LOW_Z
ZERO_BACK:
RET
HIGH_Z:
MOV R0,72H
CLK_LOOPH:
SETB PIN_CLK
LCALL DELAY_3US
CLR PIN_CLK
LCALL DELAY_3US
DJNZ R0,CLK_LOOPH
RET
LOW_Z:
MOV R0,# 0H
MOV R1,71H
CLK_LOOPL:
SETB PIN_CLK
LCALL DELAY_3US
CLR PIN_CLK
LCALL DELAY_3US
DJNZ R0,CLK_LOOPL
DJNZ R1,CLK_LOOPL
RET
MUL_8:
MOV R2,# 03H
CLR C
MUL_LOOP:
MOV A,72H
RLC A
MOV 72H,A
MOV A,71H
RLC A
MOV 71H,A
DJNZ R2,MUL_LOOP
RET
; * * * * * * * * * * * * * * * * * * * * * * * * * * *
; 讀 數(shù) 據(jù)
; * * * * * * * * * * * * * * * * * * * * * * * * * * *
READ_EE:
LCALL ADDRESS
MOV R0,# 40H
MOV R3,76H
LOOP_BYTE:
LCALL READ_8_BIT
MOV @R0,A
INC R0
DJNZ R3,LOOP_BYTE
RET
; * * * * * * * * * * * * * * * * * * * * * * * * * * *
; 擦 除 數(shù) 據(jù) ( 將 字 節(jié) 寫 成 “ FFH” )
; * * * * * * * * * * * * * * * * * * * * * * * * * * *
ERASE_BYTE:
LCALL ADDRESS
MOV R3,76H
ERASE_LOOP:
SETB PIN_IO SETB PIN_PGM LCALL DELAY_3US SETB PIN_CLK LCALL DELAY_3US CLR PIN_PGM LCALL DELAY_5MS CLR PIN_CLK LCALL DELAY_3US SETB PIN_CLK LCALL DELAY_3US
MOV C,PIN_IO
JNC LOOP_ERASEWRONG ; ERASE CHECK ERROR
CLR PIN_CLK
DEC R3 CJNE R3,# 0H,ERASE_NEXT
JMP ERASE_END
ERASE_NEXT:
LCALL READ_8_BIT
JMP ERASE_LOOP
LOOP_ERASEWRONG:
MOV 79H,# 00H ; SET THE ID TO ZERO
ERASE_END:
RET
; * * * * * * * * * * * * * * * * * * * * * * * * * * *
; 寫 字 節(jié) ( 將 相 應(yīng) 的 位 寫 成 “ 0” )
; * * * * * * * * * * * * * * * * * * * * * * * * * * *
WRITE_BYTE:
LCALL ADDRESS
MOV R3,76H
MOV R0,# 30H
WRITE_LOOP:
MOV A,@R0
LCALL WRITE_1_BYTE
INC R0
DJNZ R3,WRITE_LOOP
RET
WRITE_1_BYTE:
MOV R2,# 08H
WR_BYTE_LOOP:
RLC A
JC NEXT_BIT
CLR PIN_IO
SETB PIN_PGM
LCALL DELAY_3US
SETB PIN_CLK
LCALL DELAY_3US
CLR PIN_PGM
LCALL DELAY_5MS
CLR PIN_CLK
LCALL DELAY_3US
SETB PIN_CLK
LCALL DELAY_3US
MOV C,PIN_IO
JC LOOP_WRITEWRONG ; WRITE CHECK ERROR
CLR PIN_CLK
LCALL DELAY_3US
JMP SKIP_BIT
NEXT_BIT:
SETB PIN_CLK
LCALL DELAY_3US
CLR PIN_CLK
LCALL DELAY_3US SKIP_BIT:
DJNZ R2,WR_BYTE_LOOP
LOOP_WRITEWRONG:
MOV 79H,# 00H ; SET WRITE ERROR ID TO ZERO
RET
; * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
; 核 對(duì) 密 碼
; * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
COMPAR_CODE:
LCALL ADDRESS
MOV R0,# 77H
MOV R3,76H
COMPAR_LOOP:
MOV A,@R0
LCALL COMPARE
INC R0
DJNZ R3,COMPAR_LOOP
SETB PIN_IO
RET CODE_VALI:
LCALL COMPAR_CODE
MOV R2,# 08H
FIND_NEXT:
LCALL DELAY_3US
MOV C,PIN_IO
LCALL DELAY_3US
JC FOUND_ONE
SETB PIN_CLK LCALL DELAY_3US
CLR PIN_CLK
DJNZ R2,FIND_NEXT
JMP NO_ONE
FOUND_ONE:
CLR PIN_IO
SETB PIN_PGM
LCALL DELAY_3US
SETB PIN_CLK
LCALL DELAY_3US
CLR PIN_PGM
LCALL DELAY_5MS
CLR PIN_CLK
LCALL DELAY_3US
SETB PIN_IO
SETB PIN_PGM
LCALL DELAY_3US
SETB PIN_CLK
LCALL DELAY_3US
CLR PIN_PGM
LCALL DELAY_5MS
CLR PIN_CLK
LCALL DELAY_3US
NO_ONE:
NOP
RET
COMPARE:
MOV R2,# 08H
LOOP_COMPAR:
RLC A
MOV PIN_IO,C
LCALL DELAY_3US
SETB PIN_CLK
LCALL DELAY_3US
CLR PIN_CLK
DJNZ R2,LOOP_COMPAR
RET
; * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
; 熔 斷 熔 絲
; * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
FUS_BLOW:
MOV 71H,# 07H
MOV 72H,# 0F4H
LCALL BLOW_BYTE
RET BLOW_BYTE: LCALL ADDRESS
SETB PIN_CLK
LCALL DELAY_3US
CLR PIN_CLK
LCALL DELAY_3US
SETB PIN_RST
LCALL DELAY_3US
CLR PIN_IO
SETB PIN_PGM
LCALL DELAY_3US
SETB PIN_CLK
LCALL DELAY_3US
CLR PIN_PGM
LCALL DELAY_5MS
CLR PIN_CLK
LCALL DELAY_3US
SETB PIN_CLK
LCALL DELAY_3US
CLR PIN_CLK
LCALL DELAY_3US
CLR PIN_IO
SETB PIN_PGM
LCALL DELAY_3US
SETB PIN_CLK
LCALL DELAY_3US
CLR PIN_PGM
LCALL DELAY_5MS
CLR PIN_CLK
LCALL DELAY_3US
CLR PIN_RST
LCALL DELAY_3US
RET
READ_8_BIT:
MOV R2,# 08H
LOOP_8BIT_OUT:
SETB PIN_CLK
MOV C,PIN_IO
RLC A
CALL DELAY_3US
CLR PIN_CLK
LCALL DELAY_3US
DJNZ R2,LOOP_8BIT_OUT
RET
DELAY_10US:
MOV R7,# 05H
LOOP_10:
DJNZ R7,LOOP_10
RET
DELAY_5US:
MOV R7,# 02H
LOP_5:
DJNZ R7,LOP_5
RET
DELAY_3US:
MOV R7,# 01H
LOP_3:
DJNZ R7,LOP_3
RET
DELAY_5MS:
MOV R7,# 0FFH
LOOP_5MS:
DJNZ R7,LOOP_5MS
RET
|