• 工作总结
  • 工作计划
  • 心得体会
  • 述职报告
  • 事迹材料
  • 申请书
  • 作文大全
  • 读后感
  • 调查报告
  • 励志歌曲
  • 请假条
  • 创先争优
  • 毕业实习
  • 财神节
  • 高中主题
  • 小学一年
  • 名人名言
  • 财务工作
  • 小说/有
  • 承揽合同
  • 寒假计划
  • 外贸信函
  • 励志电影
  • 个人写作
  • 其它相关
  • 生活常识
  • 安全稳定
  • 心情短语
  • 爱情短信
  • 工会工作
  • 小学五年
  • 金融类工
  • 搞笑短信
  • 医务工作
  • 党团工作
  • 党校学习
  • 学习体会
  • 下半年工
  • 买卖合同
  • qq空间
  • 食品广告
  • 办公室工
  • 保险合同
  • 儿童英语
  • 软件下载
  • 广告合同
  • 服装广告
  • 学生会工
  • 文明礼仪
  • 农村工作
  • 人大政协
  • 创意广告
  • 您现在的位置:六七范文网 > 安全稳定 > 正文

    ic卡读卡器_接触式IC卡读卡器的设计与实现

    来源:六七范文网 时间:2019-04-06 04:42:53 点击:

      【摘要】针对接触式IC卡常用于身份认证,要求其高保密性,本文提出利用定时器的PWM输出与输入捕捉功能,设计出一种符合ISO7816协议的字符收发时序,利于ST微处理器实现一个接触式IC卡读写器。
      【关键词】保密性;ISO7816协议;ST微处理器
      1.引言
      在现实生活中,某些特殊的操作会涉及到许多机密,就需要更高权限的人员进行授权。如银行卡密码挂失重置的过程,就需要特殊身份的人员进行授权,而高权限人员一般都是通过在读卡器中插入卡片的方式进行授权。这种接触式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输出、输入捕捉功能的单片机都能方便的进行移植。
      参考文献
      [1]STM32F103中文数据手册.
      [2]http://www.zlgmcu.com/goldencard/MF/TDA8024.asp.
      [3]1117稳压模块产品使用手册.
      [4]http://wenku.baidu.com/view/6d1fdb0116fc700abb68fc2c.html.
      [5]中国金融集成电路(IC)卡规范第3部分:与应用无关的IC卡与终端接口规范.
      作者简介:何碧贵(1980—),女,硕士,重庆电子工程职业学院讲师,研究方向:数字信号处理,交换网络。

    推荐访问:接触 设计 卡读卡器 IC