
【摘要】针对接触式IC卡常用于身份认证,要求其高保密性,本文提出利用定时器的PWM输出与输入捕捉功能,设计出一种符合ISO7816协议的字符收发时序,利于ST微处理器实现一个接触式IC卡读写器。 转载请注明来源。原文地址:http://www.xzbu.com/8/view-3784776.htm中国论文网 http://www.xzbu.com/8/view-3784776.htm 【关键词】保密性;ISO7816协议;ST微处理器 1.引言7 @' I V3 a2 f+ p 在现实生活中,某些特殊的操作会涉及到许多机密,就需要更高权限的人员进行授权。如银行卡密码挂失重置的过程,就需要特殊身份的人员进行授权,而高权限人员一般都是通过在读卡器中插入卡片的方式进行授权。这种接触式IC卡具有很高的安全性,常用于身份认证之类的用途。 本文阐述了如何利于ST微处理器实现一个接触式IC卡读写器。 2.系统总体方案1 N+ v/ p* c6 `8 r* U# o8 ? 读卡器的本质就是为PC机与IC卡之间提供一个通信的媒介。负责解释PC语言和IC卡语言,充当一个翻译的作用。为此需要一个接触式IC卡,用于身份认证;要有一个通用的对外接口,方便系统连接;提供一个或多个工作状态的灯;故障时能提供一个明确的报警,以提醒用户。如图1所示。 从图1可知:系统采用RS232作为PC接口,RS232是PC机的标配,适应范围较广。行业中使用最多的也是RS323,方便读卡器与以前系统相接;采用STM32F103作为处理器,其UART接口能满足PC机与系统之间的通信要求,其PWM功能能实现终端与IC卡之间的通信要求。7 H! @ ?; y% e& a 为防止终端出现故障时损坏IC卡,在STM32F103与IC卡之间,系统提供一个保护芯片,即TDA8024。TDA8024在CPU与IC卡之间提供一个透明通道,但可以为IC卡插入取出时提供一个静电保护,在IC卡发生接触故障或用户非法取出IC卡时,能提供一个快速下电过程,以保护IC卡。' d' w8 G: V r; v# V1 P 3.系统硬件设计 v; z" i2 q; `. {, O; u4 n 系统硬件主要分为四个部分,分别是主控(STM32F103)设计、RS232驱动设计、IC卡驱动设计、电源设计。8 a* b' v: |+ Q1 P6 P( M 3.1 主控设计3 p, ]4 K6 f+ w& x, |7 z/ X8 \ 系统主控芯片为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机通信。( \; B& b. l# r" b( q 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卡驱动设计$ X. L( k9 k: u. z0 @6 Y" b7 l STM32F103虽然自带了兼容ISO7816协议的UART接口,但UART对时钟的处理比较弱,并不能确保产品能通过银联相关认证。因此,系统使用定时器中的PWM输出及输入捕捉两项功能来模拟ISO7816。这种模拟可以使用IC卡通信精确到单个时钟沿。( Y" a2 g2 I2 v2 h g. }" a IC卡驱动电路图如图4所示。/ }0 J+ l0 P& F& L2 h1 g CMDVCC为电源开关,低电平有效。CMDVCC用普通IO口线控制。4 q& {# O7 Y1 e$ g PWRSRC为电源选择,高电平为5V,低电平为3V。系统不支持1.8V卡,目前国内一般都使用5V卡。PWRSRC用普通IO口线直接控制。 RST为复位,低电平有效。RST使用定时器4的PWM输出功能,确保波形精确性。 CLK为时钟。CLK使用定时器2的PWM输出功能,确保波形精确性。' t2 w" `1 h- I$ C 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电源。( [- g7 y4 k5 v 电源电路图如图5。 4.系统软件设计 系统软件设计主要包括IC卡驱动设计、RS232驱动设计、主流程设计。本文主要对IC卡驱动的设计进行详细介绍。RS232驱动设计及主流程都比较简单,就不再单独介绍。 IC卡驱动的设计主要有两点,物理传输与通信协议。6 }' q q. J9 I6 b" t4 Y 4.1 物理传输 物理传输包括触点激活时序、复位时序、触点释放时序、字符帧时序。 物理传输设计的总方案是用定时器的PWM输出、输入捕捉实现RST、CLK、IO的功能,利用定时器方式能实现波形精确到单个CLK。RST、CLK、IO各自使用一个定时器。+ T+ M0 q* ^4 H 定时器初始化步骤: CLK、RST、IO为普通IO口推挽输出模式。. n& I: z& f5 r8 R& | CLK:PWM输出,输出3MHz。 RST:PWM输出,0—42250输出低电平,42250—65525输出高电平。 IO:输入捕捉,根据捕捉寄存器来确认所处CLK。/ ~0 C- }/ f9 X* V& z" S RST、IO所处定时器与CLK定时器同步启动。 启动CLK定时器。 4.1.1 触点激活时序3 _2 H' a5 J- J" _0 s# V8 W+ Y ISO7816协议要求IC卡正确插入接口设备后,触点必须按如下方式激活,如图6。 触点激活时序不是一个单独的时序,它是伴随着冷复位时序一起实现的。 4.1.2 复位时序 复位时序又分为冷复位时序和热复位时序。3 z' t% A% ~# i4 p 在触点激活后,终端将发出一个冷复位信号,并从IC卡获得一个复位应答信号,如图7,过程如下:3 o% G9 b' \3 f" Y4 y1 j9 k; B' w 在冷复位过程之后,如果收到的复位应答信号不能满足规定,终端将启动热复位并从IC卡获得复位应答,见图8。其过程如下: 系统为编程方便,将冷复位时序和热复位时序统一合为一个复位时序。根据复位标志是冷复位标志还是热复位标志执行不同步骤: 若热复位,则IO切换至输入捕捉模式。 若冷复位,则CMDVCC=1(关闭电源),PWRSRC=1(国内卡片一般为5V),RST=0,CLK=0,IO=0。( H" X+ M7 ?4 G, |$ T5 V* h 等待,确保RST定时器小于100。" V# E1 N) x% v5 C) R9 e 若冷复位,则CLK切换至PWM输出模式,输出时钟。0 J! X7 f$ H- G, J* G! n 等待,确保RST定时器大于42550。' {5 Y8 d$ W* Y* Y! ^ RST切换到普通IO口模式,且输出高电平。 接收ATR数据。& P8 T8 [; F/ k 4.1.3 触点释放时序; C8 m6 v! z8 U; p& e' t( M& V6 U 作为卡片操作的最后一步,根据交易的正常或异常结束(包括在卡片操作过程中将卡片从接口设备中拔出),终端必须如下释放接口设备触点,如图9。3 D- O) w' X! I& }: ~& J; p( v* j 根据系统要求,按如下步骤设计:$ B b0 E/ C8 q3 u; t RST切换到普通IO模式,且输出低电平2 K$ X4 L8 D" o/ O 等待10个NOP周期。 CLK切换至普通IO模式,且输出低电平 等待10个NOP周期。 IO切换至普通IO模式,且输出低电平8 }$ q* k5 v( T( N 等待10个NOP周期。' s+ q9 U: d" | u% t8 B1 p# d CMDVCC输出高电平,关闭电源。- V& F+ I1 N Z9 | 4.1.4 字符帧 数据在I/O上以如下所述的字符帧方式传输,如图10。9 N& ~/ E4 s2 Y- k) D* r- B 字符帧时序分为读、写两部分。( X4 I. `) i6 ~! g4 r! N8 V2 p1 f* _ 根据字符帧时序,按如下步骤设计字符帧读操作:$ k3 W9 {5 F. m" a2 v( N 计算读操作起始时间及结束时间。 通过定时器延时至起始时刻,清捕捉标志。 检测捕捉标志,且判断时间是否超时。/ `$ l0 _% e0 X; X 若无捕捉标志或捕捉标志已超时,退出,返回起始位超时错误。: }; U& W5 ?0 c2 ?" Y: ^+ ^, B 延时0.2etu,检测IO状态,若IO为高,则跳至第3步执行。! W8 M4 A( G' T6 f6 h: d* U2 B 延时0.2etu,检测IO状态,若IO为高,则跳至第3步执行。, L2 H0 b+ s3 [# ^ 延时0.2etu,检测IO状态,若IO为高,则跳至第3步执行。 [! n4 c8 h% B( ^4 a% {7 q* C 延时0.4etu。 延时0.5etu,检测IO状态,IO状态即为数据位。延时0.5etu。* A9 }1 H. |& g& @ 循环9次,最后一位为校验位。(国内卡一般都是T0卡,因此系统仅T0协议) m, w3 j, }7 B- j, I+ q 判断检验位,若校验位正确,退出,返回无故障。 若是第5次校验错误,退出,返回校验错误。 延时0.5etu,IO输出低电平,延时1etu。 跳至第1步执行。+ c0 H7 D* R; ^) ~- z X% l+ L 根据字符帧时序,按如下步骤设计字符帧写操作: 通过定时器延时至起始时刻。 IO输出低电平,延时1etu。# f' \* d* U% q" N$ A: U IO根据发送字节及校验位连续输出9次电平,每次输完延时1etu。 延时1etu,检测IO状态。$ v1 M% Y; |, T4 J 若IO为高电平,退出,返回无故障。 若连续5次发送错误,退出,返回发送错误。 重新计算发送起始时刻,起始时刻为同方向最小发送间隔时间。8 {- H( \+ r1 a6 E# y 跳到第1步执行。+ ]1 D- i9 M) s/ C. p' H9 \ 4.2 通信协议 通信协议同时也是IC卡对外的接口,主要分为上电、下电、APDU三个接口。6 u3 N7 u- T/ Z$ T$ t! H 4.2.1 上电; s# y1 e. c5 k; Z6 J 上电接口包括了触点激活时序、触点释放时序、复位时序三个部分,同时判断接收的ATR数据是否符合ISO7816规范。# l e$ d- R) q( @/ s& I 上电过程如下:# ^/ S, X0 U1 x" R% F7 O: s 检测当前状态卡状态,若是处于激活状态,则先下电。2 [3 U4 [ m+ n( p: v 置冷复位状态。 IC卡复位。 接收ATR第一个数据。 F2 u# F: s% _7 N q. M 若第一个数据不是3B或3F,退出,返回ATR_TS错误。) I5 V) g" z" H; }, t6 N. W1 a" @6 U# Z 接收T0,并根据T0确定后续TA1、TB1、TC1、TD1、历史字符是否存在。6 N8 d) h' E- @, g$ S 若存在TA1,接收TA1。否则跳过此步骤。6 t! @. D3 {5 {) o/ T& h6 B% e 若存在TB1,接收TB1。否则跳过此步骤。5 o- R" B5 h! I. X: U: } 若存在TC1,接收TC1。否则跳过此步骤。) M, r) x( q( L% m+ \0 { 若存在TD1,接收TD1,并根据TD1确定后续TA2、TB2、TC2、TD2是否存在。否则跳过此步骤。 若存在TA2,接收TA2。否则跳过此步骤。! r, a9 x7 U0 I4 ~3 ] 若存在TB2,接收TB2。否则跳过此步骤。 若存在TC2,接收TC2。否则跳过此步骤。: S4 r9 G6 `2 d' v' t T1 V 若存在TD2,接收TD2,并根据TD1确定后续TA3、TB3、TC3、TD3是否存在。否则跳过此步骤。1 ~) M. s- U1 S! t5 y# t" L) \ 若存在TA3,接收TA3,否则跳过此步骤。2 E* J/ c5 n) ~( n' w 若存在TB3,接收TB3,否则跳过此步骤。0 f9 h3 h7 y; @7 O: |4 w 若存在TC3,接收TC3,否则跳过此步骤。+ Q# R S& a0 X& K( J: N 若存在TD3,接收TD3,并根据TD1确定后续TA4、TB4、TC4是否存在。否则跳过此步骤。7 A* @2 h% s2 q% }& y 若存在TA4,接收TA4,否则跳过此步骤。 若存在TB4,接收TB4,否则跳过此步骤。 若存在TC4,接收TC4,否则跳过此步骤。 若存在历史字符,则接收历史字符。 根据TA1、TA2确定是否需要发送PPS帧。若需要则发送PPS帧。& E" C1 Q, D8 o, V. y& e# b3 h 根据ATR规范,判断ATR数据是否正确,并确定与之相关的各项参数。 若ATR数据符合规范,则置卡片激活状态,退出,返回ATR数据。 若错误码为拒绝ATR,且当前复位为冷复位,则置热复位标志,跳至第3步骤执行。若当前复位为热复位,则下电,退出,返回拒绝ATR错误码。 其他错误码,则下电,退出,返回相应错误码。" l' ^: u8 s- m& M+ a; s$ [ 4.2.2 下电3 Q* |- N$ t& {" u& q, E 下电操作仅包括了触点释放时序。 触点释放时序 清卡片激活状态标志。 在卡片处于激活状态时,用户可能会因某种原因突然将卡片取走,为了在这种状态下保护卡片,TDA8024会强制性执行芯片级的下电操作。且OFF采用中断模式,会实时检测到此种状态,将CMDVCC置高,关闭卡片电源。 4.2.3 APDU APDU分为C—APDU、R—APDU。 C—APDU分为4种情况,见表1。 APDU实现步骤:0 ]) [) g& ^2 M, u, a 检测C—APDU数据正正确性,若不正确,则退出,返回输入参数错误码。! ?; D0 ~2 b# Q2 s# T1 } {/ P 确认INS、LE、LC等参数。若C—APDU是第1种情况,则置P3=0。 发送命令头CLA、INA、P1、P2、P3。 接收过程字。 若过程字是INS,且LC>0,则发送LC个数据。跳至第4步骤。- t! d( f5 }1 R( k" @ 若过程字是INS,且LE>0,则接收LE个数据。跳至第4步骤。6 L0 y+ _; i" D* F: I, @2 I6 X; L 若过程字是INS,且LC=0、LE=0,则退出,返回IC故障错误码。0 Q& \4 N x, H' i 若过程字是INS补码,且LC>0,则发送1个数据,LC——,跳至第4步骤。" y+ D! D: E$ \% Y8 l$ {! ], r 若过程字是INS补码,且LE>0,则接收1个数据,LE——,跳至第4步骤。 若过程字是INS补码,且LC=0、LE=0,则退出,返回IC故障错误码。6 j1 |/ F9 \6 z H3 P: f! k1 |: F 若过程字是60,则等待一个额外时间后,跳至第4步骤。 若过程字是61XX,且LC>0,则退出,返回IC卡错误错误码。% ]+ a& D @) o$ R4 G9 t" x+ R 若过程字是61XX,且LC=0,则发送00C00000XX,且LE=XX,跳至第4步骤。3 \+ S- ~* v3 {4 a- g6 U 若过程字是6CXX,且LC>0,则退出,返回IC卡错误错误码。% c, b" ~" L3 A+ u$ W+ x# ` 若过程字是6CXX,且LC=0,则P3=XX,重新发送命令码,且LC=0、LE=XX,跳至第4步骤。 若过程字是6XXX,则表明收到的是状态字,则退出,返回无故障。此处无故障表示操作无故障,具体的状态由上层根据状态字判断。% {$ F) |4 L! d$ E1 I 若过程字是其他数据,则退出,返回IC卡错误错误码。 5.总结: h) p% j1 B, E# w9 m% N4 \3 w/ W 本文创作的特点:利用定时器的PWM输出与输入捕捉功能,设计出一种符合ISO7816协议的字符收发时序,这种时序比一般单片机自带的兼容ISO7816协议的UART能更精细精确的控制,更能通过银联的相关认证。同时,只要带有PWM输出、输入捕捉功能的单片机都能方便的进行移植。' o6 X' g3 n: S$ \4 P# R 参考文献, [% O' P F* \7 [4 X0 c [1]STM32F103中文数据手册. [2]http://www.zlgmcu.com/goldencard/MF/TDA8024.asp. m, |1 W) L1 T! }. j' A [3]1117稳压模块产品使用手册., c& l6 V0 W a2 y# J8 L [4]http://wenku.baidu.com/view/6d1fdb0116fc700abb68fc2c.html.1 r4 u& L# `- k6 }8 M* S [5]中国金融集成电路(IC)卡规范第3部分:与应用无关的IC卡与终端接口规范. 作者简介:何碧贵(1980—),女,硕士,重庆电子工程职业学院讲师,研究方向:数字信号处理,交换网络。 |
谢谢分享! |
牛人啊, 打开思路![]() |
楼主,有没具体的代码实现demo? |
多谢多谢! |
原来如此 |
MCSDK FOC应用详解
STM32F10xxx 正交编码器接口应用笔记 及源代码
基于STM32定时器ETR信号的应用示例
STM32 生态系统|基于STM32WB的低功耗蓝牙应用(一)
《无刷直流电机控制应用 基于STM8S系列单片机》
STM32定时器触发SPI逐字收发之应用示例
【银杏科技ARM+FPGA双核心应用】STM32H7系列10——ADC
【银杏科技ARM+FPGA双核心应用】STM32H7系列57——MDK_FLM
【STM32图书分享之九】—《STM32F 32位ARM微控制器应用设计与实践》
无刷直流电机控制应用+基于STM8S系列单片机---电子书