标题: RC522不能使卡片进入休眠状态?附单片机程序 [打印本页]

作者: donny123800    时间: 2023-2-22 11:32
标题: RC522不能使卡片进入休眠状态?附单片机程序
刚发现我的程序不能使RC522 让卡片进入休眠状态。我用的命令是status=PcdRequest(PICC_REQIDL,CT);     //0X26  寻找未进入休眠的卡。然后调用了休眠程序!status=PcdHalt();(这里休眠状态调用后的返回值一直是1而不是0)!!!可现在问题是不能让卡片进入休眠的状态,特别的疑惑不知道是哪里出了问题~~~status=PcdRequest(PICC_REQIDL,&CT[2]);       //只寻卡一次   0x26
//status=PcdRequest(PICC_REQALL ,CT);       //  寻卡程序   寻找所有卡片      不停寻卡   0X52
if(status==MI_OK)
  {                 
    UART2_send_TC(0x99);      //串口发送寻卡输出测试数据   输出99
    status=MI_ERR;
    PcdHalt(); //命令卡片进入休眠状态
  }
以上这个是主程序里面的寻卡程序,意图是想让设备寻到卡后让其进入休眠的状态不在进行寻卡操作,除非第二次贴卡!但是实际贴上卡后我的串口会一直有数据输出,显示99.如下


使用的休眠程序如下:
/////////////////////////////////////////////////////////////////////
//功    能:命令卡片进入休眠状态
//返    回: 成功返回MI_OK
/////////////////////////////////////////////////////////////////////
char PcdHalt(void)
{
    char  status;
    u8   unLen;
    u8   ucComMF522Buf[MAXRLEN];
    ucComMF522Buf[0] = PICC_HALT;
    ucComMF522Buf[1] = 0;
    CalulateCRC(ucComMF522Buf,2,&ucComMF522Buf[2]);
    status = PcdComMF522(PCD_TRANSCEIVE,ucComMF522Buf,4,ucComMF522Buf,&unLen);
    UART2_send_TC(status);       //测试休眠程序运行后的返回值
    return  status;   
}
而我这里的休眠程序返回的状态 UART2_send_TC(status);  这个status一直是1(MI_ERR)而不是0(MI_OK)
所以现在搞不懂这里了!是不是我调用的休眠程序有问题呢?还是怎么回事?另外补充一点,我的程序充值  退费 都没有问题了。

88.png (30.04 KB, 下载次数: 79)

88.png

作者: 人工置顶员    时间: 2023-3-1 19:44
顶一下
作者: player43    时间: 2024-5-20 20:28
为什么要用休眠呢?
作者: 188610329    时间: 2024-5-21 18:56
你的RC522 是个模块吧? 就市面上常见的RC522模块来讲,无法穿透一张IC卡读取另一张IC卡,所以卡片休眠指令毫无意义,这是其一。
其二,为什么发了休眠指令,卡片还能够读到?市面上80%的A1卡,根本是无视休眠指令的。你琢磨软件,不如去找发卡商确认。




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1