OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 2152|回复: 2

关于RC522的一个问题

[复制链接]

1

主题

3

帖子

0

精华

新手入门

积分
17
金钱
17
注册时间
2018-6-1
在线时间
4 小时
发表于 2018-6-1 22:07:25 | 显示全部楼层 |阅读模式
8金钱
本帖最后由 redddd 于 2018-6-1 22:15 编辑

我写入一个数据到卡片里面,然后也可以从这个卡片读出数据,但是数据读完之后,如果再次检验密匙,就一直校验失败,我试过了只有读数据操作会出现这种问题,请问下这是什么原因,程序如下
  while ( 1 )
  {
   if ( ( ucStatusReturn = PcdRequest ( PICC_REQALL, UID ) ) != MI_OK ) //寻卡
   {
    printf ( "Please swipe your card!\n" );
    PcdReset();
    PcdAntennaOff();
    PcdAntennaOn();
    ucStatusReturn = PcdRequest ( PICC_REQALL, UID );
   }
   if ( ucStatusReturn == MI_OK)
   {
    if ( PcdAnticoll ( UID ) == MI_OK )//防冲撞
    {        
     sprintf(cstr1,"%2X%2X%2X%2X\n",UID[0],UID[1],UID[2],UID[3]);
      printf( "The card id is:%s\n",cstr1);
     status = PcdSelect(UID);//选卡
     if (status != MI_OK)
     {   
      printf( "\nSelect Failed\n");
      continue;         
     }
     printf( "Select Successful\n");
     status = PcdAuthState(PICC_AUTHENT1A, 5, DefaultKey, UID);//验证卡片密码
     if (status != MI_OK)
     {   
      printf( "Check Failed\n");
      continue;     
     }
     printf( "Check Successful\n");
   
     status = PcdWrite(5, data1);//往弟五块写入数据
      {   
       printf( "Write Failed\n");
       continue;   
      }
     printf( "Write Successful\n");
     PcdHalt();
    }
   }
   //进入另外一个while
    while(1)
    {                     
     if ( ( ucStatusReturn = PcdRequest ( PICC_REQALL, ucArray_ID ) ) != MI_OK ) //寻卡
     {
      printf ( "Please swipe your card!\n" );
      continue;
     }
    if ( ucStatusReturn == MI_OK)
     {
      if ( PcdAnticoll ( ucArray_ID ) == MI_OK )//防冲撞
      {        
       sprintf(cstr1,"%2X%2X%2X%2X\n",ucArray_ID[0],ucArray_ID[1],ucArray_ID[2],ucArray_ID[3]);
       printf( "The card id is:%s\n",cstr1);
       status = PcdSelect(ucArray_ID);//选定
       if (status != MI_OK)
       {   
        printf( "\nSelect Failed\n");
        continue;         
       }
       printf( "Select Successful\n");
       status = PcdAuthState(PICC_AUTHENT1A, 5, DefaultKey, UID);//校验
       if (status != MI_OK)
       {   
        printf( "Check Failed\n");
        continue;     
       }
       printf( "Check Successful\n");      
      
       status = PcdValue(PICC_DECREMENT,5,data3);//块5中的数据减去data3中的数据
       if (status != MI_OK)
       {   
        printf( "Paid Failed\n");
        continue;   
       }
       printf( "Paid Successful\n");         
        
       status = PcdBakValue(5,6);//块五中的数据备份到块6
       if (status != MI_OK)
       {   
        printf( "Back Failed\n");
        continue;   
       }
       printf( "Back Successful\n");
      
       status=PcdRead (6, data2 );//读取块6的数据,问题就在这,只要一执行完这个函数,接下来就不能正常校验了
       if (status != MI_OK)
       {   
        printf( "Read Failed\n");
        continue;   
       }
       PcdHalt();//另卡片休眠
       sprintf(cstr1,"%d%d%d%d\n",data2[3],data2[2],data2[1],data2[0]);
       printf( "The balance is:%s\n",cstr1);
       }
      }
      }
  }

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165524
金钱
165524
注册时间
2010-12-1
在线时间
2116 小时
发表于 2018-6-2 01:50:32 | 显示全部楼层
回复

使用道具 举报

1

主题

3

帖子

0

精华

新手入门

积分
17
金钱
17
注册时间
2018-6-1
在线时间
4 小时
 楼主| 发表于 2018-6-2 10:19:22 | 显示全部楼层
求大神指导
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-8 05:15

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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