1356|0

2015

帖子

0

TA的资源

纯净的硅(中级)

楼主
 

CPU卡程序设计的处理流程 [复制链接]

当单片机控制电路检测到有CPU卡插入后,处理流程为:


1)、卡上电和复位


2)、选择要操作的卡上的主文件


3)、ESAM模块上电和复位


4)、选择要操作的ESAM模块的主文件


5)、如果文件的读写权限自由,这时已经可以对文件进行读写操作,如果读写有权限,则需要向下经过内部认证和外部认证后进行文件的读写。


6)、卡和ESAM之间的内部认证


7)、卡和ESAM的外部认证


8)、读(写)有权限的文件。


2.1端口配置


这里定义了以后程序里面用到的与CPU卡和ESAM模块有关的单片机端口定义。


2.1.1. 端口定义


#define P3_7EsamPower BIT7 //ESAM上电


#define P4_4EsamSDA BIT4 //ESAM数据端


#define P4_5EsamRST BIT5 //ESAM复位


#define P3_2CardSDA BIT2 //卡数据端


#define P3_4CardRst BIT4 //卡复位


#define P3_5CardInsChk BIT5 //卡插入检测


#define P3_6CardPower BIT6 //卡上电


#define PJ_1MCLK BIT1 // MCLK,卡和ESAM的SCL信号输入端


在程序中经常要对端口的输入输出和电平高低状况进行改变,MSP430单片机不能对端口进行位操作,为了操作方便将端口的各种状态用宏定义进行规范,这样可以简化程序中队端口的操作,并且使程序可读性强,便于移植。


例如下面定义的CardPowerInput,直接从字面理解即为CPU卡的商店管脚作为输入口,而CardPowerOutputHigh意为卡上电端口输出高电平。这样不仅直观,而且避免了在程序中直接对端口进行配置。


//卡SDA管脚宏定义


#define CardSDAOutput P3DIR|=P3_2CardSDA


#define CardSDAInput P3DIR&=~P3_2CardSDA


#define CardSDAOutputHigh P3OUT|=P3_2CardSDA


#define CardSDAOutputLow P3OUT&=~P3_2CardSDA


#define CardSDAInputCheck P3IN&P3_2CardSDA


//卡复位管脚宏定义


#define CardRSTOutput P3DIR|=P3_4CardRst


#define CardRSTInput P3DIR&=~P3_4CardRst


#define CardRSTOutputHigh P3OUT|=P3_4CardRst


#define CardRSTOutputLow P3OUT&=~P3_4CardRst


#define CardRSTInputCheck P3IN&P3_4CardRst


//卡上电管脚宏定义


#define CardPowerOutput P3DIR|=P3_6CardPower


#define CardPowerInput P3DIR&=~P3_6CardPower


#define CardPowerOutputHigh P3OUT|=P3_6CardPower


#define CardPowerOutputLow P3OUT&=~P3_6CardPower


#define CardPowerInputCheck P3IN&P3_6CardPower


//卡插入管脚宏定义


#define CardInsertCheckOutput P3DIR|=P3_5CardInsChk


#define CardInsertCheckInput P3DIR&=~P3_5CardInsChk


#define CardInsertCheckOutputHigh P3OUT|=P3_5CardInsChk


#define CardInsertCheckOutputLow P3OUT&=~P3_5CardInsChk


#define CardInsertCheck P3IN&P3_5CardInsChk


//Esam SDA管脚宏定义


#define EsamSDAOutput P4DIR|=P4_4EsamSDA


#define EsamSDAInput P4DIR&=~P4_4EsamSDA


#define EsamSDAOutputHigh P4OUT|=P4_4EsamSDA


#define EsamSDAOutputLow P4OUT&=~P4_4EsamSDA


#define EsamSDAInputCheck P4IN&P4_4EsamSDA


//Esam 复位管脚宏定义


#define EsamRSTOutput P4DIR|=P4_5EsamRST


#define EsamRSTInput P4DIR&=~P4_5EsamRST


#define EsamRSTOutputHigh P4OUT|=P4_5EsamRST


#define EsamRSTOutputLow P4OUT&=~P4_5EsamRST


#define EsamRSTInputCheck P4IN&P4_5EsamRST


//Esam 上电管脚宏定义


#define EsamPowerOutput P3DIR|=P3_7EsamPower


#define EsamPowerInput P3DIR&=~P3_7EsamPower


#define EsamPowerOutputHigh P3OUT|=P3_7EsamPower


#define EsamPowerOutputLow P3OUT&=~P3_7EsamPower


#define EsamPowerInputCheck P3IN&P3_7EsamPower


//MCLK管脚宏定义


#define MCLKOutput PJDIR|=PJ_1MCLK


#define MCLKInput PJDIR&=~PJ_1MCLK


#define MCLKOutputHigh PJOUT|=PJ_1MCLK


#define MCLKOutputLow PJOUT&=~PJ_1MCLK


#define MCLKInputCheck PJIN&PJ_1MCLK


#define MCLKSEL PJSEL|=PJ_1MCLK


2.2. 变量及宏定义


2.2.1. 卡处理结果变量


unsigned int CardError;


该变量定义了在卡处理过程中出现的各种异常状态,用以提示在那一步出现了问题,便于问题查找及解决。


以下是该变量各个位的定义。


#define ErrorRSTBIT BIT0 //卡复位错


#define ErrorRWBIT BIT1 //卡读写错误


#define ErrorPasswBIT BIT2 //卡与Esam内部认证错误


#define ErrorCardExtAuthBIT BIT3 //卡外部认证错误


#define ErrorEsamExtAuthBIT BIT4 //ESAM模块外部认证错误


#define ErrorKeyUpdateBIT BIT5 //密钥更新错误


#define ErrorKeyBIT BIT6 //密钥比较错误


2.2.2. CPU卡通信字节长度


unsigned char TxAndRxBuff[124];


卡或者ESAM读写过程中的数据通过此变量进行传输。


CPU卡在处理过程中,每次最多可接收和发送124个字节


2.2.3. 卡和ESAM文件主目录宏定义


//卡主目录3f 01,Esam主目录3f 00


#define MainDir 0x3f


#define CardMainDir 0x01


#define EsamMainDir 0x00


对卡或者ESAM的文件进行操作前,必须先选择该文件所在的主目录。


2.2.4. 响应状态字


//响应状态字SW1,SW2,


//命令正确执行的响应数据为SW1SW2=90 00或SW1SW2=61 00


#define RespondStateByte1 0x90


#define RespondStateByte2 0x00


#define RespondStateByte3 0x61


2.2.5. 数据接收结果变量


//cTxAndRxStatus CPU卡接收数据正确标志


#define ReceINSRightBIT BIT0


该变量用以判定从卡或者ESAM接受的数据是否正确。


2.2.6. 卡(ESAM操作标志变量)


此变量用以标明是对卡还是对ESAM进行操作,并且还标明从卡或者ESAM来的数据的校验结果正确与否


//变量CardWorkFlag


#define CardORESAM BIT0 //0--对SAM操作 1--对卡操作


#define CARDPRO_ERR BIT1 //0--读写卡操作正常 1--读写卡错误


#define cCheckOrRe BIT2


#define ICXOR BIT6 //卡/ESAM传来的校验和


#define MXOR BIT7 //CPU计算的校验和


#define CheckflagBit BIT5

 
点赞 关注

回复
举报
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表