设为首页 | 成都一卡通
当前位置: 首页 > 一 卡 通 > 其他一卡通 >
其他一卡通
IS23SC1604芯片介绍
发布时间:2013-04-09 来源:未知
关键字: ISSI公司IS23SC1604芯片
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