接触式IC卡读卡器是怎样设计与实现的
IC卡是集成电路卡(Integrated Circuit Card)的简称,是镶嵌集成电路芯片的塑料卡片,其外形和尺寸都遵循国际标准(ISO/IEC 7816,GB/T16649)。芯片一般采用非易失性的存储器(ROM、EEPROM)、保护逻辑电路、甚至带微处理器CPU。带有CPU的IC卡才是真正的智能卡。
集成电路(integrated circuit)是一种微型电子器件或部件。采用一定的工艺,把一个电路中所需的晶体管、电阻、电容和电感等元件及布线互连一起,制作在一小块或几小块半导体晶片或介质基片上,然后封装在一个管壳内,成为具有所需电路功能的微型结构;其中所有元件在结构上已组成一个整体,使电子元件向着微小型化、低功耗、智能化和高可靠性方面迈进了一大步。它在电路中用字母“IC”表示。集成电路发明者为杰克·基尔比(基于锗(Ge)的集成电路)和罗伯特·诺伊思(基于硅(Si)的集成电路)。当今半导体工业大多数应用的是基于硅的集成电路。
是20世纪50年代后期一60年代发展起来的一种新型半导体器件。它是经过氧化、光刻、扩散、外延、蒸铝等半导体制造工艺,把构成具有一定功能的电路所需的半导体、电阻、电容等元件及它们之间的连接导线全部集成在一小块硅片上,然后焊接封装在一个管壳内的电子器件。其封装外壳有圆壳式、扁平式或双列直插式等多种形式。集成电路技术包括芯片制造技术与设计技术,主要体现在加工设备,加工工艺,封装测试,批量生产及设计创新的能力上。
接触式IC卡分三种类型:存储卡或记忆卡(Memory Card);带有CPU的智能卡(Smart Card);带有显示器及键盘、CPU的超级智能卡。优点是存储容量大,安全保密性强,携带方便。
例如:
我们现在正在使用的手机的SIM卡、UIM卡、USIM卡,现在银行正在推广的金融IC卡,都属于CPU卡,属于具备运算能力的智能卡。
宾馆房门的房卡,早期的医保卡,会员卡,属于数据存储卡,这类卡片部分带有逻辑保护,部分不带有。但是都不具备数据处理能力。
IC卡读写器要能读写符合ISO7816标准的IC卡。IC卡接口电路作为IC卡与IFD内的CPU进行通信的唯一通道,为保证通信和数据交换的安全与可靠,其产生的电信号必须满足下面的特定要求。
1.1 完成IC卡插入与退出的识别操作
IC卡接口电路对IC卡插入与退出的识别,即卡的激活和释放,有很严格的时序要求。如果不能满足相应的要求,IC卡就不能正常进行操作;严重时将损坏IC卡或IC卡读写器。
(1)激活过程
为启动对卡的操作,接口电路应按顺序激活电路:
◇RST处于L状态;
◇根据所选择卡的类型,对VCC加电A类或B类;
◇VPP上升为空闲状态;
◇接口电路的I/O应置于接收状态;
◇向IC卡的CLK提供时钟信号(A类卡1~5MHz,B类卡1~4MHz)。
在t’a时间对IC卡的CLK加时钟信号。I/O线路应在时钟信号加于CLK的200个时钟周期(ta)内被置于高阻状态Z(ta 时间在t’a之后)。时钟加于CLK后,保持RST为状态L至少400周期(tb)使卡复位(tb在t’a之后)。在时间t’b,RST被置于状态H。I/O上的应答应在RST上信号上升沿之后的400~40 000个时钟周期(tc)内开始(tc在t’b之后)。
在RST处于状态H的情况下,如果应答信号在40 000个时钟周期内仍未开始,RST上的信号将返回到状态L,且IC卡接口电路按照图2所示对IC卡产生释放。
(2)释放过程
当信息交换结束或失败时(例如,无卡响应或卡被移出),接口电路应按图2所示时序释放电路:
◇RST应置为状态L;
◇CLK应置为状态L(除非时钟已在状态L上停止);
◇VPP应释放(如果它已被激活);
◇I/O应置为状态A(在td时间内没有具体定义);
◇VCC应释放。
1.2 通过触点向卡提供稳定的电源
IC卡接口电路应能在表1规定的电压范围内,向IC卡提供相应稳定的电流。
1.3 通过触点向卡提供稳定的时钟
IC卡接口电路向卡提供时钟信号。时钟信号的实际频率范围在复位应答期间,应在以下范围内:A类卡,时钟应在1~5MHz;B类卡,时钟应在1~4MHz。
复位后,由收到的ATR(复位应答)信号中的F(时钟频率变换因子)和D(比特率调整因子)来确定。
时钟信号的工作周期应为稳定操作期间周期的40%~60%。当频率从一个值转换到另一个值时,应注意保证没有比短周期的40%更短的脉冲。
IC卡的分类及芯片型号
非加密存储器卡:卡内的集成电路芯片主要是EEPROM,具有数据存储功能,不具有数据处理功能和硬件加密功能。
逻辑加密存储器卡:在非加密存储器卡的基础上增加了加密逻辑电路,加密逻辑电路通过校验密码方式来保护卡内的数据对于外部访问是否开放,但只是低层次的安全保护,无法防范恶意性的攻击。
CPU卡:也称智能卡,卡内的集成电路中带有微处理器CPU、存储单元(包括随机存储器RAM、程序存储器ROM(FLASH)、用户数据存储器EEPROM)以及芯片操作系统COS。装有COS的CPU卡相当于一台微型计算机,不仅具有数据存储功能,同时具有命令处理和数据安全保护等功能。
IC卡芯片型号:
Siemens芯片型号
简 述
SLE4406
104位加密卡,存在读数据、写数据、密码、个人化及借位擦除操作。
SLE4442
256字节加密卡,存在读数据、写数据、保护数据以及密码操作。
SLE4428
1024字节加密卡,存在读数据、写数据、保护数据以及密码操作。
SLE4404
416bit,两级加密。
SLE4418
1kbyte,带写保护。
SLE4432
256byte,带写保护。
Atmel芯片型号
简 述
AT24C01A
128字节非加密卡,只存在读、写两种操作。
AT24C64
8192字节非加密卡,只存在读、写两种操作。
AT88SC102
1024位逻辑加密卡,存在读写操作、擦除操作、密码操作、控制位操作。
AT88SC1604
16K位逻辑加密卡,存在读写操作、密码操作、擦除操作及熔断操作。
AT45D041
540,672字节非加密卡,只存在读、写两种操作。
AM4442
256字节加密卡,存在读数据、写数据、保护数据以及密码操作。
BL7430E
存储卡芯片容于SLE4405E(SIEMENS)104位EEPROM智能计数器。
PHILIP芯片型号
简 述
Mifare One
1K字节、16个扇 区、每个扇区4个块、由2个密钥控制读写、每个块16个字节。
Mifare light
容量为384位,分为12页,每页为4个字节,128位的数据区。
复旦芯片型号
简 述
FM4442
存储卡芯片,采用0.6微米CMOS EEPROM工艺,容量为256×8BitEEPROM,带写保护功能及编程安全码认证功能。外围接口遵循ISO7816协议标准(同步传输),可广泛应用于各类IC存储卡。
FM4428
存储卡芯片,采用0.6微米CMOS EEPROM工艺,容量为1K×8BitEEPROM,带写保护功能及编程安全码认证功能。外围接口遵循ISO7816协议标准(同步传输),可广泛应用于各类IC存储卡。
贝岭芯片型号
简 述
BL7442
存储卡芯片兼容于SLE4442(SIEMENS)2K位EEPROM加密存储器。广泛用于各类电子消费卡、电话卡、出租车卡等消费领域。适用于商业电子消费卡、校园卡、就餐卡、考勤卡、查询卡、门锁卡、管理卡等。
BL7448
存储卡芯片兼容于SLE4428(SIEMENS)8K位EEPROM加密存储器。广泛用于各类电子消费卡、电话卡、出租车卡等消费领域。适用于交通管理卡、税务管理卡、医疗保健卡、公用事业管理卡等。
在现实生活中,某些特殊的操作会涉及到许多机密,就需要更高权限的人员进行授权。如银行卡密码挂失重置的过程,就需要特殊身份的人员进行授权,而高权限人员一般都是通过在读卡器中插入卡片的方式进行授权。这种接触式IC卡具有很高的安全性,常用于身份认证之类的用途。
本文阐述了如何利于ST微处理器实现一个接触式IC卡读写器。
2.系统总体方案
读卡器的本质就是为PC机与IC卡之间提供一个通信的媒介。负责解释PC语言和IC卡语言,充当一个翻译的作用。为此需要一个接触式IC卡,用于身份认证;要有一个通用的对外接口,方便系统连接;提供一个或多个工作状态的灯;故障时能提供一个明确的报警,以提醒用户。如图1所示。
从图1可知:系统采用RS232作为PC接口,RS232是PC机的标配,适应范围较广。行业中使用最多的也是RS323,方便读卡器与以前系统相接;采用STM32F103作为处理器,其UART接口能满足PC机与系统之间的通信要求,其PWM功能能实现终端与IC卡之间的通信要求。
为防止终端出现故障时损坏IC卡,在STM32F103与IC卡之间,系统提供一个保护芯片,即TDA8024。TDA8024在CPU与IC卡之间提供一个透明通道,但可以为IC卡插入取出时提供一个静电保护,在IC卡发生接触故障或用户非法取出IC卡时,能提供一个快速下电过程,以保护IC卡。
3.系统硬件设计
系统硬件主要分为四个部分,分别是主控(STM32F103)设计、RS232驱动设计、IC卡驱动设计、电源设计。
3.1 主控设计
系统主控芯片为STM32F103。STM—32F103使用高性能的ARM Cortex—M3 32位的RISC内核,工作频率为72MHz,内置高速存储器(高达128K字节的闪存和20K字节的SRAM),丰富的增强I/O端口和联接到两条APB总线的外设。所有型号的器件都包含2个12位的ADC、3个通用16位定时器和一个PWM定时器,还包含标准和先进的通信接口:多达2个I2C和SPI、3个USART、一个USB和一个CAN。
系统主要使用RS232、3个定时器(PWM)两个功能。STM32F103硬件电路图如图2。
TX、RX为UART接口,负责与PC机通信。
BUZZER为蜂鸣器控制口。
LED_PWRON为卡片上电指示灯控制口。
LED_PRES为卡片插入指标灯控制口。
CLK、RST、IO、PWRSRC、CMDVCC、OFF与TDA8024接口,负责与IC卡通信。
3.2 RS232驱动设计
STM32F103的UART接口为TTL电平,PC机串口为RS232电平,两者之间通过SP3232进行转换。RS232驱动电路图如图3。
3.3 IC卡驱动设计
STM32F103虽然自带了兼容ISO7816协议的UART接口,但UART对时钟的处理比较弱,并不能确保产品能通过银联相关认证。因此,系统使用定时器中的PWM输出及输入捕捉两项功能来模拟ISO7816。这种模拟可以使用IC卡通信精确到单个时钟沿。
IC卡驱动电路图如图4所示。
CMDVCC为电源开关,低电平有效。CMDVCC用普通IO口线控制。
PWRSRC为电源选择,高电平为5V,低电平为3V。系统不支持1.8V卡,目前国内一般都使用5V卡。PWRSRC用普通IO口线直接控制。
RST为复位,低电平有效。RST使用定时器4的PWM输出功能,确保波形精确性。
CLK为时钟。CLK使用定时器2的PWM输出功能,确保波形精确性。
IO为数据线,双向输入输出。IO使用定时器3的输入捕捉功能,确保每个数据所在的时钟沿。
OFF为卡检测线。高电平为有卡。同时在电源打开时,若发生硬件故障时,会自动改变为低电平,同时自动去激活操作,以保护卡片。OFF使用中断口,以便于实时监测卡片动态。
3.4 电源设计
系统通过USB供电,USB接口为5V,STM32F103电压为2.0V—3.6V,TDA8024为3V或5V,因此系统最终采用3.3V供电。系统使用LM1117—3.3稳压芯片提供一个稳定的3.3V电源。
电源电路图如图5。
4.系统软件设计
系统软件设计主要包括IC卡驱动设计、RS232驱动设计、主流程设计。本文主要对IC卡驱动的设计进行详细介绍。RS232驱动设计及主流程都比较简单,就不再单独介绍。
IC卡驱动的设计主要有两点,物理传输与通信协议。
4.1 物理传输
物理传输包括触点激活时序、复位时序、触点释放时序、字符帧时序。
物理传输设计的总方案是用定时器的PWM输出、输入捕捉实现RST、CLK、IO的功能,利用定时器方式能实现波形精确到单个CLK。RST、CLK、IO各自使用一个定时器。
定时器初始化步骤:
CLK、RST、IO为普通IO口推挽输出模式。
CLK:PWM输出,输出3MHz。
RST:PWM输出,0—42250输出低电平,42250—65525输出高电平。
IO:输入捕捉,根据捕捉寄存器来确认所处CLK。
RST、IO所处定时器与CLK定时器同步启动。
启动CLK定时器。
4.1.1 触点激活时序
ISO7816协议要求IC卡正确插入接口设备后,触点必须按如下方式激活,如图6。 触点激活时序不是一个单独的时序,它是伴随着冷复位时序一起实现的。
4.1.2 复位时序
复位时序又分为冷复位时序和热复位时序。
在触点激活后,终端将发出一个冷复位信号,并从IC卡获得一个复位应答信号,如图7,过程如下:
在冷复位过程之后,如果收到的复位应答信号不能满足规定,终端将启动热复位并从IC卡获得复位应答,见图8。其过程如下:
系统为编程方便,将冷复位时序和热复位时序统一合为一个复位时序。根据复位标志是冷复位标志还是热复位标志执行不同步骤:
若热复位,则IO切换至输入捕捉模式。
若冷复位,则CMDVCC=1(关闭电源),PWRSRC=1(国内卡片一般为5V),RST=0,CLK=0,IO=0。
等待,确保RST定时器小于100。
若冷复位,则CLK切换至PWM输出模式,输出时钟。
等待,确保RST定时器大于42550。
RST切换到普通IO口模式,且输出高电平。
接收ATR数据。
4.1.3 触点释放时序
作为卡片操作的最后一步,根据交易的正常或异常结束(包括在卡片操作过程中将卡片从接口设备中拔出),终端必须如下释放接口设备触点,如图9。
根据系统要求,按如下步骤设计:
RST切换到普通IO模式,且输出低电平
等待10个NOP周期。
CLK切换至普通IO模式,且输出低电平
等待10个NOP周期。
IO切换至普通IO模式,且输出低电平
等待10个NOP周期。
CMDVCC输出高电平,关闭电源。
4.1.4 字符帧
数据在I/O上以如下所述的字符帧方式传输,如图10。
字符帧时序分为读、写两部分。
根据字符帧时序,按如下步骤设计字符帧读操作:
计算读操作起始时间及结束时间。
通过定时器延时至起始时刻,清捕捉标志。
检测捕捉标志,且判断时间是否超时。
若无捕捉标志或捕捉标志已超时,退出,返回起始位超时错误。
延时0.2etu,检测IO状态,若IO为高,则跳至第3步执行。
延时0.2etu,检测IO状态,若IO为高,则跳至第3步执行。
延时0.2etu,检测IO状态,若IO为高,则跳至第3步执行。
延时0.4etu。
延时0.5etu,检测IO状态,IO状态即为数据位。延时0.5etu。
循环9次,最后一位为校验位。(国内卡一般都是T0卡,因此系统仅T0协议)
判断检验位,若校验位正确,退出,返回无故障。
若是第5次校验错误,退出,返回校验错误。
延时0.5etu,IO输出低电平,延时1etu。
跳至第1步执行。
根据字符帧时序,按如下步骤设计字符帧写操作:
通过定时器延时至起始时刻。
IO输出低电平,延时1etu。
IO根据发送字节及校验位连续输出9次电平,每次输完延时1etu。
延时1etu,检测IO状态。
若IO为高电平,退出,返回无故障。
若连续5次发送错误,退出,返回发送错误。
重新计算发送起始时刻,起始时刻为同方向最小发送间隔时间。
跳到第1步执行。
4.2 通信协议
通信协议同时也是IC卡对外的接口,主要分为上电、下电、APDU三个接口。
4.2.1 上电
上电接口包括了触点激活时序、触点释放时序、复位时序三个部分,同时判断接收的ATR数据是否符合ISO7816规范。
上电过程如下:
检测当前状态卡状态,若是处于激活状态,则先下电。
置冷复位状态。
IC卡复位。
接收ATR第一个数据。
若第一个数据不是3B或3F,退出,返回ATR_TS错误。
接收T0,并根据T0确定后续TA1、TB1、TC1、TD1、历史字符是否存在。
若存在TA1,接收TA1。否则跳过此步骤。
若存在TB1,接收TB1。否则跳过此步骤。
若存在TC1,接收TC1。否则跳过此步骤。
若存在TD1,接收TD1,并根据TD1确定后续TA2、TB2、TC2、TD2是否存在。否则跳过此步骤。
若存在TA2,接收TA2。否则跳过此步骤。
若存在TB2,接收TB2。否则跳过此步骤。
若存在TC2,接收TC2。否则跳过此步骤。
若存在TD2,接收TD2,并根据TD1确定后续TA3、TB3、TC3、TD3是否存在。否则跳过此步骤。
若存在TA3,接收TA3,否则跳过此步骤。
若存在TB3,接收TB3,否则跳过此步骤。
若存在TC3,接收TC3,否则跳过此步骤。
若存在TD3,接收TD3,并根据TD1确定后续TA4、TB4、TC4是否存在。否则跳过此步骤。
若存在TA4,接收TA4,否则跳过此步骤。
若存在TB4,接收TB4,否则跳过此步骤。
若存在TC4,接收TC4,否则跳过此步骤。
若存在历史字符,则接收历史字符。
根据TA1、TA2确定是否需要发送PPS帧。若需要则发送PPS帧。
根据ATR规范,判断ATR数据是否正确,并确定与之相关的各项参数。
若ATR数据符合规范,则置卡片激活状态,退出,返回ATR数据。
若错误码为拒绝ATR,且当前复位为冷复位,则置热复位标志,跳至第3步骤执行。若当前复位为热复位,则下电,退出,返回拒绝ATR错误码。
其他错误码,则下电,退出,返回相应错误码。
4.2.2 下电
下电操作仅包括了触点释放时序。 触点释放时序
清卡片激活状态标志。
在卡片处于激活状态时,用户可能会因某种原因突然将卡片取走,为了在这种状态下保护卡片,TDA8024会强制性执行芯片级的下电操作。且OFF采用中断模式,会实时检测到此种状态,将CMDVCC置高,关闭卡片电源。
4.2.3 APDU
APDU分为C—APDU、R—APDU。
C—APDU分为4种情况,见表1。
APDU实现步骤:
检测C—APDU数据正正确性,若不正确,则退出,返回输入参数错误码。
确认INS、LE、LC等参数。若C—APDU是第1种情况,则置P3=0。
发送命令头CLA、INA、P1、P2、P3。
接收过程字。
若过程字是INS,且LC>0,则发送LC个数据。跳至第4步骤。
若过程字是INS,且LE>0,则接收LE个数据。跳至第4步骤。
若过程字是INS,且LC=0、LE=0,则退出,返回IC故障错误码。
若过程字是INS补码,且LC>0,则发送1个数据,LC——,跳至第4步骤。
若过程字是INS补码,且LE>0,则接收1个数据,LE——,跳至第4步骤。
若过程字是INS补码,且LC=0、LE=0,则退出,返回IC故障错误码。
若过程字是60,则等待一个额外时间后,跳至第4步骤。
若过程字是61XX,且LC>0,则退出,返回IC卡错误错误码。
若过程字是61XX,且LC=0,则发送00C00000XX,且LE=XX,跳至第4步骤。
若过程字是6CXX,且LC>0,则退出,返回IC卡错误错误码。
若过程字是6CXX,且LC=0,则P3=XX,重新发送命令码,且LC=0、LE=XX,跳至第4步骤。
若过程字是6XXX,则表明收到的是状态字,则退出,返回无故障。此处无故障表示操作无故障,具体的状态由上层根据状态字判断。
若过程字是其他数据,则退出,返回IC卡错误错误码。
5.总结
本文创作的特点:利用定时器的PWM输出与输入捕捉功能,设计出一种符合ISO7816协议的字符收发时序,这种时序比一般单片机自带的兼容ISO7816协议的UART能更精细精确的控制,更能通过银联的相关认证。同时,只要带有PWM输出、输入捕捉功能的单片机都能方便的进行移植。
责任编辑:Davia
【免责声明】
1、本文内容、数据、图表等来源于网络引用或其他公开资料,版权归属原作者、原发表出处。若版权所有方对本文的引用持有异议,请联系拍明芯城(marketing@iczoom.com),本方将及时处理。
2、本文的引用仅供读者交流学习使用,不涉及商业目的。
3、本文内容仅代表作者观点,拍明芯城不对内容的准确性、可靠性或完整性提供明示或暗示的保证。读者阅读本文后做出的决定或行为,是基于自主意愿和独立判断做出的,请读者明确相关结果。
4、如需转载本方拥有版权的文章,请联系拍明芯城(marketing@iczoom.com)注明“转载原因”。未经允许私自转载拍明芯城将保留追究其法律责任的权利。
拍明芯城拥有对此声明的最终解释权。