搜索
bottom↓
回复: 8

RC522读取 Mifare_UltraLight卡号读不完整

[复制链接]

出0入0汤圆

发表于 2015-2-4 22:18:45 | 显示全部楼层 |阅读模式

char PcdAnticoll(unsigned char *pSnr) 这个程序能读到MIFE one的卡号,但是读 Mifare_UltraLight 7位卡号按下面的方法一直搞不点,求指点

/////////////////////////////////////////////////////////////////////
//功    能:防冲撞
//参数说明: pSnr[OUT]:卡片序列号,4字节
//返    回: 成功返回MI_OK
/////////////////////////////////////////////////////////////////////  
char PcdAnticoll(unsigned char *pSnr)
{
    char status;
    unsigned char i,snr_check=0;
    unsigned int  unLen;
    unsigned char ucComMF522Buf[MAXRLEN];
   

    ClearBitMask(Status2Reg,0x08);
    WriteRawRC(BitFramingReg,0x00);
    ClearBitMask(CollReg,0x80);

    ucComMF522Buf[0] = PICC_ANTICOLL1;
    ucComMF522Buf[1] = 0x20;

    status = PcdComMF522(PCD_TRANSCEIVE,ucComMF522Buf,2,ucComMF522Buf,&unLen);

    if (status == MI_OK)
    {
             for (i=0; i<4; i++)  //4/ /4
         {   
             *(pSnr+i)  = ucComMF522Buf;
             snr_check ^= ucComMF522Buf;
         }
         if (snr_check != ucComMF522Buf)
         {   status = MI_ERR;    }
    }
       
    SetBitMask(CollReg,0x80);
    return status;
}




/////////////////////////////////////////////////////////////////////   
//M I F A R E   U L T R A L I G H T   A N T I C O L L I S I O N   
//A N D    S E L E C T   
//parameter: pSnr[OUT]:7Byte card SNR   
/////////////////////////////////////////////////////////////////////   
char UL_PcdAnticoll(unsigned char *pSnr)   
{   
      
    char status ;   
    unsigned char i, snr_check = 0;   
    unsigned int  unLen;   
    unsigned char   ucComBuf[FSD];   
   
    ClearBitMask(Status2Reg,0x08);
    WriteRawRC(BitFramingReg,0x00);
    ClearBitMask(CollReg,0x80);
      
    ucComBuf[0] = PICC_ANTICOLL1;   
    ucComBuf[1] = 0x20;   
   
    status = PcdComMF522(PCD_TRANSCEIVE,ucComBuf,2,ucComBuf,&unLen);   
      
    if (status == MI_OK)   
    {   
         for (i=0; i<4; i++)   
         {      
             *(pSnr+i)  = ucComBuf;   
             snr_check ^= ucComBuf;   
         }   
         if (snr_check != ucComBuf)   
         {   status = MI_ERR;    }   
         else   
         {   memcpy(pSnr, &ucComBuf[1], 3);   }   
    }   
      
         SetBitMask(CollReg,0x80);   
    snr_check = 0x88;   
       
    ClearBitMask(Status2Reg,0x08);
    WriteRawRC(BitFramingReg,0x00);
    ClearBitMask(CollReg,0x80);   
      
    ucComBuf[0] = PICC_ANTICOLL1;   
    ucComBuf[1] = 0x70;   
    ucComBuf[2] = 0x88;   
    for (i=0; i<3; i++)   
    {   
        snr_check ^= *(pSnr+i);   
        ucComBuf[i+3] = *(pSnr+i);   
    }   
    ucComBuf[6] = snr_check;   
      
    status = PcdComMF522(PCD_TRANSCEIVE,ucComBuf,7,ucComBuf,&unLen);   
    if (status == MI_OK)   
    {      
        if (unLen != 0x08)   
        {   status = MI_ERR;     }   
    }   
      
    if (status == MI_OK)   
    {   
       snr_check = 0;   
          
           ClearBitMask(Status2Reg,0x08);
           WriteRawRC(BitFramingReg,0x00);
           ClearBitMask(CollReg,0x80);       

      
       ucComBuf[0] = PICC_ANTICOLL2;   
       ucComBuf[1] = 0x20;   
      
       status = PcdComMF522(PCD_TRANSCEIVE,ucComBuf,2,ucComBuf,&unLen);   
       if (!status)   
       {   
          for (i=0; i<4; i++)   
          {  snr_check ^= ucComBuf;   }   
          if (snr_check != ucComBuf)   
          {  status = MI_ERR;   }   
          else   
          {   memcpy(pSnr+3, &ucComBuf[0], 4);    }   
       }   
    //   ClearBitMask(RegDecoderControl,0x20);   
        SetBitMask(CollReg,0x80);   
       snr_check = 0;   
          
           ClearBitMask(Status2Reg,0x08);
           WriteRawRC(BitFramingReg,0x00);
           ClearBitMask(CollReg,0x80);          
      
       ucComBuf[0] = PICC_ANTICOLL2;   
       ucComBuf[1] = 0x70;   
       for (i=0; i<4; i++)   
       {   
           snr_check ^= *(pSnr+3+i);   
           ucComBuf[i+2] = *(pSnr+3+i);   
       }   
       ucComBuf[6] = snr_check;   
         
       status = PcdComMF522(PCD_TRANSCEIVE,ucComBuf,7,ucComBuf,&unLen);   
       if (status == MI_OK)   
       {      
           if (unLen != 0x08)   
           {   status = MI_ERR;   }   
       }      
    }   
    return status;   
}   





出0入0汤圆

 楼主| 发表于 2015-2-5 08:00:15 | 显示全部楼层
顶一下,看一下有没有高工做过

出0入30汤圆

发表于 2015-2-5 08:51:20 | 显示全部楼层
RC522的官方函数库就可以读7字节呀。

出4375入62汤圆

发表于 2015-2-5 08:53:50 | 显示全部楼层
你查看一下MI卡的扇区定义,我记得好像0扇区0块存放的就是卡号

出0入0汤圆

 楼主| 发表于 2015-2-5 09:02:07 | 显示全部楼层

RC522的官方函数库就可以读7字节呀。

在哪里下呀,我没有找到,

出0入0汤圆

发表于 2015-2-5 09:09:17 | 显示全部楼层
此函数可以 AnticollSelect

出0入0汤圆

 楼主| 发表于 2015-2-5 09:24:58 | 显示全部楼层
本帖最后由 mcusun2000 于 2015-2-5 09:33 编辑

哪位高工提供一下单片机操作的函数库,网上下载的都是操作系统下的

出0入0汤圆

发表于 2015-3-27 15:17:02 | 显示全部楼层
mcusun2000 发表于 2015-2-5 09:24
哪位高工提供一下单片机操作的函数库,网上下载的都是操作系统下的

楼主,我有些rc522的东西不懂,请你给我解答一下,我是从stm32103往stm32f030上移植,spi已经调通了,但是不能和rc522通信,已经搞了好几天了,方便的话加我qq857794827,给我解答一下

出0入0汤圆

发表于 2017-5-17 10:56:37 | 显示全部楼层
楼主这个问题搞定没?我现在也遇到同样的问题,不知如何解决
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-5-2 06:00

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

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