IS23SC1604是采用ISSI公司先进的CMOS技术生产的低成本、低功耗、安全性高的带有保密功能的16K位串行EEPROM。 IS23SC1604的安全特性为智能卡应用提供了较高级别的存储器安全保护。存储器分为四个不等分应用区,每个应用区有多个密码保护,能够有效保护对该区的读/写/擦除操作。 IS23SC1604的存储区分布如表1所示。
表1存储器分布表
另外,在每一区都有一个读写允许标志位。其中一、二、三、四区的写允许标志位的位地址(十进制)分别是:216、9816、11904、13992;而一、二、三、四区的读允许标志位的位地址(十进制)分别为:217、9817、11905、13993。是否允许对芯片存储区读写,除了和相应的密码有关之外,还与相应的读写标志有关。 以下为IS23SC1604的汇编语言读写程序,仅供有关技术人员参考。 ; 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
; * * * * * * * * * * * * * * * * * * * * * * * * * * * *
; 读 复 位 应 答
; * * * * * * * * * * * * * * * * * * * * * * * * * * * *
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
; * * * * * * * * * * * * * * * * * * * * * * * * * * *
; 读 数 据
; * * * * * * * * * * * * * * * * * * * * * * * * * * *
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
; * * * * * * * * * * * * * * * * * * * * * * * * * * *
; 擦 除 数 据 ( 将 字 节 写 成 “ 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
; * * * * * * * * * * * * * * * * * * * * * * * * * * *
; 写 字 节 ( 将 相 应 的 位 写 成 “ 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
; * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
; 核 对 密 码
; * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
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
|