搜索
bottom↓
回复: 2

rc531的密码验证问题

[复制链接]

出0入0汤圆

发表于 2010-6-23 13:50:45 | 显示全部楼层 |阅读模式
今天终于把rc531的读卡器调通了。但是我发现有的卡能够读写块数据,有的卡却不能读写块数据。不过卡的UID都能读取,我用串口调试发现问题是出在密码的验证上,密码的输入都能通过。
char Authentication(uint8_t  *UID,uint8_t block,uint8_t mode)
{
    char i;
    char temp,temp1;
    uint8_t  SndData[16];
   
    temp1=ReadIO(RegControl);
    temp1=temp1 & 0xf7;
    WriteIO(RegControl,temp1);
   
    WriteIO(RegChannelRedundancy,0x0f);                        //开启CRC,奇偶校验校验
   
    if (mode==1)                                            //AUTHENT1
        SndData[0]=PICC_AUTHENT1B;
    else
        SndData[0]=PICC_AUTHENT1A;
    SndData[1]=block;
    for (i=0;i<4;i++)
        SndData[2+i]=UID;
   
    temp=Command_Send(SndData,6,PCD_AUTHENT1);                        
    if(temp!=0)
        return 1;
    temp=Command_Send(SndData,0,PCD_AUTHENT2);                //AUTHENT2
    if(temp!=0)
        return 2;

    temp1=ReadIO(RegControl);
    temp1=temp1 & 0x08;                        //Crypto1on=1,验证通过
    if (temp1==0x08)
        return 0;
    else
        return 3;
}
正常这个函数返回应该是0,出问题的时候返回时2。也就是说:
temp=Command_Send(SndData,0,PCD_AUTHENT2);                //AUTHENT2
这里命令没有成功。

我的Command_Send函数原型是:
uint8_t Command_Send(uint8_t *Send_Buf, uint8_t Length, uint8_t comm_set)
{
    uint8_t  status;
    uint32_t  time;
    uint32_t  i;
    uint32_t k;

    //清空FIFO缓冲区
    Clear_FIFO();

    //写命令参数
    Write_FIFO(Send_Buf, Length);      

    //设置延时时间
    time = 0xff;

    //向command寄存器写控制命令码
    WriteIO(RegCommand, comm_set);  

    //检测命令是否被执行
    for(i = 0; i < time; i++)         
    {                                 
        status = ReadIO(RegCommand);    //读取Command_Reg寄存器
        if(status == 0) return 0;        //成功                  //判断Command_Reg寄存器是否已为0

        for(k = 0; k < 1250; k++);        //延时
    }
    return 1; //失败
}
不知道这里命令没有写入成功是跟什么有关,为什么有的卡能够成功,有的又不成功。希望有人能解答我的疑惑。

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

一只鸟敢站在脆弱的枝条上歇脚,它依仗的不是枝条不会断,而是自己有翅膀,会飞。

出0入0汤圆

发表于 2010-9-19 16:00:00 | 显示全部楼层
回复【楼主位】443799600 仰望天空
-----------------------------------------------------------------------
将如下三句屏蔽(即删除)就会好了
    temp1=ReadIO(RegControl);  
    temp1=temp1 & 0xf7;  
    WriteIO(RegControl,temp1);

出0入0汤圆

发表于 2010-9-19 16:00:31 | 显示全部楼层
-----------------------------------------------------------------------
将如下三句屏蔽(即删除)就会好了
    temp1=ReadIO(RegControl);  
    temp1=temp1 & 0xf7;  
    WriteIO(RegControl,temp1);
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-5-16 14:57

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

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