找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1754|回复: 1
打印 上一主题 下一主题
收起左侧

RC522读取7字节M1卡的UID遇到的问题

[复制链接]
跳转到指定楼层
楼主
ID:258164 发表于 2020-9-29 13:40 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
现在的情况是:
   4字节的卡能正确寻到卡并能读取到UID,7字节能读取到前3字节,利用二级防冲撞读取后四字节出错。具体表现为:读取RC522寄存器超时,说明RC522没有响应这个命令。
   想请教有没有这方面经验的坛友可以解答下?我的做法是二级防冲撞和一级防冲撞的操作一样,包括寄存器的配置与发送的字节,唯一的改变就是将防冲撞命令从0x93改为0x95.
  1. char PcdAnticoll(unsigned char *pSnr)
  2. {
  3.     char status;
  4.     unsigned char i,snr_check=0;
  5.     unsigned int  unLen;
  6.     unsigned char ucComMF522Buf[MAXRLEN];
  7.    

  8.     ClearBitMask(Status2Reg,0x08);     //清MFCryptol On位 只有成功执行MFAuthent命令后,该位才能置位
  9.     WriteRawRC(BitFramingReg,0x00);    //清理寄存器 停止收发
  10.     ClearBitMask(CollReg,0x80);        //清ValuesAfterColl所有接收的位在冲突后被清除

  11.     ucComMF522Buf[0] = PICC_ANTICOLL1; //卡片防冲突命令
  12.     ucComMF522Buf[1] = 0x20;

  13.     status = PcdComMF522(PCD_TRANSCEIVE,ucComMF522Buf,2,ucComMF522Buf,&unLen);//与卡片通信

  14.     if (status == MI_OK)    //通信成功,读出卡的UID
  15.     {
  16.              for (i=0; i<4; i++)
  17.          {   
  18.              *(pSnr+i)  = ucComMF522Buf[i];
  19.              snr_check ^= ucComMF522Buf[i];
  20.          }
  21.          if (snr_check != ucComMF522Buf[i])
  22.          {   status = MI_ERR;    }
  23.     }
  24.    
  25.     SetBitMask(CollReg,0x80);
  26.     return status;
  27. }
复制代码


分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏2 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:807591 发表于 2022-1-12 13:21 | 只看该作者
回复

使用道具 举报

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

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

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