自从80年代中期出现IC电话卡后,基本已取代了原来流行的电话磁卡,磁卡存在存在严重的安全问题,已逐步淘汰。 即使IC电话卡,也不能算很安全,卡内所有数据只要有简单的读写装置并按时序操作都能读取,事实上电话卡和信用卡一样内部没有什么秘密信息,仅仅是带串行输出的128位EPROM而已(对二类卡是256位PROM),不要以为弄懂了它是怎么工作你就有办法重新对卡内数据重新填充,其开始的64位是带写保护的,在出厂时其熔丝位已被编程,你已无法对其更改,其后的40位计数单元受内部逻辑控制在写时只能减少不能增加直至到0为止,因此你想用一般的IC电话卡打免费电话是不可能的,除非你能用微控制器(单片机)仿真它(如果你能读懂本文介绍的所有内容)。IC电话卡是一种一次性使用的计数卡,以一次性的计数方式,从写满的计数器中减“1”,直至存储单元减为空为止。7 D- M' i+ ~* v B
卡片每次消费计数的“单位价值”根据各种应用系统的实际需要而定。例如:对于中国IC电话卡,如30元卡对应内部计数值为300,每单位值对应0.1元,IC 卡电话机每分钟产生一次扣费信号,扣费值由当地IC电话管理系统设定,一般是价值0.5元或1元,卡片被计数5次和10次。对于其它国家属于第一类IC电话卡而言也是如此,只是内部初始计数值不同,每次扣除额度不一样罢了。其他对于公用加油卡,IC卡计费加油机每一公升(或一加仑)产生一次扣费操作,卡片被操作一次扣2.5元等等,均属于等同原理。事实上,这类卡内部为128位(16字节) NMOS存储器,按如下规律分布:
0 ?$ l+ C' R0 }6 o, e. r2 A2 s9 o3 O- m2 W8 j/ |& s' T; r9 ~
64 位 EPPOM(8字节) 写保护区(芯片数据代码区、发行数据代码区)4 W/ l/ M4 b! B
40 位 EEPROM(5字节)$ x9 t6 p6 o% X, _: e
24 位 为全“1”(3字节)
1 g8 ]6 W2 [' ^9 X6 p: d* e! A- p# H 共16字节数据。5 M8 T, j( Y5 m/ D
Ⅰ-2)引脚:/ H2 p7 m2 d7 U: x9 _
-------------+-------------2 P) w W+ T8 M# }5 w
| 1 | 5 | 引 脚:
) u5 a7 T' `& I: m7 }. \# l4 V- \| | | -------" H0 d+ k9 e/ `; c; ]
+-------\ | /-------+
0 T( ?- |7 Y( G1 O| 2 +----+ + 6 | 1 : Vcc = 5V 5 : Gnd T6 U7 m4 B1 H2 s- u
| | | | 2 : Reset 6 : NC: ~4 W+ N0 V! B
+--------| |--------+ 3 : Clock 7 : I/O; g6 G. w& ], A$ i0 B0 t1 A
| 3 | | 7 | 4 : NC 8 : NC
! D# o% D2 G L7 m7 _| +----+----+ |
1 b, A" `1 ]8 V+-------/ | \-------+ Vcc:电源 Gnd:地脚 Reset:复位
# s8 L- ?9 b5 K) l! D) a, e| 4 | 8 |
n; i2 [/ A+ F9 r7 ^) ?| | | Clock:时钟 I/O:数据 NC: 空脚% |/ }. H' d/ ~5 e1 J5 ^/ A: k7 r
-------------+-------------: y9 d2 Y7 K$ C8 t; z2 J
; n) O, H2 f- q/ b5 i7 `6 x
因有三个脚为空脚,目前一般有采用8脚和6脚封装的,6脚封装的无最下一排两个空脚: w6 V3 D( c' F; ^ N9 L% [
6 f% k3 n: o2 i/ h- X- i$ rⅠ-3)主要特性:7 A; z% Z6 `) X- o# ~ P/ L
-采用单一5V电源供电
, e! E7 @2 y" H, K-遵循ISO/IEC7816-3同步协议进行双向数据传输* v, S; l$ x3 S) e5 l- P! m, m
-低功耗
9 V7 D- ~( m4 ]-NMOS技术' B; p( [* n* g# h7 {. u* @, }5 V
-高可靠性,抗静电干扰能力>4KV
; f Q; l6 z6 w- U: V# k, v7 t& y: y' @- ~* N) u" u. U8 R- i
Ⅰ-4)时序图
" F! Z1 _2 l0 B, V0 w复位:
& |* i$ {' `. ^& Y% H! c 为使地址计数器复位到0,先让Reset端变高。紧跟着一个Clock脉冲(从低到高再降到0),Reset重新变低,把Clock脉冲包住。随着Reset端变低,地址0单元的数据从I/O上输出。对应 Clock端的每个脉冲,其上升沿使地址计数器增加。其下降沿使被选通地址单元的数据从I/O上输出。地址计数器增加到127后到0。
# w; m5 }% T2 x% `1 j! o
, f* \2 q3 D# @; W# w& A9 W __________________/ [" ?6 g, I/ z. Y% K5 B
_____| |_____________________________________________ Reset$ H/ k4 G& {& a$ k+ ?" W% y
: :
/ J2 G" v! ~7 S, \* E- M+ G7 C4 S : _____ : _____ _____ _____ _____ j) x/ t4 A) F
_____:_______| |____:_| |_____| |_____| |_____| |_ Clk
L0 a" q8 r/ B6 I! w : : : : : : : : : : :, [6 v2 j1 `/ f$ b- v L8 n- n, [% _
_____:_______:__________:_:_____:_____:_____:_____:_____:_____:_____:_7 I ]: H3 U8 y0 f
_____:___n___|_____0____:_|_____1_____|_____2_____|_____3_____|___4_:_ (Address)3 g e1 W- Y2 m6 g2 W. @6 n$ \( U
: : : : : :1 }( b6 b: |! I$ Z! u+ x
_____: :_______:___________:___________:___________:_, N( Q4 O/ i# I% L# w
_____XXXXXXXXXXXXXXXXXXXX_______|___________|___________|___________|_ Data
5 ^! @" m8 B. W2 u, BBit n Bit 0 Bit 1 Bit2 Bit3# u4 g1 Y9 v+ z( i5 y0 Y, T) a
6 X& P( a8 q# M2 \4 v/ e写位:2 M8 s# [% D& t! @0 E
在Reset和Clk端均为低的情况下,如果某地址单元允许写操作(64-103位,且该位必需为1),则Reset端上的一个脉冲(即从低到高再回低)将允许芯片进行位写操作。在紧跟着的时钟脉冲期间执行写操作,调整写操作维持时间至少10ms,在这个CLK脉冲期间,地址计数器不会增加,在CLK写脉冲下降沿,数据0从I/O端输出。从Reset脉冲的上升沿到CLK写脉冲的下降沿期间,I/O端的数据是无效的。在下一个才CLK脉冲,且Reset为低时,地址计数器又增1,并在下降沿时,把选通的地址单元的数据送到I/O端。
4 @2 l q/ a. e7 c
: s9 W6 R* ^% b; c _____ _____
- O/ S4 J+ Q. A5 J_____________| |______________________________| |_______________ Reset
8 Y8 i" c1 \: g : :
' q/ y' P; }8 \3 ? ___ : _____ ___ : _____
. ~, E! j. L: f____| |____:__________| |_________| |_____:__________| |____ Clk M! S) }! | `9 j* C+ \
: : : : : : : : :
( i) t6 |) B x( m* I____:________:__________:_____:_________:___:_____:__________:_____:_____3 W3 G. u5 q; K/ M
n | n+1 | n+2 | : n+3 | :
$ R8 _7 K+ j) C S$ s- l(Address)
/ q! X2 b6 a9 T; w& }( i: [----'--------:----------'-----:---------'---:-----:----------'-----:-----6 P! L; J8 k4 y: F3 [( s1 }3 h
: : : : : : :! c* |4 t) j. H
_________ _: : : ____________: ___: : :3 h- Q" O& u8 c" ~. Z' {
_________XXX_XXXXXXXXXXXXXXXXXXX____________ XX___XXXXXXXXXXXXXXXXXXXXXXX I/O
. L% Y! V; S. X( R3 t n n+1 : : n+1 n+2 : :
9 O @; E X4 R) B# L- B : : : :; \: E# c( ^/ t) q& D" D% \
write write
% O1 B# \( @7 Q借位写后的字节擦除:
% o1 }% S* o% x# U* d 对位地址72-103的字节单元来说,只要在每个字节的前面一位进行一次正常的写操作,就可以对此字节后一字节进行字节擦除操作。也就是说,每向高一字节进行借位(即写一位0),紧接着的擦除时序可以对后一字节按字节擦除(即整个字节写1)。被擦除的字节总是比借位写的字节低一字节。从以下时序图可以看出,首先,完成一个“位写”操作,在CLK的写脉冲结束后,在CLK为低电平时,在发一个Reset脉冲即启动字节擦除操作。在第二个CLK脉冲完成字节擦除,脉冲维持时间整定为擦除周期时间(至少1ms)。芯片逻辑控制电路验证了借位写确已完成从“1”写“0”后,才擦除其低位字节。从Reset的上升沿到擦除操作的CLK脉冲的下降沿,I/O脚上的数据无效。地址计数器仍然停留在借位写的地址上。
. f# B1 E4 u9 m' W0 C% e9 }% E, l2 K* F' W y) [6 ~
_____ _____' a0 g2 Q; X- }; a& B: q) I7 W, g
______| |____________________| |_________________________________ Rst
4 t- |8 T1 Z- I. l0 \4 b6 B" x9 ^ : :
! E# L2 T0 V# c, X4 |5 z : _______ : _______ ___
% v% y! l t3 ~7 E4 p( O7 A; f______:___________| |______:_____________| |______| |______ Clk
7 _* c% [: K" a; t# U : : : : : : : :& l+ e2 o( g8 [) Y: r
: : : : : : : :
D1 a9 d' Q: I. a- S: H<------------------------- address n ------------------------>:<--- n+1 ------
. Q' S. y! a2 Q : : : : : : :+ ^7 r+ g/ T0 n1 h2 A$ e0 w- @7 @
: : : : : : :' m' x" K( V( X A% J4 K
______: : :______: : :__________: _____
0 v6 N" v* |7 X/ m, C______XXXXXXXXXXXXXXXXXXXXX______XXXXXXXXXXXXXXXXXXXXXXX__________XX_____ I/O: I3 w0 @3 q8 s( O1 K7 ^$ Y/ h
: : n : : n n+1
) l% a; M/ ]& | Y2 ]) e. r: S+ R : : : :
, ~9 ~9 e5 q } Write Erase |