|
技术交流 | 电路欣赏 | 工控天地 | 数字广电 | 通信技术 | 电源技术 | 测控之家 | EMC技术 | ARM技术 | EDA技术 | PCB技术 | 嵌入式系统 驱动编程 | 集成电路 | 器件替换 | 模拟技术 | 新手园地 | 单 片 机 | DSP技术 | MCU技术 | IC 设计 | IC 产业 | CAN-bus/DeviceNe |
IC逻辑加密卡的程序,感觉有用的就顶一下啊 |
作者:ploto 栏目:MCU技术 |
/* 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 于 2005/10/11 22:38:00 发布:
订! |
3楼: | >>参与讨论 |
作者: LPC900 于 2005/10/12 11:25:00 发布:
看来Ploto做事情挺认真的 顶! |
4楼: | >>参与讨论 |
作者: ploto 于 2005/10/12 18:42:00 发布:
过奖了 呵呵,当时想找一个代码来用用,怎么也找不到,搞得我研究时序研究了半天,希望能够幸福后来人一下,^_^ |
5楼: | >>参与讨论 |
作者: zhongwei 于 2005/10/14 8:27:00 发布:
不错,支持! 重要的参考. |
6楼: | >>参与讨论 |
作者: huangxd 于 2005/10/17 18:23:00 发布:
有没有CPU卡的一些资料啊? CPU卡的读写程序怎么写啊? |
7楼: | >>参与讨论 |
作者: huangxd 于 2005/10/24 23:04:00 发布:
不知道这位DX作过java智能卡吗 或者你们公司有做吗,能否提供一下java智能卡的开发工具 |
|
|
免费注册为维库电子开发网会员,参与电子工程师社区讨论,点此进入 |
Copyright © 1998-2006 www.dzsc.com 浙ICP证030469号 |