搜索
bottom↓
回复: 1

求助 关于SLE4442卡 校验问题

[复制链接]

出0入0汤圆

发表于 2013-8-29 11:49:07 | 显示全部楼层 |阅读模式
sle4442 的底层驱动参考的是 论坛里共享的,现在  卡可以读取,但是密码校验的时候,总是校验失败

但是我读取 密码寄存器的时候,发现错误计数器还是0xff,说明卡还没费啊,那么就是  我写的程序根本就没有实行校验了,太奇怪了。

uchar  password[3]={0xff,0xff,0xff};

以下是 main 函数:

void main()
{
        serial_init();
        while(1)
        {
                 
                 
           Delay_ms(2000);
                SendComm(RSM_COMM,1,1);                //读保密存储区的命令字
       Read_Mod(tp,4);                       //读出
                 shu = Verify(password);
                 if(shu)
                 {
                         Umm(0x01,b[0]);   //写主存
                        Delay_ms(200);
                        while(1)
                        {
                                        Rmm(0x01,a,1);     // 读主存
                                         UART_Send_Byte(a[0]);
                                        Delay_ms(2000);
                        }
               

                 }

                 else
                 while(1)
                 {
                               
                                  UART_Send_Byte(tp[0]);
                                        Delay_ms(2000);
                 }

        }
}

阿莫论坛20周年了!感谢大家的支持与爱护!!

你熬了10碗粥,别人一桶水倒进去,淘走90碗,剩下10碗给你,你看似没亏,其实你那10碗已经没有之前的裹腹了,人家的一桶水换90碗,继续卖。说白了,通货膨胀就是,你的钱是挣来的,他的钱是印来的,掺和在一起,你的钱就贬值了。

出0入0汤圆

发表于 2013-9-9 10:54:46 | 显示全部楼层
我用过,以下供参考,必须按4442手册上时序操作,几年前写的,调试用过OK。

//定义对各存储器的操作命令
#define RD_MAIN_RAM                0X30        //读主存储器 ic卡模式:outgoing data
#define WR_MAIN_RAM                0X38        //写主存储器 ic卡模式:processing
#define RD_PRO_RAM                         0X34        //读保护存储器 ic卡模式:outgoing data
#define WR_PRO_RAM                 0X3C        //写保护存储器 ic卡模式:processing
#define RD_PSC_RAM                         0X31        //读安全存储器 ic卡模式:outgoing data
#define WR_PSC_RAM                 0X39        //写安全存储器 ic卡模式:processing
#define COMP_PSC_RAM                 0X33        //比较安全存储器 ic卡模式:processing


//****************************************************************************//
// 读取安全存储器4个字节的数据,数据一地址指针rd_data_ptr中
// 安全寄存器=RD_PSC_RAM
//****************************************************************************//
void rd_psc_ram(U8 * data_temp)
{
    U8 i;
    ic_start();
    out_byte(RD_PSC_RAM);
    out_byte(RD_PSC_RAM);
    out_byte(RD_PSC_RAM);
    ic_stop();
    for (i=0;i<4;i++)
    {
        *data_temp++ = read_data();
    }
}

//----------------------------------------------------------------------------//
// ic_card 在处理模式时进行监测是否处理完毕,最大延时255个时钟
//----------------------------------------------------------------------------//
void proc_mode_chek()
{
    U16 i;
    C_SDA_ChangeInput(1);
    for (i=0;i<512;i++)
    {
        if (C_SDA)
        {
            i=511;
        }
        else
        {
            clock();
        }
    }
}

void write_eepram(U8 comm_type, U8 write_start_addr, U8 write_data)
{
    ic_start();
    out_byte(comm_type);
    out_byte(write_start_addr);
    out_byte(write_data);
    ic_stop();
    proc_mode_chek();
}


//****************************************************************************//
//密码校验函数
//正确 返回'y' 不正确返回'n'
//****************************************************************************//
U8 csc_4442(U8 *pws)
{
    U8 ptr[4];

    rd_psc_ram( ptr );
    if ( ptr[0] & 0x07 == 0 )
    {
        return('N');
    }
    else
    {
        switch ( ptr[0] & 0x07 )
        {
        case 1:
            write_eepram(WR_PSC_RAM,0,0xf8);
            break;
        case 2:
            write_eepram(WR_PSC_RAM,0,0xf8);
            break;
        case 3:
            write_eepram(WR_PSC_RAM,0,0xf9);
            break;
        case 4:
            write_eepram(WR_PSC_RAM,0,0xf8);
            break;
        case 5:
            write_eepram(WR_PSC_RAM,0,0xf9);
            break;
        case 6:
            write_eepram(WR_PSC_RAM,0,0xfa);
            break;
        case 7:
            write_eepram(WR_PSC_RAM,0,0xfb);
            break;
        }
    }
    write_eepram(COMP_PSC_RAM,1,*pws++);
    write_eepram(COMP_PSC_RAM,2,*pws++);
    write_eepram(COMP_PSC_RAM,3,*pws);
    write_eepram(WR_PSC_RAM,0,0xff);
    rd_psc_ram(ptr);
    if (ptr[0] == 7)
   {
        return 'Y';
   }
    else
   {
        return ptr[0];
   }
}
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片。注意:要连续压缩2次才能满足要求!!】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-10-3 06:18

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表