加入收藏 | 设为首页 | 会员中心 | 我要投稿 | RSSRSS-巴斯仪表网
您当前的位置:首页 > 电子发烧 > 技术文章

ATMEL接触式IC卡及开发实例

时间:2012-11-29  来源:123485.com  作者:9stone

  目 录
第一章 几种常见的ATMEL接触式IC卡的存储结构及其保密特性 2
一、AT24C01A、AT24C02、AT24C04、AT24C08、AT24C16、AT24C32、AT24C64 2
二、AT88SC102、AT88SC1604、AT88SC1608、AT88SC153 3
1.AT88SC102加密卡 3
2.AT88SC1604加密卡 5
3.AT88SC1608加密卡 8
4.AT88SC153加密卡 12
三、AT45D041 16
第二章 接触式IC卡的接口函数 19
一、函数列表(函数名, 简单说明) 19
1.通用函数 19
2.ATMEL AT88SC102/AT88SC1604加密卡专用函数 19
3.ATMEL AT88SC1608及AT88SC153加密卡专用函数 20
4.ATMEL AT45D041 Flash存储卡专用函数 20
二、函数说明 21
附录一:卡类型预定义 29
附录二:ICFOX.PLB测试例程 30
第三章 接触式IC卡底层软件开发实例 31
一、IC卡操作底层函数 31
1.IC卡操作底层函数说明: 31
2.IC卡低层通讯头文件(Base.h) 32
二、AT24C64卡应用实例 32
1.AT24C64卡函数头文件(AT24C64.h) 32
2.AT24C64卡函数 33
3.AT24C64卡应用例程(App24C64.c) 35

第一章 几种常见的ATMEL接触式IC卡的存储结构及其保密特性
为了能够使IC卡应用到自已的系统中,系统开发公司的工程师应了解一些卡的基本技术资料,下面就ATMEL公司生产的接触式IC卡在应用中常见的和性能比较好的型号做一简单介绍,希望能对IC卡的选型及开发有所帮助。
??1 AT24C01A、AT24C02、AT24C04、AT24C08、AT24C16、AT24C32、AT24C64
这几个型号的IC卡为ATMEL存储卡,是一种不具备加密功能的EEPROM卡,AT24C为系列号,数字部分为K位容量,分别为1K、2K、4K、8K、16K、32K、64K位。它的使用方法与EEPROM完全相同,存储结构简单,只有读写两种操作功能,主要用于存放一些保密性要求不高的数据。
AT24C系列的工作频率为1MHz(5V),1MHz(2.7V),400KHz(1.8V);工作电压为5V±10%,根据要求最低可至1.8V;Icc电流读最大为1mA,写最大为3mA;写/擦除次数为100万次;数据保持100年;工作温度为0—70℃,根据要求可超过指定工作温度;通讯协议符合ISO/IEC 7816-3同步协议,双线串行接口。

存储结构:

AT24C系列型号的后两位数字为该型号的最大K位数(1K=1024),8位为1字节,最大字节存储容量的算法为K位数×1024÷8。如:AT24C01A的最大存储容量的1×1024÷8=128,其字节地址空间为0—127(16进制为0x00—0x7F)。

下面的伪码程序在AT24C系列卡的ADDR地址开始写LEN个字节,并且读出校对。
Open(AT24Cxxx)
Write(ADDR,LEN,WDATA)
RDATA = Read(ADDR,LEN)
Close()
IF WDATA = RDATA THEN 写成功 ELSE 写失败

下面的伪码程序在AT24C系列卡的ADDR地址开始读LEN个字节。
Open(AT24Cxxx)
RDATA = Read(ADDR,LEN)
Close()
二、AT88SC102、AT88SC1604、AT88SC1608、AT88SC153
这几个型号的IC卡为ATMEL加密卡,采用CMOS低功耗技术,具有传输代码、生产代码,密码及错误计数器、熔丝保护等安全保护功能。存储空间分成设置区和应用区两大功能区,应用区又可分为不同的分区,每个区具有各自独立的保密功能。从型号上看,AT88SC为系列号,最后一位数字为应用区分区数,分别为2、4、8、3个分区,中间的数字10、160、15为K位容量,分别为1K、16K、16K、1.5K位。其中不同应用分区另有自已的分区密码。AT88SC1604又可分为等分区卡和不等分区卡两种。
1.AT88SC102加密卡
AT88SC102加密卡的访问时间读为2us/位,写为5ms/位;工作电压为5V±10%;写/擦除次数为10万次;数据保持100年;工作温度为-25—70℃;通讯协议符合ISO/IEC 7816-3同步协议。

存储结构:
存储分区 位地址 位数 字节地址 字节数
FZ 厂商代码区 0-15 16 0-1 2
IZ 发行者区 16-79 64 2-9 8
SC 主密码区 80-95 16 10-11 2
SCAC 主密码错误计数区 96-111 16 12-13 2
CPZ 代码保护区 112-175 64 14-21 8
AZ1 应用区一 176-687 512 22-85 64
EZ1 一区擦除密码 688-735 48 86-91 6
AZ2 应用区二 736-1247 512 92-155 64
EZ2 二区擦除密码 1248-1279 32 156-159 4
EAC2 二区擦除密码错误计数 1280-1407 128 160-175 16
MTZ 测试区 1408-1423 16 176-177 2
注:擦、写是两种不同的操作,擦是位写1操作,写是位写0操作。修改数据时,只有先擦除才能再写数据。
在熔丝熔断(FUSE2)前与熔丝熔断后它的保密特性是不同的。

熔丝熔断前的保密特性:
FZ:由ATMEL公司出厂时设置(FUSE1),只读不可更改。ATMEL公司可以为批量用户定制此代码,以保证卡片的唯一性。
IZ:可读。SC核对正确,IZ可以反复擦写。
SC:SC核对正确时,SC可读和擦写,SC核对不正确时,SC不能读和擦写。
SCAC:初始值为4,SC核对每错1次SCAC减1,SCAC等于0时,卡自毁,如果SC核对正确SCAC恢复为初始值4。SCAC永远可读。
CPZ:为用户标注,用于对卡中信息操作过程的标注,永远可读,SC核对正确后可擦写。
AZ1,AZ2;前2位为写读保护位,即176位为AZ1写保护位(1PR),177位为AZ1读保护位(1RD),736位为AZ2写保护位(2PR),737位为AZ2读保护位(2RD)。 SC核对正确时,AZn可读(n代表1或者2,下同),如果SC核对不正确时,nRD控制着AZn的可读性,即如果nRD=1时,AZn可读;如果nRD=0时,AZn不可读。
在熔丝熔断(FUSE2)前,nPR不起作用,只要SC核对正确,AZn就可擦写,
EZ1,EZ2:SC核对不正确时,EZn不能读和擦写。SC核对正确时,EZn可读和擦写。在熔丝熔断(FUSE2)前,EZn不起什么作用。
EAC2:熔丝熔断(FUSE2)前,EAC2不起什么作用。
MTZ:用于测试卡的擦写性能。任意条件下均可测试。

熔丝熔断后的保密特性:
FZ:由ATMEL公司出厂时设置(FUSE1),只读不可更改。ATMEL公司可以为批量用户定制此代码,以保证卡片的唯一性。
IZ:永远可读。但熔丝熔断(FUSE2)后IZ内容被固化,IZ将永远不能再改。
SC:不可读,SC核对正确时,SC可擦写,SC核对不正确时,SC不能擦写。
SCAC:初始值为4,SC核对每错1次SCAC减1,SCAC等于0时,卡自毁,如果SC核对正确SCAC恢复为初始值4。SCAC永远可读。
CPZ:为用户标注,用于对卡中信息操作过程的标注,永远可读,SC核对正确后可擦写。
AZ1,AZ2;前2位为写读保护位,即176位为AZ1写保护位(1PR),177位为AZ1读保护位(1RD),736位为AZ2写保护位(2PR),737位为AZ2读保护位(2RD)。 SC核对正确时, AZn可读(n代表1或者2,下同),如果SC核对不正确时,nRD保护着AZn的可读性,即如果nRD=1时,AZn可读;如果nRD=0时,AZn不可读。
在熔丝熔断(FUSE2)后,即使SC核对正确,也要看nPR是否为1,如果是0,AZn被写保护永远不能写。
EZ1,EZ2:SC核对不正确时,EZn不能读和擦写。SC核对正确时,EZn可读和擦写。在熔丝熔丝熔断(FUSE2)后,只有EZn核对正确,才能对AZn进行擦除操作,同时不可能再对EZn进行读和擦写操作。
EAC2:熔丝熔断(FUSE2)后,AZ2只有128次擦除机会,每擦1次计数减1。
MTZ:用于测试卡的擦写性能。任意条件下均可测试。

下面的伪码程序在AT88SC102卡完成初始化操作和在一应用区ADDR地址开始写LEN个字节,并读出校对。
Open(AT88SC102)
IF CheckSC(Pwd) = OK THEN 继续 ELSE 非法卡
WriteCPZ(CPZ) ;可以写一些系统标识
UpdateSC(NewPwd)
SetZone(1)
UpdateEZ(NewEZ)
Erase(ADDR,LEN)
Write(ADDR,LEN,WDATA)
RDATA = Read(ADDR,LEN)
IF WDATA = RDATA THEN 写成功 ELSE 写失败
Fuse()
Close()

下面的伪码程序判断AT88SC102卡是否是本系统支持的卡和对一应用区ADDR地址开始的LEN个字节完成某种操作。
Open(AT88SC102)
ReadCPZ(CPZ) ;读出系统标识
if CPZ = 系统标识 THEN 继续 ELSE 非法卡
IF CheckSC(Pwd) = OK THEN 继续 ELSE 非法卡
SetZone(1)
RDATA = Read(ADDR,LEN)
<一些其它操作>
IF CheckEZ(Pwd) = OK THEN 继续 ELSE 非法卡
Erase(ADDR,LEN)
Write(ADDR,LEN,WDATA)
RDATA = Read(ADDR,LEN)
IF WDATA = RDATA THEN 写成功 ELSE 写失败
Close()
2.AT88SC1604加密卡
AT88SC1604加密卡的访问时间读为2us/位,写为5ms/位;工作电压为5V±10%;写/擦除次数为10万次;数据保持10年;工作温度为0—70℃;通讯协议符合ISO/IEC 7816-3同步协议。
AT88SC1604又可分为等分区卡和不等分区卡两种,它们各区和熔丝地址不一样。二、三、四应用区不等分区卡没有区密码错误计数,而等分区卡有,不等分区卡在性能上比较明显地偏重第一区。在选择AT88SC1604卡时应注意它是不等分区卡还是等分区卡。

不等分区卡的存储结构:(二、三、四应用区没有区密码错误计数)
存储分区 位地址 位数 字节地址 字节数
FZ 厂商代码区 0-15 16 0-1 2
IZ 发行者区 16-79 64 2-9 8
SC 主密码区 80-95 16 10-11 2
SCAC 主密码错误计数区 96-103 8 12 1
CPZ 代码保护区 104-167 64 13-20 8
SC1 一区密码 168-183 16 21-22 2
S1AC 一区密码错误计数 184-191 8 23 1
EZ1 一区擦除密码 192-207 16 24-25 2
E1AC 一区擦除密码错误计数 208-215 8 26 1
AZ1 应用区一 216-9775 9560 27-1221 1195
SC2 二区密码 9776-9791 16 1222-1223 2
EZ2 二区擦除密码 9792-9807 16 1224-1225 2
E2AC 二区擦除密码错误计数 9808-9815 8 1226 1
AZ2 应用区二 9816-11863 2048 1227-1482 256
SC3 三区密码 11864-11879 16 1483-1484 2
EZ3 三区擦除密码 11880-11895 16 1485-1486 2
E3AC 三区擦除密码错误计数 11896-11903 8 1487 1
AZ3 应用区三 11904-13951 2048 1488-1743 256
SC4 四区密码 13952-13967 16 1744-1745 2
EZ4 四区擦除密码 13968-13983 16 1746-1747 2
E4AC 四区擦除密码错误计数 13984-13991 8 1748 1
AZ4 应用区四 13992-16039 2048 1749-2004 256
MTZ 测试区 16040-16055 16 2005-2006 2
FUSE 熔丝 16288-16303
最后地址 16383 2047
等分区卡的存储结构:(二、三、四应用区有区密码错误计数)
存储分区 位地址 位数 字节地址 字节数
FZ 厂商代码区 0-15 16 0-1 2
IZ 发行者区 16-79 64 2-9 8
SC 主密码区 80-95 16 10-11 2
SCAC 主密码错误计数区 96-103 8 12 1
CPZ 代码保护区 104-167 64 13-20 8
SC1 一区密码 168-183 16 21-22 2
S1AC 一区密码错误计数 184-191 8 23 1
EZ1 一区擦除密码 192-207 16 24-25 2
E1AC 一区擦除密码错误计数 208-215 8 26 1
AZ1 应用区一 216-4311 4096 27-538 512
SC2 二区密码 4312-4327 16 539-540 2
S2AC 二区密码错误计数 4328-4335 8 541 1
EZ2 二区擦除密码 4336-4351 16 542-543 2
E2AC 二区擦除密码错误计数 4352-4359 8 544 1
AZ2 应用区二 4360-8455 4096 545-1056 512
SC3 三区密码 8456-8471 16 1057-1058 2
S3AC 三区密码错误计数 8472-8479 8 1059 1
EZ3 三区擦除密码 8480-8495 16 1060-1061 2
E3AC 三区擦除密码错误计数 8496-8503 8 1062 1
AZ3 应用区三 8504-12599 4096 1063-1574 512
SC4 四区密码 12600-12615 16 1575-1576 2
S4AC 四区密码错误计数 12616-12623 8 1577 1
EZ4 四区擦除密码 12624-12639 16 1578-1579 2
E4AC 四区擦除密码错误计数 12640-12647 8 1580 1
AZ4 应用区四 12648-16303 3656 1581-2037 457
MTZ 测试区 16304-16319 16 2038-2039 2
FUSE 熔丝 16352-16367
最后地址 16383 2047
注:擦、写是两种不同的操作,擦是位写1操作,写是位写0操作。修改数据时,只有先擦除才能再写数据。
在熔丝熔断(FUSE2)前与熔丝熔断后它的保密特性是不同的。

熔丝熔断前的保密特性:
FZ:由ATMEL公司出厂时设置(FUSE1),只读不可更改,不等分卡一般为0F0F,等分卡一般为7156。ATMEL公司可以为批量用户定制此代码,以保证卡片的唯一性。
IZ:可读。SC核对正确,IZ可以反复擦写。
SC:SC核对正确时,SC可读和擦写,SC核对不正确时,SC不能读和擦写。
SCAC:初始值为8,SC核对每错1次SCAC减1,SCAC等于0时,卡自毁,如果SC核对正确SCAC恢复为初始值8。SCAC永远可读。
CPZ:为用户标注,用于对卡中信息操作过程的标注,永远可读,SC核对正确后可擦写。
SC1,SC2,SC3,SC4,EZ1,EZ2,EZ3,EZ4:熔丝熔断(FUSE2)前,不起什么作用。SC核对正确时,SCn、EZn可读和擦写(n代表1或2或3或4,下同),
S1AC,S2AC,S3AC,S4AC,E1AC,E2AC,E3AC,E4AC:永远可读,熔丝熔断(FUSE2)前,不起什么作用。SC核对正确时,SnAC、EnAC可擦写,
AZ1,AZ2,AZ3,AZ4;前2位为AZn的写读保护位,即写保护位(nPR),读保护位(nRD)。 SC核对正确时,AZn可读,如果SC核对不正确时,nRD控制着AZn的可读性,即如果nRD=1时,AZn可读;如果nRD=0时,AZn不可读。
在熔丝熔断(FUSE2)前,nPR不起作用,只要SC核对正确,AZn就可擦写,
MTZ:用于测试卡的擦写性能。任意条件下均可测试。 熔丝熔断后的保密特性:
FZ:由ATMEL公司出厂时设置(FUSE1),只读不可更改,不等分卡一般为0F0F,等分卡一般为7156。ATMEL公司可以为批量用户定制此代码,以保证卡片的唯一性。
IZ:永远可读。但熔丝熔断(FUSE2)后IZ内容被固化,IZ将永远不能再改。
SC:不可读,SC核对正确时,SC可擦写,SC核对不正确时,SC不能擦写。
SCAC:初始值为8,SC核对每错1次SCAC减1,SCAC等于0时,卡自毁,如果SC核对正确SCAC恢复为初始值8。SCAC永远可读。
CPZ:为用户标注,用于对卡中信息操作过程的标注,永远可读,SC核对正确后可擦写。
SC1,SC2,SC3,SC4:不可读,SC核对正确时,SCn可校对,SC核对不正确时,SCn不能校对。SCn核对正确时,SCn可擦写。
S1AC,S2AC,S3AC,S4AC:初始值为8,SCn核对每错1次SnAC减1,SnAC等于0时,n区自毁,如果SCn核对正确SnAC恢复为初始值8。SnAC永远可读。
EZ1,EZ2,EZ3,EZ4:不可读,SCn核对正确时,EZn可校对,SCn核对不正确时,EZn不能校对。EZn核对正确时,EZn可擦写。
E1AC,E2AC,E3AC,E4AC:初始值为8,EZn核对每错1次EnAC减1,EnAC等于0时,n区自毁,如果EZn核对正确EnAC恢复为初始值8。EnAC永远可读。
AZ1,AZ2,AZ3,AZ4;前2位为AZn的写读保护位,即写保护位(nPR),读保护位(nRD)。 SCn核对正确时,AZn可读,如果SCn核对不正确时,nRD控制着AZn的可读性,即如果nRD=1时,AZn可读;如果nRD=0时,AZn不可读。
EZn核对正确时,AZn可擦, EZn核对不正确时,Azn不可擦。
在熔丝熔断(FUSE2)后,即使SCn核对正确,也要看nPR是否为1,如果是0,AZ被写保护永远不能写。同时不可能再对EZ1进行读和擦写操作。
MTZ:用于测试卡的擦写性能。任意条件下均可测试。

下面的伪码程序在AT88SC1604卡完成初始化操作和在一应用区ADDR地址开始写LEN个字节,并读出校对。
Open(AT88SC1604)
IF CheckSC(Pwd) = OK THEN 继续 ELSE 非法卡
WriteCPZ(CPZ) ;可以写一些系统标识
UpdateSC(NewPwd)
SetZone(1)
UpdateSC(NewPwd)
UpdateEZ(NewEZ)
Erase(ADDR,LEN)
Write(ADDR,LEN,WDATA)
RDATA = Read(ADDR,LEN)
IF WDATA = RDATA THEN 写成功 ELSE 写失败
Fuse()
Close()
下面的伪码程序判断AT88SC1604卡是否是本系统支持的卡和对一应用区ADDR地址开始的LEN个字节完成某种操作。
Open(AT88SC1604)
ReadCPZ(CPZ) ;读出系统标识
if CPZ = 系统标识 THEN 继续 ELSE 非法卡
IF CheckSC(Pwd) = OK THEN 继续 ELSE 非法卡
SetZone(1)
RDATA = Read(ADDR,LEN)
<一些其它操作>
IF CheckSC(Pwd) = OK THEN 继续 ELSE 非法卡
IF CheckEZ(Pwd) = OK THEN 继续 ELSE 非法卡
Erase(ADDR,LEN)
Write(ADDR,LEN,WDATA)
RDATA = Read(ADDR,LEN)
IF WDATA = RDATA THEN 写成功 ELSE 写失败
Close()
3.AT88SC1608加密卡
如果说AT88SC1064是在AT88SC102、AT24C16的基础上作了一些改进的话,那么AT88SC1608则是接触式IC卡的一次成熟稳定的飞跃,在一卡多用上更能体现它的长处,它的保密性能强,读写速度快,无需先擦除就可以进行写操作。
AT88SC1608加密卡时钟频率为1MHz,支持页写方式(16字节/页),如果以页写方式访问的话,访问时间为10ms(最大)/页;工作电压为2.7V—5.5V;写/擦除次数为10万次;数据保持100年;工作温度为0—70℃;通讯协议符合ISO/IEC 7816-3同步协议。
尤其是AT88SC1608加密卡的高保密性能十分突出,除了带加密逻辑,还具有高保密认证及反截取跟踪技术,64位相互认证及认证错误计数器,错误计数8次。
AT88SC1608具有1个128字节设置区和8个256字节应用分区,8个区可以自由合并,分别受读密码、写密码(16套密码、各3个字节)控制,错误计数8次。
AT88SC1608共有17408位(2176字节)存储空间,其中前16K位(2K字节)为应用区,后1K位(128字节)为设置区。

存储结构:(字节地址以16进制表示)
存储分区 $0 $1 $2 $3 $4 $5 $6 $7 地址
应用分区0(User0) 256字节 $000
应用分区1(User1) 256字节 $100
应用分区2(User2) 256字节 $200
应用分区3(User3) 256字节 $300
应用分区4(User4) 256字节 $400
应用分区5(User5) 256字节 $500
应用分区6(User6) 256字节 $600
应用分区7(User7) 256字节 $700
设置区 128字节 $800


其中设置区存储结构:(字节地址以16进制表示)
$0 $1 $2 $3 $4 $5 $6 $7 地址
厂商信息 复位应答(ATR) 历史代码(HC) $00
厂商代码(FZ) 保留 卡商代码(CMC) $08
访问权限 AR0 AR1 AR2 AR3 AR4 AR5 AR6 AR7 $10
保留 $18
认证区 AAC 识别码(Nc) $20
密文(Ci) $28
密钥 密钥(Gc) $30
测试区 测试区(MTZ) $38
密码区 PAC 写密码0(WP0) PAC 读密码0(RP0) $40
PAC 写密码1(WP1) PAC 读密码1(RP1) $48
PAC 写密码2(WP2) PAC 读密码2(RP2) $50
PAC 写密码3(WP3) PAC 读密码3(RP3) $58
PAC 写密码4(WP4) PAC 读密码4(RP4) $60
PAC 写密码5(WP5) PAC 读密码5(RP5) $68
PAC 写密码6(WP6) PAC 读密码6(RP6) $70
PAC 写密码7(WP7/SC) PAC 读密码7(RP7) $78
注:哪个区用哪套密码或是否要认证要由访问权限AR0-AR7 来决定。

ATR:复位应答,由ATMEL定义,不可改。
HC:历史代码,由ATMEL定义,不可改。
FZ:厂商代码,由ATMEL定义,不可改。
CMC:卡商代码,由卡厂定义,不可改。
AR0-7:访问权限。个人化前定义。(详细用法参见访问权限)
Nc:识别码,通常用作卡的唯一标识--卡号。个人化前定义。
Ci:密文,个人化前可写一随机数,认证卡时使用,每次认证会被自动改写。
Gc:密钥,64位的保密种子,由Nc通过F1公式推算出来,在个人化前,写入卡中。个人化后不可访问,认证时作为该卡的F2公式的参数。(详细用法参见认证协议)
AAC:为认证错误计数器。初始值为8。
MTZ:用于测试卡的读写性能。任意条件下均可测试。
WP0-WP7,RP0-RP7:8套读写密码集, 每个分区可以分别指向唯一的密码集,也可以指向同一套密码集,这样就可以只核对一套密码而进入多个分区,使多个分区合成为一个大的分区。默认WP7、RP7为读写密码。写密码7(WP7)还作为传输密码(SC)。另外,如果需要修改读写密码时,也必须核对同一套密码集的写密码。
SC:传输密码。初始值由ATMEL定认,发到每个卡厂都不同。可以修改,在个人化前一直使用SC,个人化后其它密码才会被用到。
PAC:为分区密码错误计数器。初始值为8。

熔丝标志(FUSE)
熔丝标志位于设置区的$80地址,存储结构:(地址以16进制表示)
位7 位6 位5 位4 位3 位2 位1 位0 地址
0 0 0 0 0 PER CMA FAB $80
注:FAB、CMA、FAB为AT88SC1608的EEPROM的三级熔丝保护标志,“0”表示已熔断。在熔丝标志全为“1”时,所有的存储空间都可读。每一步熔断操作都不能返回。
FAB为ATMEL的芯片出厂时的熔断标志。
CMA为卡厂的卡片出厂时的熔断标志。
PER为应用系统启动前个人化时的熔断标志。

当我们把 AT88SC1608卡交付使用之前,卡内信息应已作完以下的操作:
ATMEL写完厂商信息(除卡商代码)、传输密码(SC),把其余的存储空间都写成“1”,做FAB熔断操作,使FAB=0。
卡厂写入自已的卡商代码后,做CMA熔断操作,使CMA=0。
系统商对卡做初始化,或卡在发行之前由系统做初始化,然后做PER熔断操作,使CMA=0。

访问权限
熔丝熔断前后的访问权限表:
区 访问 FAB=0 CMA=0 Per=0
厂商信息 (除卡商代码) 读 可以 可以 可以
写 禁止 禁止 禁止
卡商代码 读 可以 可以 可以
写 传输密码(SC) 禁止 禁止
访问权限 读 可以 可以 可以
写 传输密码(SC) 传输密码(SC) 禁止
认证区 读 可以 可以 可以
写 传输密码(SC) 传输密码(SC) 禁止
密钥 读 传输密码(SC) 传输密码(SC) 禁止
写 传输密码(SC) 传输密码(SC) 禁止
测试区 读 可以 可以 可以
写 可以 可以 可以
密码 读 传输密码(SC) 传输密码(SC) 写密码(WP)
写 传输密码(SC) 传输密码(SC) 写密码(WP)
PAC(计数器) 读 可以 可以 可以
写 传输密码(SC) 传输密码(SC) 写密码(WP)
应用区 读 访问权限(AR) 访问权限(AR) 访问权限(AR)
写 访问权限(AR) 访问权限(AR) 访问权限(AR)

访问权限AR0-AR7的存储结构:(使能为“0”,默认为“1”)
位7 位6 位5 位4 位3 位2 位1 位0
WPE RPE ATE PW2 PW1 PW0 MDF PGO
WPE:为写密码使能标志。值为0时,对应用分区进行写操作时,必须通过写密码。在个人化后,核对写密码,也决定着是否能改变读密码和写密码。
RPE:为读密码使能标志。值为0时,通过读密码或写密码,才能读某应用分区。如果密码核对错误将返回熔丝状态位。
ATE:认证使能标志。为0时,认证必须通过才能操作当前应用分区。
PW2,PW1,PW0:这3位指定当前应用分区使用哪一套密码集。每个分区可以分别指向唯一的密码集,也可以指向同一套密码集,这样就可以只核对一套密码而进入多个分区,使多个分区合成为一个大的分区。
MDF:为禁止修改操作标志。值为0时,当前应用分区被写保护,被写保护区的内容必须在个人化之前写入。
PGO:只写标志。如果为0,当前应用分区的每一位只能从“1”写成“0”,而不能从“0”改回为“1”。

认证协议
产出随机数Nc(往往当作卡号)和Ci,计算出Gc=F1(Ks,Nc),把Nc、Ci、Gc写入卡中
卡 Nc Gc Ci 认证协议 读写器 Ks Q0(随机数)
识别码: Nc Ci Ci+1=F2(Gc,Ci,Q0); if(Ci+1==Q1) Ci+2=F2(Gc,C1+1); Ci=Ci+2; //修改Ci 认证正确; else Ci=Ci; 认证错误; Ci (使用读命令) (初始化认证命令) (校验认证命令) (读命令) Gc=F1(Ks,Nc); Q0 Q1=F2(Gc,Ci,Q0); Q1 Q2=F2(Gc,Q1); if(Q2=Ci) 认证正确; else 认证错误;
F1算法:64BIT 用户自定义算法。
F2算法:卡内64BIT 算法(Des 算法的变种,提供C语言和51汇编语言程序)
该协议包括卡和读写器CPU的互相认证(ELVA专利),而且认证数据加密传送,可以防止通讯数据被窃取。

下面的伪码程序在AT88SC1608卡完成初始化操作和在一应用区ADDR地址开始写LEN个字节,并读出校对。
Open(AT88SC1608)
IF CheckSC(Pwd) = OK THEN 继续 ELSE 非法卡
InitAuth(Nc,Ci,Gc)
SetZone(1)
SetAR(AR)
UpdateWP(NewWP)
UpdateRP(NewRP)
Write(ADDR,LEN,WDATA)
RDATA = Read(ADDR,LEN)
IF WDATA = RDATA THEN 写成功 ELSE 写失败
Fuse()
Close()
下面的伪码程序判断AT88SC1608卡是否是本系统支持的卡和对一应用区ADDR地址开始的LEN个字节完成某种操作。
Open(AT88SC1608)
CheckAuth(Gc)
SetZone(1)
IF CheckRP(Pwd) = OK THEN 继续 ELSE 非法卡
RDATA = Read(ADDR,LEN)
<一些其它操作>
IF CheckWP(Pwd) = OK THEN 继续 ELSE 非法卡
Write(ADDR,LEN,WDATA)
RDATA = Read(ADDR,LEN)
IF WDATA = RDATA THEN 写成功 ELSE 写失败
Close()
4.AT88SC153加密卡
AT88SC153是ATMEL继AT88SC1068之后新推出的一种卡型,它继承了AT88SC1608的全部优点,只是存储容量及分区数有所改变,基本上可以理解为小容量的AT88SC1608。
AT88SC153加密卡时钟频率为1MHz,支持页写方式(8字节/页),如果以页写方式访问的话,访问时间为10ms(最大)/页;工作电压为2.7V—5.5V;写/擦除次数为10万次;数据保持100年;工作温度为0—70℃;通讯协议符合ISO/IEC 7816-3同步协议。
与AT88SC1608一样,AT88SC153加密卡的高保密性能十分突出,除了带加密逻辑,还具有高保密认证及反截取跟踪技术,64位相互认证及认证错误计数器,错误计数8次。
AT88SC153具有1个64字节设置区和3个64字节应用分区,3个区可以自由合并,分别受读密码、写密码(4套密码、各3个字节)控制,错误计数4/8次。
AT88SC153共有2048位(256字节)存储空间,其中前1536位(192字节)为应用区,后512位(64字节)为设置区。

存储结构:(字节地址以16进制表示)
存储分区 $0 $1 $2 $3 $4 $5 $6 $7 地址
应用分区0(User0) 64字节 $00
应用分区1(User1) 64字节 $40
应用分区2(User2) 64字节 $80
设置区 64字节 $C0

其中设置区存储结构:(字节地址以16进制表示)
$0 $1 $2 $3 $4 $5 $6 $7 地址
厂商信息 复位应答(ATR) 历史代码(HC) $00
厂商代码(FZ) 卡商码(CMC) AR0 AR1 AR2 MTZ $08
识别区 发布号(IC) $10
DCR 识别码(Nc) $18
AAC 密文(Ci) $20
密钥 密钥(Gc) $28
密码区 PAC 写密码0(WP0) PAC 读密码0(RP0) $30
PAC 写密码1(WP1/SC) PAC 读密码1(RP1) $38
注:哪个区用哪套密码或是否要认证要由访问权限AR0-AR2 来决定。
在采用校验和认证方式时,地址$20也可以用作校验和认证寄存器(CAR)。

ATR:复位应答,由ATMEL定义,不可改。
HC:历史代码,由ATMEL定义,不可改。
FZ:厂商代码,由ATMEL定义,不可改。
CMC:卡商代码,由卡厂定义,不可改。
AR0-2:访问权限。个人化前定义。(详细用法参见访问权限)
MTZ:用于测试卡的读写性能。任意条件下均可测试。
IC:发布号。个人化前定义。。
DCR:设备设置寄存器。
Nc:识别码,通常用作卡的唯一标识--卡号。个人化前定义。
Ci:密文,个人化前可写一随机数,认证卡时使用,每次认证会被自动改写。
Gc:密钥,64位的保密种子,由Nc通过F1公式推算出来,在个人化前,写入卡中。个人化后不可访问,认证时作为该卡的F2公式的参数。(详细用法参见认证协议)
AAC:为认证错误计数器。初始值为8,但每次校验出错减2,所以共有4次连续校验出错的机会,可扩展为8次(见DCR的设置方法)。也用作Ci的一部分,注意如果修改了AAC,会影响下一次认证的Ci值。
CAR:校验和认证寄存器。只有认证完成时才有用,每次写操作都会激活校验和方式,并把写或连续写的校验和自动写入CAR,此时可以读出校验和,以确定写操作是否完成。任何读操作都会结束校验和方式。
WP0,WP1,RP0,RP1:2套读写密码集, 每个分区可以分别指向唯一的密码集,也可以指向同一套密码集,这样就可以只核对一套密码而进入多个分区,使多个分区合成为一个大的分区。默认WP1、RP1为读写密码。写密码1(WP1)还作为传输密码(SC)。另外,如果需要修改读写密码时,也必须核对同一套密码集的写密码。
SC:传输密码。初始值由ATMEL定认,发到每个卡厂都不同。可以修改,在个人化前一直使用SC,个人化后其它密码才会被用到。
PAC:为分区密码错误计数器。初始值为8,但每次校验出错减2,所以共有4次连续校验出错的机会。可扩展为8次。(见DCR的设置方法)

熔丝标志(FUSE)
熔丝标志位于设置区的$40地址,存储结构:(地址以16进制表示)
位7 位6 位5 位4 位3 位2 位1 位0 地址
0 0 0 0 0 PER CMA FAB $40
注:FAB、CMA、FAB为AT88SC153的EEPROM的三级熔丝保护标志,“0”表示已熔断。在熔丝标志全为“1”时,所有的存储空间都可读。每一步熔断操作都不能返回。
FAB为ATMEL的芯片出厂时的熔断标志。
CMA为卡厂的卡片出厂时的熔断标志。
PER为应用系统启动前个人化时的熔断标志。

当我们把 AT88SC153卡交付使用之前,卡内信息应已作完以下的操作:
ATMEL写完厂商信息(除卡商代码、访问权限和测试区)、传输密码(SC),把其余的存储空间都写成“1”,做FAB熔断操作,使FAB=0。
卡厂写入自已的卡商代码后,做CMA熔断操作,使CMA=0。
系统商对卡做初始化,或卡在发行之前由系统做初始化,然后做PER熔断操作,使CMA=0。

访问权限
熔丝熔断前后的访问权限表:
区 访问 FAB=0 CMA=0 Per=0
厂商信息 (除CMC,AR,MTZ) 读 可以 可以 可以
写 禁止 禁止 禁止
卡商代码 读 可以 可以 可以
写 传输密码(SC) 禁止 禁止
访问权限 读 可以 可以 可以
写 传输密码(SC) 传输密码(SC) 禁止
测试区 读 可以 可以 可以
写 可以 可以 可以
识别区 读 可以 可以 可以
写 传输密码(SC) 传输密码(SC) 禁止
密钥 读 传输密码(SC) 传输密码(SC) 禁止
写 传输密码(SC) 传输密码(SC) 禁止
密码 读 传输密码(SC) 传输密码(SC) 写密码(WP)
写 传输密码(SC) 传输密码(SC) 写密码(WP)
PAC(计数器) 读 可以 可以 可以
写 传输密码(SC) 传输密码(SC) 写密码(WP)
应用区 读 访问权限(AR) 访问权限(AR) 访问权限(AR)
写 访问权限(AR) 访问权限(AR) 访问权限(AR)

访问权限AR0-AR2的存储结构:(使能为“0” ,默认为“1”)
位7 位6 位5 位4 位3 位2 位1 位0
WPE RPE ATE AOW PWS WLM MDF PGO
WPE:为写密码使能标志。值为0时,对应用分区进行写操作时,必须通过写密码。在个人化后,核对写密码,也决定着是否能改变读密码和写密码。
RPE:为读密码使能标志。值为0时,通过读密码或写密码,才能读某应用分区。如果密码核对错误将返回熔丝状态位。
ATE:认证使能标志。为0时,认证必须通过才能操作当前应用分区。
AOW:只有写时才需要认证标志。只有写操作时才需要进行认证,读不需要进行认证操作,如果ATE=0,则AOW被忽略。
PWS:指定当前应用分区使用哪一套密码集。每个分区可以分别指向唯一的密码集,也可以指向同一套密码集,这样就可以只核对一套密码而进入多个分区,使多个分区合成为一个大的分区。
WLM:写锁模式使能。每个区的8个字节为一页。如果WLM=0,使每页的第一个字节(byte0)的每一位分别为该页8个字节的写锁标志,0为写锁(即只能从“1”写成“0”,而不能从“0”改回为“1”),1为解锁。
MDF:为禁止修改操作标志。值为0时,当前应用分区被写保护,被写保护区的内容必须在个人化之前写入。
PGO:只写标志。如果为0,当前应用分区的每一位只能从“1”写成“0”,而不能从“0”改回为“1”。

分享到:
来顶一下
返回首页
返回首页
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表
栏目导航->技术文章
  • 电子应用基础
  • 电源技术
  • 无线传输技术
  • 信号处理
  • PCB设计
  • EDA技术
  • 单片机学习
  • 电子工具设备
  • 技术文章
  • 精彩拆解欣赏
  • 推荐资讯
    使用普通运放的仪表放大器
    使用普通运放的仪表放
    3V与5V混合系统中逻辑器接口问题
    3V与5V混合系统中逻辑
    数字PID控制及其改进算法的应用
    数字PID控制及其改进
    恶劣环境下的高性价比AD信号处理数据采集系统
    恶劣环境下的高性价比
    栏目更新
    栏目热门