卡人

欢迎您访问卡人(杰捷智能卡制作)BLOG,这里有很多智能卡方面的知识及图片欣赏,让您耳目一新!

« CPU卡发卡程序设计过程中应当注意的几个问题 内置34K字节高密度EEPROM和模算术处理器(MAP)的智能卡集成电路 »

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 

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

日历

最新评论及回复

最近发表