以下是卡片接收指令相关的源代码:
(2)硬件模块设计。智能卡COS上电后首先要进行芯片初始化,其主要设置以下几个方面:芯片初始工作时的频率,以及使用外频还是内频;芯片串口初始工作的速率(一般为“ll”的波特率)-芯片串口的工作模式(包括T=0还是T=1协议,正向传输还是反向传输,奇校验还是偶校验等);存储器的初始映射方式。
智能卡芯片(以下以51系列智能卡芯片为例)一般包含几十到几百KB的FLASH,以1个页面为单位进行擦除,根据FLASH编程写的特点,也就是1能写成0,而0不能写成1,故在设计编程写函数时为了保证写数据的正确性,特采取如下的方式实现此功能:
第一步:取出要写入地址的数据(为A),与要写入的数据(为B)进行与操作(结果为C);
第二步:在要写入数据的地址写入数据(B);
第三步:取出写人数据后的地址的数据与数据C进行比较。
对于51系列智能卡芯片,由于标准的8051对程序存储器最大值支持64 KB,所以芯片采用BANK的编址方式。这时往往需要一个映射函数来实现不同BANK的跳转。如果一款智能卡芯片的程序存储器采用128 KB的FLASH用来存放COS和用户数据。128 KB的FLASH均分4个32 KB的BANK,在这4个区域里,Commom区是3个Bnak的公共区域,即Commom区和每个32 KB的BANK都可以组成64 KB的连续空间。3个Bnak之间不能直接互相访问,而必须调用Commom区里的程序才能实现相互的访问。所以在创建工程时要把经常使用的程序和常数,如中断入口函数、Bank Switch跳转表等都放到Commom区里,这样才能实现各个区域的相互访问。