你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

stm32智能卡应用

[复制链接]
海迹天涯 发布时间:2017-12-25 16:36
【摘要】针对接触式IC卡常用于身份认证,要求其高保密性,本文提出利用定时器的PWM输出与输入捕捉功能,设计出一种符合ISO7816协议的字符收发时序,利于ST微处理器实现一个接触式IC卡读写器。
8 w" m3 ]2 u- V; h& [0 T' \中国论文网 http://www.xzbu.com/8/view-3784776.htm
) z) l( T  E) X2 H  C, x  【关键词】保密性;ISO7816协议;ST微处理器
2 A, ~( B: _2 D8 c& E4 H, b1 i  1.引言7 @' I  V3 a2 f+ p
  在现实生活中,某些特殊的操作会涉及到许多机密,就需要更高权限的人员进行授权。如银行卡密码挂失重置的过程,就需要特殊身份的人员进行授权,而高权限人员一般都是通过在读卡器中插入卡片的方式进行授权。这种接触式IC卡具有很高的安全性,常用于身份认证之类的用途。
5 ~- ]; S+ L! `4 t, p4 \  本文阐述了如何利于ST微处理器实现一个接触式IC卡读写器。
5 Y* X9 U; k$ C7 h, Y  2.系统总体方案1 N+ v/ p* c6 `8 r* U# o8 ?
  读卡器的本质就是为PC机与IC卡之间提供一个通信的媒介。负责解释PC语言和IC卡语言,充当一个翻译的作用。为此需要一个接触式IC卡,用于身份认证;要有一个通用的对外接口,方便系统连接;提供一个或多个工作状态的灯;故障时能提供一个明确的报警,以提醒用户。如图1所示。
9 C# j* C4 J$ f0 p/ L9 T9 r  从图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。
, B6 \# w) f3 Q$ [  系统主要使用RS232、3个定时器(PWM)两个功能。STM32F103硬件电路图如图2。
3 H0 R- q1 I1 i+ [4 n5 U  d  TX、RX为UART接口,负责与PC机通信。( \; B& b. l# r" b( q
  BUZZER为蜂鸣器控制口。
5 D0 {) C, }( @- q4 Q+ l  j/ w1 j3 f  LED_PWRON为卡片上电指示灯控制口。
7 a7 \; D* m( J9 X0 ~- h* F3 q  LED_PRES为卡片插入指标灯控制口。
) {( R, g$ o& @# G1 ^6 |7 ?4 _' d  CLK、RST、IO、PWRSRC、CMDVCC、OFF与TDA8024接口,负责与IC卡通信。
/ O8 g* ~3 b4 ?0 s6 A' e  3.2 RS232驱动设计
5 K2 I9 D$ {! L# J: P  STM32F103的UART接口为TTL电平,PC机串口为RS232电平,两者之间通过SP3232进行转换。RS232驱动电路图如图3。
2 o! W/ I6 r6 |/ d  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口线直接控制。
( F  e, j0 L7 D' R2 R* t, G  RST为复位,低电平有效。RST使用定时器4的PWM输出功能,确保波形精确性。
3 b& {' f3 P0 ]) G  CLK为时钟。CLK使用定时器2的PWM输出功能,确保波形精确性。' t2 w" `1 h- I$ C
  IO为数据线,双向输入输出。IO使用定时器3的输入捕捉功能,确保每个数据所在的时钟沿。
! T1 d$ {& |, ~  s9 T  OFF为卡检测线。高电平为有卡。同时在电源打开时,若发生硬件故障时,会自动改变为低电平,同时自动去激活操作,以保护卡片。OFF使用中断口,以便于实时监测卡片动态。
: s; ]$ O, `* y  3.4 电源设计
% C& s, T$ _* C  U* u  B) ^( ~1 @  系统通过USB供电,USB接口为5V,STM32F103电压为2.0V—3.6V,TDA8024为3V或5V,因此系统最终采用3.3V供电。系统使用LM1117—3.3稳压芯片提供一个稳定的3.3V电源。( [- g7 y4 k5 v
  电源电路图如图5。
* L  I" w# u1 @2 I2 j  4.系统软件设计
  Q) S' f5 {) @& W. K( y) m  系统软件设计主要包括IC卡驱动设计、RS232驱动设计、主流程设计。本文主要对IC卡驱动的设计进行详细介绍。RS232驱动设计及主流程都比较简单,就不再单独介绍。
$ n8 d4 p; _% @# Q  IC卡驱动的设计主要有两点,物理传输与通信协议。6 }' q  q. J9 I6 b" t4 Y
  4.1 物理传输
( g7 t' T4 o, W+ K. x5 s# V  物理传输包括触点激活时序、复位时序、触点释放时序、字符帧时序。
" H$ P% @3 g) H+ I! L8 k! f9 R- F  物理传输设计的总方案是用定时器的PWM输出、输入捕捉实现RST、CLK、IO的功能,利用定时器方式能实现波形精确到单个CLK。RST、CLK、IO各自使用一个定时器。+ T+ M0 q* ^4 H
  定时器初始化步骤:
4 d# z1 T3 g: v, k0 y6 q  CLK、RST、IO为普通IO口推挽输出模式。. n& I: z& f5 r8 R& |
  CLK:PWM输出,输出3MHz。
3 q! N, |2 L8 e# z& O  RST:PWM输出,0—42250输出低电平,42250—65525输出高电平。
  i. J( l' \8 i/ `+ T9 \. L  IO:输入捕捉,根据捕捉寄存器来确认所处CLK。/ ~0 C- }/ f9 X* V& z" S
  RST、IO所处定时器与CLK定时器同步启动。
( W+ F& q* O9 L8 n% a  启动CLK定时器。
8 \( r8 P' g* `% y! L% A  4.1.1 触点激活时序3 _2 H' a5 J- J" _0 s# V8 W+ Y
  ISO7816协议要求IC卡正确插入接口设备后,触点必须按如下方式激活,如图6。   触点激活时序不是一个单独的时序,它是伴随着冷复位时序一起实现的。
1 {+ x% ^5 h/ Q% o0 D0 i  4.1.2 复位时序
$ x1 c1 `- b8 ^# Y% r  复位时序又分为冷复位时序和热复位时序。3 z' t% A% ~# i4 p
  在触点激活后,终端将发出一个冷复位信号,并从IC卡获得一个复位应答信号,如图7,过程如下:3 o% G9 b' \3 f" Y4 y1 j9 k; B' w
  在冷复位过程之后,如果收到的复位应答信号不能满足规定,终端将启动热复位并从IC卡获得复位应答,见图8。其过程如下:
( c' J' u! z- n( E$ U9 t  系统为编程方便,将冷复位时序和热复位时序统一合为一个复位时序。根据复位标志是冷复位标志还是热复位标志执行不同步骤:
  O% E( {- ?( J4 w  若热复位,则IO切换至输入捕捉模式。
4 W8 J5 f" c+ R  若冷复位,则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口模式,且输出高电平。
2 c' V# O1 W# W, m3 N0 X  接收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周期。
1 V% |5 s9 c% I3 A  CLK切换至普通IO模式,且输出低电平
& a- ]6 ^; ]5 B0 i! f3 g  等待10个NOP周期。
4 E9 @8 V6 i% C. N" M& U0 v  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 字符帧
: j- l& V  J6 f! i9 S8 Y  r- ~  数据在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
  计算读操作起始时间及结束时间。
+ D  E- o) P2 N8 n8 D  通过定时器延时至起始时刻,清捕捉标志。
8 \" ~0 m; a/ K9 W8 }  检测捕捉标志,且判断时间是否超时。/ `$ 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。
4 \; X0 W, x, n( {- M- r/ J  延时0.5etu,检测IO状态,IO状态即为数据位。延时0.5etu。* A9 }1 H. |& g& @
  循环9次,最后一位为校验位。(国内卡一般都是T0卡,因此系统仅T0协议)  m, w3 j, }7 B- j, I+ q
  判断检验位,若校验位正确,退出,返回无故障。
+ h8 V9 C% c1 Q0 }, H# }5 `4 }  若是第5次校验错误,退出,返回校验错误。
6 u1 r' y4 Y! G3 P3 R" _/ j7 V  延时0.5etu,IO输出低电平,延时1etu。
$ G& T* d1 o7 e' I, J$ I* T  跳至第1步执行。+ c0 H7 D* R; ^) ~- z  X% l+ L
  根据字符帧时序,按如下步骤设计字符帧写操作:
( `1 r2 l4 C- I1 d  通过定时器延时至起始时刻。
, d% @$ {6 }6 H9 {( O  IO输出低电平,延时1etu。# f' \* d* U% q" N$ A: U
  IO根据发送字节及校验位连续输出9次电平,每次输完延时1etu。
! M: r; g6 B- v- f* ^7 w  延时1etu,检测IO状态。$ v1 M% Y; |, T4 J
  若IO为高电平,退出,返回无故障。
' J1 ]1 ]6 m) x  若连续5次发送错误,退出,返回发送错误。
& U, s6 F: Z) p) n9 A, k% r  重新计算发送起始时刻,起始时刻为同方向最小发送间隔时间。8 {- H( \+ r1 a6 E# y
  跳到第1步执行。+ ]1 D- i9 M) s/ C. p' H9 \
  4.2 通信协议
# p' j% x' |: u  a9 o  通信协议同时也是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
  置冷复位状态。
8 L4 v# D% `: g% O1 p  IC卡复位。
1 J2 ~% r0 ?. `, i" V  接收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是否存在。否则跳过此步骤。
4 q& D- H% S9 j8 l8 u1 m  若存在TA2,接收TA2。否则跳过此步骤。! r, a9 x7 U0 I4 ~3 ]
  若存在TB2,接收TB2。否则跳过此步骤。
8 A' \1 O' n) G# O6 d; F5 d& k  若存在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,否则跳过此步骤。
+ b; e( q. G+ r. W  若存在TB4,接收TB4,否则跳过此步骤。
" _7 X* u8 B- t% F  若存在TC4,接收TC4,否则跳过此步骤。
0 x- D  [0 v# G- x# c( K/ \% M  S  若存在历史字符,则接收历史字符。
8 R6 D; R$ g/ M, I* n  根据TA1、TA2确定是否需要发送PPS帧。若需要则发送PPS帧。& E" C1 Q, D8 o, V. y& e# b3 h
  根据ATR规范,判断ATR数据是否正确,并确定与之相关的各项参数。
9 W! Q3 n0 [1 W% O  若ATR数据符合规范,则置卡片激活状态,退出,返回ATR数据。
) W' @* f; w+ M/ Z' T" k  若错误码为拒绝ATR,且当前复位为冷复位,则置热复位标志,跳至第3步骤执行。若当前复位为热复位,则下电,退出,返回拒绝ATR错误码。
2 b9 ?1 i$ J2 r$ M0 V+ N  其他错误码,则下电,退出,返回相应错误码。" l' ^: u8 s- m& M+ a; s$ [
  4.2.2 下电3 Q* |- N$ t& {" u& q, E
  下电操作仅包括了触点释放时序。   触点释放时序
( m1 p7 o2 Y: Q! d* d  清卡片激活状态标志。
: _6 @1 f1 C$ {* C  在卡片处于激活状态时,用户可能会因某种原因突然将卡片取走,为了在这种状态下保护卡片,TDA8024会强制性执行芯片级的下电操作。且OFF采用中断模式,会实时检测到此种状态,将CMDVCC置高,关闭卡片电源。
* N2 E* C2 |1 d  4.2.3 APDU
7 @7 y0 z/ U& p( U  APDU分为C—APDU、R—APDU。
$ }1 W# y9 B! D( d  o  C—APDU分为4种情况,见表1。
; |$ X" F1 D4 X& z  APDU实现步骤:0 ]) [) g& ^2 M, u, a
  检测C—APDU数据正正确性,若不正确,则退出,返回输入参数错误码。! ?; D0 ~2 b# Q2 s# T1 }  {/ P
  确认INS、LE、LC等参数。若C—APDU是第1种情况,则置P3=0。
$ y8 S# p6 t! [% i  o8 s/ ]! E  发送命令头CLA、INA、P1、P2、P3。
+ E0 {' N2 `! `' M$ x8 j  接收过程字。
* l7 m& T1 \6 ?; T0 @  若过程字是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步骤。
7 Y+ T! Y( s- f* J/ T# ^  若过程字是INS补码,且LC=0、LE=0,则退出,返回IC故障错误码。6 j1 |/ F9 \6 z  H3 P: f! k1 |: F
  若过程字是60,则等待一个额外时间后,跳至第4步骤。
6 k  z8 Q$ ^0 H* Q  I  若过程字是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步骤。
& r9 H) ]7 \' @$ k  若过程字是6XXX,则表明收到的是状态字,则退出,返回无故障。此处无故障表示操作无故障,具体的状态由上层根据状态字判断。% {$ F) |4 L! d$ E1 I
  若过程字是其他数据,则退出,返回IC卡错误错误码。
" I' ~- B* r. U4 C! y: a' S3 V) t2 |  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中文数据手册.
% H9 q' H  ^' g( S  [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卡与终端接口规范.
5 z8 ]/ @% J$ y$ [1 v  作者简介:何碧贵(1980—),女,硕士,重庆电子工程职业学院讲师,研究方向:数字信号处理,交换网络。
转载请注明来源。原文地址:http://www.xzbu.com/8/view-3784776.htm
/ d3 l$ V& f, D; F
收藏 3 评论5 发布时间:2017-12-25 16:36

举报

5个回答
epochal 回答时间:2017-12-25 20:24:41
谢谢分享!
枫天123 回答时间:2017-12-26 09:00:58
牛人啊, 打开思路
STLBS 回答时间:2019-4-28 10:13:41
楼主,有没具体的代码实现demo?
! a% D, Y. Z# S6 m0 a
Kevin_G 回答时间:2019-4-28 18:14:10
多谢多谢!
路痴痴路 回答时间:2019-5-30 19:01:05
原来如此
关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版