物联传媒 旗下网站
登录 注册
RFID世界网 >  技术文章  >  其他  >  正文

IS23SC1604芯片介绍

作者:辛铁锋
来源:RFID世界网
日期:2005-06-01 10:18:28
摘要:IS23SC1604芯片介绍
   关键字: 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