资源描述
单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,SmartCard,智能卡网吧收费机设计(三),接触式逻辑加密卡读写软件设计,电子与信息工程学院,教学目标,SLE4442,卡,读主存储器,SLE4442,卡更新主存储器,SLE4442,卡,密码校验,产品开发,智能卡网吧收费机,开发任务:设计智能卡网吧收费机,卡型:,SLE4442,智能卡网吧收费机功能分析,1,、判断卡的合法性,2,、上网计时收费,产品开发之第三步:软件实现,智能卡网吧收费机工作流程,1,、判断卡的合法性:判断是否,SLE4442,卡、是否本网吧发行的卡、密码是否正确、卡中余额是否充足,复位与复位响应、读卡、校验密码,2,、计时收费:写卡扣款并发送允许上网代码,接收,PC,机计时时间到发出的控制信号,收到启动信号则重新判断卡合法性并扣款,收到停止信号则下电并提示允许拔卡,写卡,网吧收费机主程序流程图,插卡上电,是否,4442卡?,是否本网吧发行,?,是否合法卡,?,是否,4442卡?,插卡上电,更新余额,余额足否,?,发送上网允许代码,接收,PC,机控制信号,启动,?,N,发送错误代码,1,卡类型错误,发送错误代码,2,伪卡错误,发送错误代码,3,密码错误,发送错误代码,4,余额不足,N,N,N,Y,Y,Y,N,Y,下电,提示允许拔卡,IO BIT P1.0,CLK BIT P1.1,RST BIT P1.2,ICSW BIT P1.6,PWR BIT P1.7,PSC1 EQU 0FFH,PSC2 EQU 0FFH,PSC3 EQU 0FFH,COM EQU 20H,ADDR EQU 21H,DAT EQU 22H,NUM EQU 2FH,;*,主程序*,ORG 0030H,MAIN:CLR EA;,关中断,MOV SP,#60H;,设置堆栈,网吧卡功能测试主程序,LCALL PWRON;,上电控制,LCALL RESET;,复位,MOV R0,#30H;,设置读数据缓冲区,1,首地址,LCALL READ;,读主存储器,NOP;,断点,LCALL VERIFY;PSC,校验,XRL A,#07h;,断点,检查,PSC,校验是否正确,JNZ EXIT;PSC,校验失败退出,MOV R0,#50H;,设置写数据缓冲区首地址,LCALL WRITE;,修改主存储器,MOV R0,#40H;,设置读数据缓冲区,2,首地址,LCALL READ;,再次读主存储器,EXIT:NOP;,断点,LCALL PWROFF;,下电控制,SJMP$,如何实现卡读写控制?,接触式逻辑加密卡,SLE4442,与读写器如何交换数据?,如何启动,SLE4442,卡工作?,信息如何从卡中读出?,如何校验密码?,信息如何写入卡中?,软件设计方法,按,SLE4442,操作时序编制卡读写程序,通信协议,:2,线连接协议,满足,ISO7816,同步传送协议,数据传输:,CLK,信号下降沿有效。,复位和复位响应,(,Reset and Answer-to-Reset):,上电后启动芯片,符合,7816,RESET,子程序实现,命令,(,Command),命令,=,开始,+,(控制字,+,地址字,+,数据字),+,附加脉冲,+,停止,COMMAND,子程序实现,操作模式(,Mode):,读数据:,输出数据模式(,OUTGOING DATA MODE)SHIN,子程序实现,写入、擦除、校验:,处理模式(,PROCESSING MODE)PROCESS,子程序实现,分任务,1,:读主存储器,Read Main Memory,命令格式:,30,H +,字节地址,+*,模式:,OUTGOING,功能:读出从给定的字节地址(,N),开始,直到整个存储器,末尾,的主存储器内容。,说明:在该命令输入以后,接口设备,IFD,必须提供足够的时钟脉冲,起始地址为,N,时所需要的时钟脉冲数为,M=(256-N)*81 (N=0255),例如:地址为,7,EH(N=254),M=17,;*,读主存储器子程序*,READ:,MOV COM,#30H;,设置读主存储器控制字,MOV ADDR,#R_ADDR;,取读主存储器首地址,MOV DAT,#00H;,设置读主存储器数据字(任意),MOV R4,NUM;,数据个数,LCALL COMMAND;,送命令给卡,READ0:LCALL SHIN;,读数据(输出数据模式),MOV R0,A;,送数据入数据缓冲区,INC R0,DJNZ R4,READ0;,未读完继续,如何完成命令的发送呢?,SETB CLK;,发送一个附加脉冲,LCALL DELAY,CLR CLK,LCALL DELAY,SETB IO;,置位数据线,LCALL DELAY,RET,命令(,Command),复位响应以后,芯片等待着,命令,。,命令,=,开始,+,(控制字,+,地址字,+,数据字),+,附加脉冲,+,停止,。,开始:在,CLK,为,高,状态(,H),期间,,I/O,的,下降沿,为开始状态。,停止:在,CLK,为,高,状态(,H,),期间,,I/O,的,上升沿,为停止状态。,SLE4442,操作命令,;*,命令子程序*,;,该子程序送出三字节的,SLE4442,命令,;,入口参数,:,COM,为控制字,ADDR,为地址字,DAT,为数据字,COMMAND:SETB CLK,LCALL DELAY_12,CLR IO ;,开始,LCALL DELAY,CLR CLK,LCALL DELAY,MOV A,COM;,送命令字,LCALL SHOUT,MOV A,ADDR;,送地址字,LCALL SHOUT,MOV A,DAT;,送数据,LCALL SHOUT,LCALL DELAY,CLR IO,LCALL DELAY,SETB CLK;,附加脉冲,LCALL DELAY,SETB IO;,停止,RET,怎样向卡中写入一个字节?,;,sle4442,串行输入一个字节函数,即,MCU,向卡写入一字节,SHOUT:,PUSH B,MOV B,#08H,X42:RRC A,MOV IO,C,NOP,SETB CLK,LCALL DELAY,CLR CLK,LCALL DELAY,DJNZ B,X42,POP B,RET,操作模式,(,Mode),接收了一个命令之后,卡芯片处于,两种可能的模式:,(,1,)读数据:,输出数据,模式;,(,2,)写入、擦除、校验密码:,处理,模式。,输出数据,(,OUTGOING),模式,将,IC,卡芯片中的数据传送给读写器,在第一个,CLK,脉冲的下降沿之后,,I/O,线上的第一位数据变为有效。随后每增加一个时序脉冲,芯片内部的一位数据被送到,I/O,线上,,低位(,LSB),在前,。当所需要的最后一个数据送出之后,需要再,附加一个时钟脉冲,来把,I/O,线置成高阻状态(状态,Z)。,循环使用,SHIN,子程序,每调用一次读入卡输出的一个字节。,处理数据(,PROCESSING),模式,对,IC,卡芯片作内部处理(写,/,擦除,/,校验密码),芯片在第一个时钟脉冲的下降沿,将,I,O,线从高状态(,H,状态)拉到低状态(,L,状态)并开始处理。此后芯片在内部连续计时计数,直到第,n,个时钟脉冲之后的,附加一个时钟脉冲,的下降沿,I,O,线被再次置高,完成芯片的处理过程。在整个处理过程中,I,O,线被锁定成低状态。,;,sle4442,处理模式子程序,PROCESS:,MOV R7,#254D,CLR CLK,CLR IO,LCALL DELAY,PRO1:SETB CLK,LCALL DELAY,CLR CLK,LCALL DELAY,DJNZ R7,PRO1,SETB IO,LCALL DELAY,SETB CLK,LCALL DELAY,CLR CLK,RET,分任务,2:,PSC,校验,PSC,校验的过程并不是仅由比较校验数据命令来完成的,而是由多个命令构成的一个流程来共同完成,,流程一,:,用一个修改加密存储器命令将密码错误计数器中的一位写,0,。,流程二,:,连续用三条比较校验数据命令比较输入的用户密码与加密存储器中存储的密码。比较从字节,1,开始。,流程三,:,校验密码成功与否是用能否擦除密码错误计数器来证实的。如果校验成功,则擦除操作执行有效;如果校验不成功,擦除操作执行无效,密码错误计数器将不会恢复为“,111”,。但只要,EC,不全为,0,,就允许读写器对芯片进行重试。,读EC,写,EC,的一位为,0,EC=000?,校验三字节的密码,擦除,EC,读EC,EC=111?,读SM,*,*,修改,SM,地址,0,数据,校验,VD,地址,1、2、3,密码,1、2、3,修改,SM,地址,0,07H,读SM,*,*,Y,Y,N,N,校验通过,校验不成功,EC,中1,的个数,=,允许重试的次数,卡被锁死,比较校验数据,Compare,Varification,Data,命令格式:,33,H +,字节地址,+,数据,模式:,PROCESSING,功能:把输入的“用户密码”的各个字节与相对应的,PSC(,存放在加密存储器中)进行比较,说明:字节地址为,01,H03H,,数据为用户密码,读加密存储器,Read Security Memory,命令格式,:,3,lH+*+*,模式,:,OUTGOING,功能:类似于读保护存储器,可以读出,4,个字节的加密存储器的内容。,M=33,说明:密码比较失败时只能读出错误计数器,(,字节,0),的内容,字节,1、2、3,的内容将为,000000,(即不能读出密码),修改加密存储器,Updata,Security Memory,命令格式:,39,H +,字节地址,+,数据,模式,:,PROCESSING,功能:用所给出的数据修改加密存储器指定字节地址的内容(即修改错误计数器或修改密码),说明:该命令只能在,PSC,比较成功之后才能进行。该命令的执行时间和所需要的时钟脉冲与修改主存储器的情况相同,;*,PSC,校验子程序*,VERIFY:,MOV COM,#31H;,设置读加密存储器命令控制字,MOV ADDR,#00H;,设置读加密存储器命令地址字(,00,H,为错误计数器),MOV DAT,#00H;,设置读加密存储器命令数据字(任意),LCALL COMMAND;,送读加密存储器命令,LCALL SHIN;,读错误计数器,MOV 23H,A;,错误计数器值暂存(,23,H),单元,LCALL SHIN;,继续读入加密存储器后,3,个字节,MOV 24H,A,LCALL SHIN,MOV 25H,A,LCALL SHIN,MOV 26H,A,MOV A,23H,SETB IO;,附加一个脉冲,置数据线为高,LCALL DELAY,SETB CLK,LCALL DELAY,CLR CLK,JB ACC.0,NEXT0;,判断错误计数器中是否还有“,1”,;,JB ACC.1,NEXT1;,如有“,1”,则减去一个“,1”,;,JB ACC.0,NEXT2,LJMP EXIT1;,错误计数器为全“,0”,退出,NEXT0:MOV DAT,#06H,AJMP COMP0,NEXT1:MOV DAT,#04H,AJMP COMP0,NEXT2:MOV DAT,#00H,COMP0:MOV COM,#39H;,设置修改加密存储器命令控制字,MOV ADDR,#00H;,设置修改加密存储器命令地址字(错误计数器),LCALL COMMAND;,送修改加密存储器命令(错误计数器减一个,1,),LCALL PROCESS;,处理模式,MOV COM,#33H;,设置,PSC,校验命令控制字,MOV ADDR,#01H;,设置,PSC,校验命令地址字,MOV DAT,#PSC1;,取,PSC,第一个字节,LCALL COMMAND;,送,PSC,校验命令给卡,LCALL PROCESS;,处理模式,MOV COM,#33H;,设置,PSC,校验命令控制字,MOV ADDR,#02H;,设置,PSC,校验命令地址字,MOV DAT,#PSC2;,取,PSC,第二个字节,LCALL COMMAND;,送,PSC,校验命令给卡,LCALL PROCESS;,处理模式,MOV COM,#33H;,设置,PSC,校验命令控制字,MOV ADDR,#03H;,设置,PSC,校验命令地址字,MOV DAT,#PSC3;,取,PSC,第三个字节,LCALL COMMAND;,送,PSC,校验命令给卡,LCALL PROCESS;,处理模式,MOV COM,#39H;,设置修改加密存储器命令控制字,MOV ADDR,#00H;,设置修改加密存储器命令地址字(错误计数器),MOV DAT,#07H;,取修改加密存储器命令数据字(擦除错误计数器),LCALL COMMAND;,送修改加密存储器(擦除错误计数器)命令给卡,LCALL PROCESS;,处理模式,MOV COM,#31H;,设置读加密存储器命令控制字,MOV ADDR,#00H;,设置读加密存储器命令地址字(错误计数器),MOV DAT,#00H;,设置读加密存储器命令数据字(任意),LCALL COMMAND;,送读加密存储器命令给卡,LCALL SHIN;,读加密存储器的错误计数器,MOV 23H,A,LCALL SHIN;,读加密存储器的后三个字节,MOV 24H,A,LCALL SHIN,MOV 25H,A,LCALL SHIN,MOV 26H,A,MOV A,23H;EC,值送,A,SETB IO;,附加一个脉冲,置数据线为高,LCALL DELAY,SETB CLK,LCALL DELAY,CLR CLK,EXIT1:RET,分任务,3,:修改主存储器,Updata,Main Memory,命令格式:,38,H +,字节地址,+,数据,模式:,PROCESSING,功能:用所给出的数据修改主存储器指定字节地址(,N),的内容,说明:,通常,要改变一个数据需要先进行擦除,再进行写入两项操作。如果在被寻址的字节里位中没有一个字位需要从变到,则可以不进行擦除处理。反之亦然,在被寻址的字节中,如果没有一个字位需要从变到,则可以不作写入处理,写人或擦除操作一次至少要耗费,.,时间。因此,在处理模式期间,可能发生下列几种情况之一:,擦除和写入,(5,ms):,相应于,M256,个时钟脉冲,只写入不擦除,(2.5,ms):,相应于,M=124,个时钟脉冲,只擦除不写入,(2.5,ms):,相应于,M124,个时钟脉冲。,;*,修改主存储器子程序*,WRITE:,MOV R4,NUM;,取要写的字节数,MOV COM,#38H;,设置修改主存储器控制字,WRITE0:,MOV ADDR,#W_ADDR;,取修改主存储器首地址,MOV A,R0,MOV DAT,A;,取修改主存储器数据字,LCALL COMMAND;,送修改主存储器命令给卡,LCALL PROCESS;,处理模式,INC W_ADDR;,地址字指向主存储器下一个单元,INC R0;,指向下一个数据,DJNZ R4,WRITE0;,未写完继续,RET,实训,接触式逻辑加密卡读写控制,第一阶段:读卡,1,、通过复位应答方式读入,SLE4442,卡主存储器前,4,个字节的内容。,2,、通过读主存储器方式读入,SLE4442,卡主存储器前,4,个字节的内容。,3,、读主存储器任意起始地址、任意长度的数据块内容。,课前准备:,1,、在原有,AT24C01,卡接口电路上增加,RST,连线及其上拉电阻。,2,、完成程序的编写、编译。,第二阶段:校验密码、写卡,1,、校验密码,校验成功则设标志寄存器,B,为00,H,,否则设为,FFH,并退出。,2,、判断校验密码是否成功,成功则在主存储器任意起始地址、任意长度的数据块中写入数据。否则退出。,注意:,校验密码错误退出程序后,请用通用读写器重新输入正确密码,以恢复,EC,的次数,切勿反复出错退出导致卡锁死!,思考,目前大多数网吧卡仅保护发卡方利益(校验卡的合法性),并未保护持卡人利益(校验持卡人的合法性),即:若网吧卡丢失,可为非法持卡人盗用。如何避免网吧卡被非法持卡人盗用?如何实现挂失功能?,作业,设计,IC,卡自动加油机,分析系统需求,选择卡型。,设计,IC,卡加油机硬件电路,画出功能模块图。,分析,IC,卡加油机工作流程,画出主程序流程图。,
展开阅读全文