物聯傳媒 旗下網站
登錄 注冊
RFID世界網 >  技術文章  >  其他  >  正文

IS23SC1604芯片介紹

作者:辛鐵鋒
來源:RFID世界網
日期:2005-06-01 10:18:28
摘要:IS23SC1604芯片介紹
   關鍵字: ISSI公司  IS23SC1604芯片  

  IS23SC1604是采用ISSI公司先進的CMOS技術生產的低成本、低功耗、安全性高的帶有保密功能的16K位串行EEPROM。
  IS23SC1604的安全特性為智能卡應用提供了較高級別的存儲器安全保護。存儲器分為四個不等分應用區(qū),每個應用區(qū)有多個密碼保護,能夠有效保護對該區(qū)的讀/寫/擦除操作。
  IS23SC1604的存儲區(qū)分布如表1所示。

  表1存儲器分布表




  另外,在每一區(qū)都有一個讀寫允許標志位。其中一、二、三、四區(qū)的寫允許標志位的位地址(十進制)分別是:216、9816、11904、13992;而一、二、三、四區(qū)的讀允許標志位的位地址(十進制)分別為:217、9817、11905、13993。是否允許對芯片存儲區(qū)讀寫,除了和相應的密碼有關之外,還與相應的讀寫標志有關。
  以下為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

; * * * * * * * * * * * * * * * * * * * * * * * * * * *

; 擦 除 數 據 ( 將 字 節(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é) ( 將 相 應 的 位 寫 成 “ 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