智能卡支付终端设计实例
ACOS3的文件结构
制造ACOS3卡时,其16kB EEPROM存储器划分成内部数据存储区和用户数据存数区两部分。内部数据存储区保存配置数据,通常被操作系统用于管理特定的功能。用户数据存储区保存"实际"交易控制下正常使用智能卡的操作数据。在本实例代码中,只使用内部数据存储区,后续讨论中将重点关注内部数据存储区。
不论是内部数据存储区还是用户数据存储区,访问ACOS3卡的存储器都要通过数据文件和数据记录进行。每个数据文件都由一定数量的数据记录组成,最多可达255个。不同数据文件的记录长度可以不同,但对于给定的数据文件其记录长度总是固定的。内部数据文件的文件结构(文件大小、记录长度等)由操作系统定义且不能更改,但对于用户数据存储区,可由卡发行人在进行个性化智能卡设置时确定其文件结构。为简单起见,只使用卡中已有的内部数据文件系统,不再生成一个专门的用户数据文件系统。
所有文件都可通过ACOS3的读记录和写记录命令进行访问。这些命令发送到智能卡,而任何响应都会被应用笔记4036中提供的APDU函数接收。每个文件都由2字节的文件标识符来识别。对于所有内部数据文件,标识符的第一个字节固定为0xFF。表1列出了内部数据文件的文件名、文件标识符和记录结构。
个性化文件ID=0xFF 0x02,包含三个记录共12字节,各记录的长度为4个字节。第一个记录包含智能卡中某些选项的配置信息,而第二和第三个记录则没有预先定义。因此,这两个记录被用于保存本应用实例中智能卡的交易次数和帐户余额。虽然单个记录具有足够的存储空间(4个字节)来保存交易次数和帐户余额所需的三个字节,但这两个数据还是存储在不同的记录中以便操作。这也使得增大这两个数据的值成为可能。交易次数存储在记录2的第一个字节,而帐户余额则存储在记录3的前两个字节,高字节在前(大端)。
ACOS3命令结构
ACOS3卡有13条基本命令,本应用实例中主要用到其中的三条命令。它们分别是文件选择、读记录和写记录命令。这三条命令都将在后面进行说明。ACOS3卡的所有命令都符合EMV规范描述的应用协议数据单元(APDU)的格式。APDU的一般格式包括如下几部分:
* CLA命令类
* INS指令代码
* P1指令参数1
* P2指令参数2
* Lc(P3)命令数据域给出的字节数(可选)
* 命令发送数据字节中的数据序列
* Le应答中数据域所期望的数据字节最大长度(可选)
文件选择命令
文件选择命令可打开文件,从而读/写文件的记录。它是一个7字节命令,格式为:
个性化文件是本应用中用到的唯一文件(见表1),它的文件ID 0xFF 0x02为命令的最后两个字节。与所有ACOS3命令一样,执行成功后返回2字节状态信息,其数值为0x90 0x00。若返回任何其它数值则表明命令执行错误。在前面提到的ACS网站上,ACOS3参考手册中列出了所有可能的错误状态字节及其含义。
读记录命令
读记录命令可从当前所选文件的已识别记录中读取指定数量的字节。它是一个5字节命令,格式为:
可以看出,该命令包含两个可变字节:一个字节指示记录号,另一个字节指示要从指定记录中读取的字节数(长度)。在本应用实例中,每次都读取个性化文件记录的全部四个字节,因此长度固定为0x04。若读记录命令执行成功,将返回6字节数据:记录中存储的4字节信息,2字节状态信息。若返回的状态字节数值不是0x90 0x00,则表明命令执行错误,应丢弃返回的数据。
写记录命令
写记录命令可向当前所选文件的指定记录写入数据。该命令的长度可以随着要写入的字节数变化。在本实例中,每次都写入4个字节,因此该命令具有如下所示的格式:
可以看出,该命令总共包含6个可变字节;一个字节指示记录号(0至N-1),另一个字节指示要写入的字节数(长度 = 0x04),此外还有四个数据字节。若写记录命令执行成功,将返回两字节状态信息(执行成功时返回0x90 0x00)。
装载可执行文件
DS8007评估板出厂时已装有本智能卡交易实例的软件。若要验证是否安装了该软件,可以给评估板通电然后观察显示屏。如果显示屏上出现"在下面的大插槽中插入智能卡" (图1),则表明已经加载了程序。如果没有显示这条信息,则可通过MTK软件将交易软件装载到板上的电池备份SRAM中。应用笔记4036 (参看上文)说明了如何装载应用程序。要装载的文件为Trans.hex,包含在AN4120_SW.zip中,可从上面提到的ftp网站下载。
在安装完交易软件并断开引导加载程序之后,处理器就立即开始运行应用程序。如果评估板此时仍然连接至PC,