登录 免费注册 首页 | 行业黑名单 | 帮助
维库电子市场网
技术交流 | 电路欣赏 | 工控天地 | 数字广电 | 通信技术 | 电源技术 | 测控之家 | EMC技术 | ARM技术 | EDA技术 | PCB技术 | 嵌入式系统
驱动编程 | 集成电路 | 器件替换 | 模拟技术 | 新手园地 | 单 片 机 | DSP技术 | MCU技术 | IC 设计 | IC 产业 | CAN-bus/DeviceNe

IC逻辑加密卡的程序,感觉有用的就顶一下啊

作者:ploto 栏目:MCU技术
IC逻辑加密卡的程序,感觉有用的就顶一下啊
/* iccard.h
前一阵子做了个IC卡读写程序,可以读写SLE4442系统逻辑加密卡的,本来想在网上找一个,没找到,自己写了一个,为了让后来人可以轻松一点,所以就奉献给大家:)
注释比较少(本人的坏习惯),看起来有点累,不过建议你在自己看之前先熟悉一下SLE4442的协议。
程序是经过测试的,在我的931上工作的很好,有什么问题,发信给我
Ploto_zhu@etang.com
*/
#ifndef IC_CARD_H
#define IC_CARD_H
#include <REG931.H>

#define  RdMainMem   0x30        // outgoing data
#define  UpdMainMem  0x38        // processing
#define  RdPrtMem     0x34        // outgoing data
#define  WrPrtMem    0x3C        // processing
#define  RdSecMem     0x31        // outgoint data
#define  UpdSecMem   0x39        // processing
#define  CmpVerDat   0x33        // processing


sbit CCIO  = P0^3;
sbit CCRST = P0^1;
sbit CCCLK = P0^2;
sbit CCIN  = P2^7;

#ifndef uCHAR
#define uCHAR unsigned CHAR
#endif
void IC_Reset(uCHAR *buffer);
void ReadMainMemory(uCHAR addrFrom,uCHAR* buffer,uCHAR ulen);
void ReadProtectedMem(uCHAR rdBuf[4]) ;
void UpdateMainMemory(uCHAR addr,uCHAR VALUE) ;
void WriteProtectedMem(uCHAR addr, uCHAR VALUE)  ;
void ReadSecMemory(uCHAR buffer[4])  ;
void UpdateSecMem(uCHAR addr, uCHAR VALUE)   ;
bit CompareVerifData(uCHAR VALUE[3])   ;

#endif

/* ---------------------   ICCard.c ----------*/
#include "iccard.h"
#include <REG931.H>
/*  2005-9-4 常州中天科技有限公司 祝启忠*/
#ifndef uCHAR
#define uCHAR unsigned CHAR
#endif
//sbit CCRST=P0^1;
//sbit CCCLK=P0^2;
//sbit CCIO=P0^3;
//void sendtoPC(uCHAR*);
//void sendBuffer(CHAR* buf,CHAR len) ;

void Delay(int x)
{
    int i;
    for(i=(x<<1);i>0;i--);
}

void OnePlus()
{
    CCCLK=1;
    Delay(20);
    CCCLK=0;
    Delay(20);
}
unsigned CHAR ReadByte()
{
    uCHAR TempByte;
    uCHAR VALUE;
    uCHAR i;
    VALUE=0;
    for(i=0;i<8;i++)
    {
        CCCLK=1;
        TempByte=(unsigned CHAR)CCIO;
        Delay(10);
        CCCLK=0;
        Delay(10);
        VALUE |= (TempByte<<i);
    }
    return VALUE;
}
void ICSendByte(uCHAR byte)
{
    uCHAR TempByte;
    uCHAR i;
    for(i=0;i<8;i++)
    {
        TempByte= ((byte>>i) & 0x01);
        CCIO=(bit)TempByte;
        Delay(8);
        CCCLK=1;
        Delay(10);
        CCCLK=0;
        Delay(8);
    }

}
void IC_Reset(uCHAR *buffer)
{
    uCHAR len;
    CCCLK=0;
    CCRST=0;
    CCIO=1;
    Delay(800);
    CCRST=1;
    Delay(10);
    CCCLK=1;
    Delay(10);
    CCCLK=0;
    Delay(50);
    CCRST=0;
    Delay(10);
    for(len = 0;len <4;len++)
        buffer[len]=ReadByte();
    
}


void SendCommand(uCHAR Cmd[3])
{
    uCHAR i;
    //start condition
    //当时钟线为高的时候,IO线从1到0
    CCCLK=0;
    CCIO=1;
    Delay(4);
    CCCLK=1;
    Delay(8);
    CCIO=0;
    Delay(8);

    CCCLK=0;
    Delay(5);  //start condition
    //data
    //IC卡在时钟的上升沿读取数据
    for(i=0;i<3;i++)
        ICSendByte(Cmd[i]);
    //stop condition
    //当时钟线为高的时候, IO从0到1
    CCIO=0;
    Delay(10);
    CCCLK=1;
    Delay(10);
    CCIO=1;
    //命令发送结束
    Delay(10);

}

//读取主存储器
void ReadMainMemory(uCHAR addrFrom,uCHAR* buffer,uCHAR ulen)
{
    unsigned int len;
    uCHAR buf[3];
    buf[0]=RdMainMem;
    buf[1]=addrFrom;
    buf[2]=0;
    SendCommand(buf);

//    sendtoPC(" send ok");
    //开始读取数据
    CCCLK=0;
    Delay(10);
    for(len=0;len<256-addrFrom;len++)
    {    
        if(len < ulen)
        {
            buffer[len]=ReadByte();
//            sendBuffer(&buffer[len],1);
        }
        else
        {    
            buf[0]=ReadByte();
//            sendBuffer(buf,1);    //要给脉冲,但丢弃数据
        }
    }
//    sendtoPC("Read OK");
    // 给个结束标志
    OnePlus();
}

//读取保护内容,一共32位,4个字节
void ReadProtectedMem(uCHAR rdBuf[4])
{
    uCHAR len;
    uCHAR buf[3];
    buf[0]=RdPrtMem;
    buf[1]=buf[2]=0;//addrFrom;
    SendCommand(buf);
    //开始读取数据
    CCCLK=0;
    Delay(10);
    for(len=0;len<4;len++)
  &nbs
2楼: >>参与讨论
armbasic
订!
 
3楼: >>参与讨论
LPC900
看来Ploto做事情挺认真的
顶!

4楼: >>参与讨论
ploto
过奖了
呵呵,当时想找一个代码来用用,怎么也找不到,搞得我研究时序研究了半天,希望能够幸福后来人一下,^_^

5楼: >>参与讨论
zhongwei
不错,支持!
重要的参考.

6楼: >>参与讨论
huangxd
有没有CPU卡的一些资料啊?
CPU卡的读写程序怎么写啊?

7楼: >>参与讨论
huangxd
不知道这位DX作过java智能卡吗
或者你们公司有做吗,能否提供一下java智能卡的开发工具

参与讨论
昵称:
讨论内容:
 
 
相关帖子
想在一款车用充电器上用935
为什么我的DA输出口上不能得到接近0V的电压
使用外部晶振的设置问题
如下设置:
LPC921端口问题!
免费注册为维库电子开发网会员,参与电子工程师社区讨论,点此进入


Copyright © 1998-2006 www.dzsc.com 浙ICP证030469号