2 CPU卡处理流程

本系统假设所有CPU卡和ESAM模块的文件可以自由读,但是写文件的时候需要权限认证。

当单片机控制电路检测到有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

CPU卡程序设计实例(四)CPU卡处理流程相关推荐

  1. CPU卡程序设计实例(六)ETU配置

    1.数据位宽时间(ETU)计算程序 前面已经说过,数据位宽是CPU卡程序设计中非常重要的一环,涉及到数据读写的可靠性和稳定性.下面这段程序就是在IAR环境下,基于MSP430单片机C语言的数据位宽计算 ...

  2. CPU卡程序设计实例(二十三)卡和ESAM之间内部认证

    1.标识符宏定义 //CPU卡密钥标识 #define CardInfoDownKey 0x81 // #define CardInfoUpKey 0x82 // #define CardInside ...

  3. CPU卡程序设计实例(二十六)卡和ESAM之间外部认证

    /******************************************* 函数名称:CardExterVali 函数功能:卡与ESAM之间外部认证 输入参数:cApplySerialN ...

  4. CPU卡程序设计实例(十)ESAM复位程序

    ESAM复位程序 /************************************** 函数名称:*EsamRst 函数功能:Esam复位 入口参数:无 出口参数:复位数据 描述: Esam ...

  5. CPU卡程序设计实例(八)ESAM模块卡上、下电

    1.3 ESAM模块上电程序 /******************************************* 函数名称:EsamPowerUp 函数功能:Esam上电 输入参数:无 输出参数 ...

  6. CPU卡程序设计实例(十二)ESAM模块字节接收函数

    ESAM模块字节接收函数 /************************************** 函数名称:EsamReceChar 函数功能:Esam接收一个字节 入口参数:无 出口参数:i ...

  7. CPU卡程序设计实例(十三)终端向ESAM发送数据

    终端向ESAM发送一个字节函数 /************************************** 函数名称:EsamSendChar 函数功能:向Esam发送一个字节 入口参数:cSen ...

  8. CPU卡程序设计实例(二十五)ESAM过程密钥内部认证

    /******************************************* 函数名称:EsamInsideVali 函数功能:ESAM过程密钥内部认证 输入参数: pcReceCardR ...

  9. matlab程序设计实例——语音识别

    matlab程序设计实例--语音识别 经典的语音识别流程如下 语音输入--去噪滤波--特征提取--形成模板库--输入测试语音--匹配模板库--得出结论. 在语音处理时最常用的是DTW进行模式匹配,运用 ...

  10. gpgpu-sim卡分配程序设计实例分析

    gpgpu-sim卡分配程序设计实例分析 运行代码地址:https://github.com/gpgpu-sim/gpgpu-sim_distribution 一.概述 此文件包含有关安装.生成和运行 ...

最新文章

  1. 机器人带陀螺仪走钢丝_一言不合就走钢丝,机器人化身“七变美男子”,萌翻你!...
  2. python 旋转矩阵_【每日算法Day 93】不用额外空间,你会旋转一个矩阵吗?
  3. 阶段3 1.Mybatis_12.Mybatis注解开发_4 mybatis注解开发CRUD的其他操作
  4. win10 添加照片查看器
  5. 项目管理面试常见问题及答案
  6. tumblr_使用Google Analytics(分析)获取有关您的Tumblr博客的详细统计信息
  7. 如何设置QQ和微信截图快捷键
  8. FPGA------------ SRIO通信(1)发送
  9. 自然语言处理实战——对电影评论进行情感分析(英文)
  10. java学习思维导图
  11. 跟小博老师一起学习数据库 ——索引
  12. 【计算机算法】贪心算法——看电影、活动选择问题
  13. html鼠标事件没反应,电脑鼠标点击当前页面没反应怎么办
  14. Ubuntu下adb无法识别android设备的解决方法
  15. 芯洲电源,一款可以升压降压DCDC开关稳压电源,车规级面世,文章是参数详解
  16. BBS系统的设计与实现
  17. wapl是什么功能?启用有什么用
  18. 程序员,在什么情况下加班是可接受的
  19. 如何才能实现自己的梦想
  20. eToro前高管出任INX首席技术官

热门文章

  1. hadoop reducer不执行问题及解决
  2. 【无人驾驶系列七】高精度地图在无人驾驶中的应用
  3. BZOJ4340:[BJOI2015]隐身术(后缀数组,ST表,DFS)
  4. ads的designguide打不开报错
  5. Poco库使用:文件压缩和解压缩
  6. css 写一个左中右布局占满屏幕,左右两块固定宽度200,中间自适应宽,先加载中间块
  7. 团队作业8----第二次项目冲刺(Beta阶段) 第三天
  8. ROC、PR曲线、AUC值
  9. zotero与Obsidian联动笔记(二):zotero拖拽highlights的格式修改
  10. delphi控件属性和事件