DIY编程器网

 找回密码
 注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 113|回复: 0
打印 上一主题 下一主题

单片机控制AT88SC1604卡的应用实例

[复制链接]
跳转到指定楼层
楼主
发表于 2012-1-16 16:42:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本文介绍了目前应用较为广泛的AT88SC1604逻辑加密卡的特点和工作原理,同时给出了通过单片机控制操作IC卡的的应用实例及程序。
  前言
  IC卡按结构划分,可分为存储器卡和微处理器卡(CPU card)两大类。逻辑加密卡主要控制作用是:对数据存储区开放/关闭的控制;对数据存储区读/写的控制;对数据存储区擦除操作的控制以及对密码校验和错误次数计数及锁闭功能控制。
  



?
  AT88SC1604卡的工作原理
  AT88SC1604是由美国ATMEL公司设计的逻辑加密存储卡芯片。它具有15704位的存储容量,是目前逻辑加密存储卡中容量较大的一种产品芯片。
  芯片特点
  (1) AT88SC1604芯片属于单存储器多逻辑分区结构。主存储器除划分了特定的标志数据区和控制数据区之外,还将应用数据区分成四个完全隔离的子区,并在每个子区中配备了各自的读、写控制标志和写入/擦除密码以及密码输入错误计数器等逻辑控制。
  (2) 芯片为串行传输方式,并满足ISO7816-3同步传输协议。
  (3)芯片采用低功耗的CMOS工艺制造,每字位的读取时间为 s,写周期为5ms。
  (4) 芯片内部的存储单元具有至少10000次的擦除/改写循环次数。数据保存期为10年。
  芯片存储分区结构及定义
  AT88SC1604芯片分为制造商代码区、发行商代码区、用户安全密码区、用户密码比较计数区、个人代码区以及四个应用区。每个应用区都由密码区,密码比较计数区,擦除密码区和擦除密码比较计数区、应用数据区和存储器测试区组成。
  (1) 制造商代码区(FZ)
  该区里记录的卡芯片生产商的特定信息(例如:生产批号、日期、以及特别制定的特征代码),由制造商在芯片出厂前写入。在控制本区的熔丝(FUSHl)没有熔断时,该区的存储单元可以象普通的EEPROM存储单元一样进行擦除和改写。一旦熔丝熔断,所写入的制造商代码就不可再更改。
  (2) 发行商代码区(IZ)
  该区用于记录卡片发行商的特定信息(例如:发行批号、日期、地区范围编号以及特定用户编号等特征代码)。当控制本区的熔丝没有熔断时,该区的存储单元内容可以自由的擦除或改写。在个人化处理过程完成之后,控制该区的熔丝(FUSH2)熔断,即可将注入的“发行商代码”完全固化。这一代码也是识别卡片的真伪,区分卡片应用类别的重要标识。
  (3) 个人代码区(CPZ)
  该区用于存放个人身份标识数据。该区使用上受芯片的“用户密码”的保护。当“用户密码”比较成功,该区可读可写可擦除。“用户密码”比较不成功,该区只能读而不能写入和擦除。
  (4) 用户密码区(SC)
  这个密码区是整个存储器的“总控制开关”。使用前,由授权持卡人预先输入的一个安全代码作为“参照字”储存在这个存储区里。使用时,必须输入一个“校验密码”。芯片将输入的“校验密码”与内部存储器的“参照字”一一比较。如果比较结果一致,IC卡将开放整个芯片储存器(包括各分区的控制密码和各应用数据区)。各区的“安全密码”区SCn(n=l,2,3,4)与SC的作用是完全类似的。
  对于各分区的密码区SCn (n=1,2,3,4)来说,其比较操作要受到对应“应用区密码”比较计数器(SnAC)的计数控制。当连续8次输入密码错误,SCn将被锁死。
                          
                       
                          
                                (5) 密码比较计数区(SCAC)
?
  该区对连续输入的错误密码的次数进行累计。当连续8次不正确的比较操作之后,芯片将被锁死。芯片被锁死之后,将拒绝任何的擦除、写入和比较的操作命令。
  该区是8位长,按位写入方式操作。在芯片初始化时是全“1”状态,即读出值为“FFH”。在每次比较输入的密码时,先按从高位到低位的顺序找第一个为“1”的位,将此位写“0”,然后将新输入的“校验密码”与原存储在SC区的“参照字”进行比较。比较操作本身由芯片内部自行完成,而比较结果则通过置SV标志来判别,即比较成功时SV被置“1”。比较不成功,SV保持原来的“0”状态。在连续8次比较错误过程中每次比较操作之后计数器的计数值分别为“7FH”、“3FH”、“1FH”、“0FH”、“07H”、“03H”、“01H”、“00H”。当计数器为“00H”后,后续的比较操作命令由于无法在“SCAC”区中找到一个为“1”的位,因而芯片拒绝继续执行比较操作。
  SnAC(n=1,2,3,4)的作用与SCAC是类似的。操作控制也完全一样。只是SCAC是限制对SC区的比较操作。而SnAC则限制对SCn区的比较操作。SCAC的控制级别最高。当SCAC为“00H”后,芯片内部封锁了对SC区的比较操作,从而使对SCn的比较也被禁止。如果SCAC为非“00H”值,在对SC区的比较密码操作成功之后,SCn能否进行比较操作就由SnAC区的状态值来决定。SnAC区在连续8次比较输入过程中,每次比较操作之后计数器的计数值与SCAC的8个值一样。(即分别为“7FH”、“3FH”、“1FH”、“0FH”、“07H”、“03H”、“OlH”、“00H”)当SnAC为“00H”时,则“应用n区”将被锁死。
  (6)擦除密码区(EZn ,n=l.2,3,4)
  该区用于存储擦除应用区操作的控制密码。这些密码一般由发行商使用。在个人化处理时输入的最后一组“擦除密码”,在芯片熔丝FUSE2熔断之后将使“擦除密码”保存在该区内。该区不再能读出、写入和擦除,只能进行比较操作。在使用过程中如需对应用区进行擦除操作,都必须首先对相应的EZ区输送一个“擦除密码”与之比较,在“擦除密码比较计数器”不为“00H”的情况下,如果相比较的两代码完全一致,则相应的应用区的单元允许擦除,否则将禁止执行擦除操作。
  (7) 擦除密码比较计数区(EnAC ,n=l,2,3,4)
  擦除密码比较计数区的作用与SCAC的作用相类似。它对各应用区擦除密码连续输入错误的次数进行累计。最多连续8次不正确的密码比较之后,该区所控制的应用区的擦除操作即被锁死,从而导致该应用区有可能成为只读和允许单次写入的状态。
  (8) 应用数据区(AZn ,n=1,2,3,4)
  该区主要给用户使用。用于存储系统的相关数据记录和卡片标识等信息。应用数据区的写入与读出分别由该区的前两位Pn和Rn以及SV标志的状态控制,擦除操作则由该区的擦除密码控制。AT88SC1604设计了四个完全隔离的分区,其中1至3分区的单元容量分别是4K位、第4分区的单元容量为3.6K位。
  (9) 存储区测试区(MTZ)
  该区主要用于芯片生产后对EEPROM单元阵列进行各项性能测试该区不受任何控制区状态和标志状态的保护,允许对这个区进行读出、写人和擦除操作,但不能进行比较操作。
  应用实例
  基于上述1604芯片的特点,在石化系统的加油电路设计中,我们利用单片机芯片89C2051与IC卡电路组成一个独立系统,控制IC卡芯片的各项操作,该系统通过标准RS232通讯接口,与主控制板实现数据交换,这种电路设计在硬件方面兼容性较好,只要通过协调双方的IC卡通讯协议,可与任何带有RS232接口的控制板或微机相连接。
  单片机芯片89C2051的6个端口通过IOC卡座与IC卡相连接,P1.2口控制IC卡5V电源的通断,上电时单片机芯片处于复位状态, 6个端口均输出“1”,IC卡电源处于断开状态,ICSW为IC卡的检测端,当IC卡插入后,该端口与地相接,P1.3口检测到IC 卡已插入卡座,即接通IC卡电源,IC卡操作完毕后,切断IC卡电源,并提示用户可以拔卡。单片机芯片其他4个端口在接通IC卡电源后,根据对卡操作的需要,对IC卡进行复位、读卡、校对密码、擦卡、写卡等操作。
  硬件电路
  芯片的操作模式时序及设计程序
  AT88SCl604芯片的操作模式有五种。它们是通过配PGM、RST、CLK等引脚信号及内部地址计数器(IAC)的状态组合来实现。
  (1) 芯片复位操作: AT88SCl604有两种复位方式:上电复位和控制复位。
  上电复位: 上电复位是当芯片加电时的最初状态。上电复位属于芯片
  内部复位。它将使芯片内部所有的隐含标志复位到0状态。并使地址计数器复位到0位。
  控制复位: 当CLK为低时,在RST脚上的一个下降沿将便芯片产生复位操作。控制复位是将地址计数器复位到0位,而不影响任何内部标志的状态。
  注:1)RST为高时禁止计数
  2)在CLK端降低之后,延迟一个复位维持时间Trh(min 0.1 s)RST端复位(下降沿),同时地址计数器清零。地址计数器清零后延迟一个“数据复位有效时间”Tdvr(max 2 s)第0位单元的数据被送上I/O线。
  FWZCX: CLR ICPGM ;复位子程序
  NOP
  SETB ICREST
  NOP
  SETB ICSDA
  NOP
  CLR ICCLK ;时钟端清0
  NOP
  CLR ICREST ;复位端清0
  NOP
  RET
                          
                       
                          
                                (2)读出操作: 在进行读出操作时,必须保证使RST脚和PGM脚同时保持为低。如果对芯片各密码控制区进行读出操作,只能是在FUSE2未熔断且SV标志“1”时才能进行。
?
  如果对芯片各标识数据区进行读出操作,除FZ和IZ区外,需要使SV标志置“1”后才能执行。
  如果对芯片各应用数据区进行读出操作,需要在SV=1且Rn=1(n=1,2,3,4)状态下才能执行。
  注:在CLK的下降沿时,地址计数器加1,地址计数器当前所指的地址单元的数据被输出到I/O线上。因此,在整个时钟周期Tdk期间,包含了地址加1(INC)和读出(REA)两项操作。
  读IC数据子程序(R2:需读IC卡字节数,R0:数据区存放低位首地址)
  RICDAZ: MOV A,#KXXDZ ;卡信息地址送A
  LCALL SADR ;寻卡地址
  RICDA: MOV R3,#08
  RICDA1: SETB ICSDA
  NOP
  MOV C,ICSDA ;位读到A
  RLC A
  SETB ICCLK
  NOP
  CLR ICCLK
  NOP
  DJNZ R3,RICDA1
  MOV @R0,A ;8位数据送数据区
  DEC R0
  DJNZ R2,RICDA
  RET
  ; 寻IC卡位地址子程序(调用前16进制地址送ACC)
  SADR: LCALL FWZCX
  MOV B,#08
  MUL AB ;计算位地址: 16进制地址*8
  MOV R4,A ;低位位地址送R4
  MOV R5,B ;高位位地址送R5
  JNZ SADR1 ;低位地址不为0转
  MOV A,R5
  JZ SADR3
  DEC R5
  SADR1: SETB ICREST ;复位端置1
  SETB ICSDA
  CLR ICPGM
  CLR ICCLK
  CLR ICREST
  SADR2: SETB ICCLK
  SETB ICCLK
  CLR ICCLK
  CLR ICCLK
  DJNZ R4,SADR2
  MOV A,R5
  JZ SADR3
  DEC R5
  SJMP SADR2
  SADR3: RET
  ;
  (3)比较操作:在进行比较操作时,必须保证使RST脚和PGM脚同时保持为低。比较操作只能对芯片密码控制区执行,且由芯片内部来判断。在FUSE2未熔断时,只能在SV=0时,对SC区进行比较操作,对其它区的比较操作均为无效操作。SV=1时,芯片不做任何比较操作。在FUSE2熔断后,只能在SV=0时,对SC区进行比较操作,对其它区的比较操作均为无效操作。
  注:上述芯片密码比较时序图中是假设密码计数器中前两位为0,第三位寻到1的处理时序。
  有关芯片SC的时序关系如图2"5图所示:
  从操作(B)到(F),地址计数器不变,密码比较的过程是:
  (A)比较安全密码/擦除密码序列
  (B)在密码输入比较计数器中找出一位为“1”的位
  (C)在这个为“1”的单元写“0”
  (D)芯片输出“0”
  (E)如果比较成功,在PGM的上升沿安全密码/擦除密码的相应标志
  (SV,Sn或En)被置“1”,同时安全密码/擦除密码输入比较计数器
  (SCAC,SnAC或EnAC)被擦除。
  (F)如果擦除成功,相应安全密码/擦除密码标志被置“1”,芯片将输出“1”,否则芯片输出“0”。
  (G)在CLK的下降沿,地址计数器加1,并输出下一位的状态。
  比较用户密码子程序(地址0AH,0BH)
  CPSC: MOV R0,#CMM+2
  MOV R1,#06
  MOV R2,#02
  LCALL MVITI
  MOV A,#0AH
  LCALL SADR ;寻址
  MOV R0,#06
  LCALL BJMMRET
  ; 比较密码程序
  BJMM: CLR ICREST
  CLR ICPGM
  MOV R2,#02
  BJMM1: MOV A,@R0
  MOV R3,#08
  BJMM2: RLC A
  MOV ICSDA,C
  NOP
  SETB ICCLK
  NOP
  CLR ICCLK
  NOP
  DJNZ R3,BJMM2
  INC R0
  DJNZ R2,BJMM1
  MOV R2,#08;查8位
  BJMM4: SETB ICSDA
  NOP
  MOV C,ICSDA
  JC BJMM5 ;是1转
  SETB ICCLK ;指向下一位
  NOP
  CLR ICCLK
  NOP
  DJNZ R2,BJMM4
  LJMP BJMM8 ;计数器为00,卡锁死转
  BJMM5: SETB ICPGM
  NOP
  CLR ICSDA ;写0
  NOP
  SETB ICCLK
  NOP
  CLR ICPGM
  NOP
  LCALL DELY5
  CLR ICCLK
  NOP
  SETB ICSDA
  NOP
  MOV C,ICSDA
  JNC BJMM6
  LJMP BJMM7 ;未写入0,转出错
  BJMM6: SETB ICPGM
  NOP
  SETB ICSDA ;写1(擦除)
  NOP
  SETB ICCLK
  NOP
  CLR ICPGM
  NOP
  LCALL DELY5
  CLR ICCLK
  NOP
  SETB ICSDA
  NOP
  MOV C,ICSDA
  NOP
  SETB ICCLK
  JNC BJMM7 ;擦除不成功(密码错)转
  SETB FGICG1 ;置已校对密码标志
  RET
  BJMM7: CLR FGICG1 ;建密码错标记
  RET
  BJMM8: SETB FGICG2 ;置卡锁死标志
  RET
                          
                       
                          
                                (4)写入操作:写入操作实际包含着两种:当写入的数据为“0”时,本次操作称为“写入操作”。当写入的数据为“1”时,本次操作称为“擦除操作”。“写入操作”可以按位进行。但“擦除操作”只能按字节进行。即使操作时只对单独一位进行擦除,但执行的结果将使这一位所在的字节的所有8位全部置成“1”。
?
  对芯片的任何一个允许写入或擦除的区域,其执行写入和擦除的必要条件是芯片的SV标志为“1”状态。
  注:在CLK为低的状态下,PGM端从“0”到“1”,并延时一段“编程建立时间”(Tspr)之后,CLK端从“0”到“1”(这时是写入/擦除操作的开始),在此刻之前的Tds(数据建立时间)由外部向I/O线给出写入数据。CLK端在“1”状态应至少保持5ms(Tchp)之后,CLK端从“1”到“0”(这时是写入/擦除操作的结束)。应特别注意结束写入操作的CLK端的下降沿并不会使地址计数器加1,而只是将刚写入的“数据”读出, 以便外部验证刚才的“写入操作”。
  WICD: MOV A,#KDWDZ ;送擦除卡低位首地址
  LCALL SADR ;寻位地址
  MOV R2,#30 ;擦除30字节
  LCALL CPESC3 ;擦除
  MOV R0,#RAMDZ ;CPU的RAM中待写
  入数据地址
  MOV R2,#30 ;写入30字节
  WICDA: MOV A,@R0
  LCALL WICDAA
  INC R0
  DJNZ R2,WICDA
  RET
  ; 向IC卡写入子程序
  WICDAA: MOV R3,#08
  WICDAB: RLC A
  JC WICDAC ;该位为1,转
  SETB ICPGM ;打开编程位
  SETB ICPGM
  MOV ICSDA,C
  MOV ICSDA,C
  SETB ICCLK
  SETB ICCLK
  CLR ICPGM ;关闭编程位
  CLR ICPGM ;关闭编程位
  LCALL DELY5 ;延时5MS
  CLR ICCLK
  CLR ICCLK
  WICDAC: SETB ICCLK
  SETB ICCLK
  CLR ICCLK
  DJNZ R3,WICDAB
  RET
  ; 擦除应用区1
  CPESC3: SETB ICPGM ;打开编程位,擦除灰名
  单入口
  SETB ICPGM
  SETB ICSDA
  SETB ICSDA
  SETB ICCLK
  SETB ICCLK
  CLR ICPGM ;关闭编程位
  LCALL DELY5 ;延时5MS
  CLR ICCLK
  CLR ICCLK
  SETB ICCLK
  SETB ICCLK
  CLR ICCLK
  MOV R3,#07
  CPESC4: SETB ICCLK
  SETB ICCLK
  CLR ICCLK
  CLR ICCLK
  DJNZ R3,CPESC4
  DJNZ R2,CPESC3
  RET
  ; 延时(R7)
  DELY5: MOV R7,#0AH ;5毫秒延时
  DELY: PUSH 07
  DLY1: PUSH 07
  DLY2: PUSH 07
  DLY3: DJNZ R7,DLY3
  POP 07
  DJNZ R7,DLY2
  POP 07
  DJNZ R7,DLY1
  POP 07
  DJNZ R7,DELY
  RET
  结束语
  随着IC卡技术的飞速发展,金融机构、国家机关、公司企业、教育部门等领域的需求越来越迫切,应用越来越广泛。
                          
                       
                          
                               
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友 微信微信
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|文字版|手机版|DIY编程器网 ( 桂ICP备14005565号-1 )

GMT+8, 2024-11-2 11:33 , 耗时 0.091529 秒, 18 个查询请求 , Gzip 开启.

各位嘉宾言论仅代表个人观点,非属DIY编程器网立场。

桂公网安备 45031202000115号

DIY编程器群(超员):41210778 DIY编程器

DIY编程器群1(满员):3044634 DIY编程器1

diy编程器群2:551025008 diy编程器群2

QQ:28000622;Email:libyoufer@sina.com

本站由桂林市临桂区技兴电子商务经营部独家赞助。旨在技术交流,请自觉遵守国家法律法规,一旦发现将做封号删号处理。

快速回复 返回顶部 返回列表