OpenEdv-开源电子网

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

RC522寻不了卡,时序检查了几次。

[复制链接]

4

主题

52

帖子

0

精华

初级会员

Rank: 2

积分
89
金钱
89
注册时间
2014-11-26
在线时间
0 小时
发表于 2014-12-19 22:54:36 | 显示全部楼层 |阅读模式
5金钱
//******************************************************************/
//功    能:读RC522寄存器
//参数说明:Address[IN]:寄存器地址
//返    回:读出的值
//******************************************************************/
unsigned char ReadRawRC(unsigned char Address)
{
  unsigned char i, ucAddr             ;
  unsigned char ucResult=0            ;
  NSS522_0                            ;
  SCK522_0                            ;
  ucAddr = ((Address<<1)&0x7E)|0x80   ;
  for(i=8;i>0;i--)
  {
    if((ucAddr&0x80)==0x80)
      SI522_1                         ;
    else
      SI522_0                         ;
    SCK522_1                          ;
    ucAddr <<= 1                      ;
    SCK522_0                          ;
  }
  for(i=8;i>0;i--)
  {
    SCK522_0                          ;
    SCK522_1                          ;
    ucResult <<=1                     ;
    ucResult |= SO522                 ;
    SCK522_0                          ;
  }
  SCK522_0                            ;
  NSS522_1                            ;
  return ucResult                     ;
}

//******************************************************************/
//功    能:写RC522寄存器
//参数说明:Address[IN]:寄存器地址
//          value[IN]:写入的值
//******************************************************************/
/*
void WriteRawRC(unsigned char Address, unsigned char value)
{  
    unsigned char i, ucAddr      ;

    NSS522_0                     ;
    SCK522_0                     ;
    ucAddr = ((Address<<1)&0x7E) ;
    for(i=8;i>0;i--)
    {
        if ((ucAddr&0x80)==0x80)
        {   SI522_1;   }
        else
        {   SI522_0;   }
        SCK522_1;
        ucAddr <<= 1;
        SCK522_0;
    }
    for(i=8;i>0;i--)
    {
        if ((value&0x80)==0x80)
        {   SI522_1;   }
        else
        {   SI522_0;   }
        SCK522_1;
        value <<= 1;
        SCK522_0;
    }
    SCK522_0;
    NSS522_1;
}
*/

最佳答案

查看完整内容[请看2#楼]

回复【4楼】扬帆起航: --------------------------------- 这个是我一直用读卡程序,时钟是8M,你可以参考一下: ///////////////////////////////////////////////////////////////////// //功    能:读RC522寄存器 //参数说明:Address:寄存器地址 //返    回:读出的值 ///////////////////////////////////////////////////////////////////// unsigned char ReadRawRC(u ...
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

2

主题

8

帖子

0

精华

新手上路

积分
36
金钱
36
注册时间
2014-8-31
在线时间
0 小时
发表于 2014-12-19 22:54:37 | 显示全部楼层
回复【4楼】扬帆起航:
---------------------------------
这个是我一直用读卡程序,时钟是8M,你可以参考一下:

/////////////////////////////////////////////////////////////////////
//功    能:读RC522寄存器
//参数说明:Address[IN]:寄存器地址
//返    回:读出的值
/////////////////////////////////////////////////////////////////////
unsigned char ReadRawRC(unsigned char Address)
{
     unsigned char i, ucAddr;
     unsigned char ucResult=0;
 
     3OUT&=~(MF522_SCK | MF522_NSS);           //MF522_SCK = 0;F  //MF522_NSS = 0;
     ucAddr = ((Address<<1)&0x7E)|0x80;
  
     for(i=8;i>0;i--)
     {   
         if(ucAddr&0x80)   3OUT|=MF522_MOSI;
         else              3OUT&=~MF522_MOSI;

         __delay_cycles(8);
         3OUT|=MF522_SCK;           // MF522_SCK = 1;
         ucAddr <<= 1;
         __delay_cycles(8);
         3OUT&=~MF522_SCK;          //MF522_SCK = 0;
     }
     3DIR&=~MF522_MISO;   
     for(i=8;i>0;i--)
     {
         3OUT|=MF522_SCK;         //MF522_SCK = 1;
         ucResult <<= 1;
         __delay_cycles(8);
 ucResult|=((P3IN&MF522_MISO)==MF522_MISO);         //ucResult|=(bit)MF522_MISO;
         3OUT&=~MF522_SCK;       //MF522_SCK = 0;
         __delay_cycles(8);
     }

     3OUT|=MF522_NSS;          //MF522_NSS = 1;
     3OUT|=MF522_SCK;          //MF522_SCK = 1;
     return ucResult;
     
}

/////////////////////////////////////////////////////////////////////
//功    能:写RC522寄存器
//参数说明:Address[IN]:寄存器地址
//          value[IN]:写入的值
/////////////////////////////////////////////////////////////////////
void WriteRawRC(unsigned char Address, unsigned char value)
{  
    unsigned char i, ucAddr;
   
    P3OUT&=~MF522_SCK;          //MF522_SCK = 0;
    P3OUT&=~MF522_NSS;          //MF522_NSS = 0;
    ucAddr = ((Address<<1)&0x7E);

    for(i=8;i>0;i--)
    {
if(ucAddr&0x80)   P3OUT|=MF522_MOSI;
else              P3OUT&=~MF522_MOSI;
       
        __delay_cycles(10);
        P3OUT|=MF522_SCK;         //MF522_SCK = 1;
        ucAddr <<= 1;
        P3OUT&=~MF522_SCK;        //MF522_SCK = 0;
        __delay_cycles(8);
    }
    for(i=8;i>0;i--)
    {
    if(value&0x80)   P3OUT|=MF522_MOSI;
    else             P3OUT&=~MF522_MOSI;
  
        P3OUT|=MF522_SCK;        //MF522_SCK = 1;
        __delay_cycles(10);
        value <<= 1;
        P3OUT&=~MF522_SCK;       //MF522_SCK = 0;
        __delay_cycles(8);
    }
    P3OUT|=MF522_NSS;           //MF522_NSS = 1;
    P3OUT|=MF522_SCK;            //MF522_SCK = 1;
}

还有一个地方就是这个函数,里面有一个等待时间,时间太短一样不能正确读取到卡
/////////////////////////////////////////////////////////////////////
//功    能:通过RC522和ISO14443卡通讯
//参数说明:Command[IN]:RC522命令字
//          pInData[IN]:通过RC522发送到卡片的数据
//          InLenByte[IN]:发送数据的字节长度
//          pOutData[OUT]:接收到的卡片返回数据
//          *pOutLenBit[OUT]:返回数据的位长度
/////////////////////////////////////////////////////////////////////
char PcdComMF522(unsigned char Command, 
                 unsigned char *pInData, 
                 unsigned char InLenByte,
                 unsigned char *pOutData, 
                 unsigned int  *pOutLenBit)
回复

使用道具 举报

558

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
164897
金钱
164897
注册时间
2010-12-1
在线时间
2100 小时
发表于 2014-12-19 23:08:25 | 显示全部楼层
帮顶。。。。。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

4

主题

52

帖子

0

精华

初级会员

Rank: 2

积分
89
金钱
89
注册时间
2014-11-26
在线时间
0 小时
 楼主| 发表于 2014-12-19 23:18:34 | 显示全部楼层
回复【2楼】正点原子:
---------------------------------
求指导啊。。。
回复

使用道具 举报

4

主题

52

帖子

0

精华

初级会员

Rank: 2

积分
89
金钱
89
注册时间
2014-11-26
在线时间
0 小时
 楼主| 发表于 2014-12-19 23:31:03 | 显示全部楼层
会不会是时钟设置有问题?明天把时钟调到8M晶振试试。。。
回复

使用道具 举报

4

主题

52

帖子

0

精华

初级会员

Rank: 2

积分
89
金钱
89
注册时间
2014-11-26
在线时间
0 小时
 楼主| 发表于 2015-4-17 10:20:35 | 显示全部楼层
回复【5楼】正通和龙:
---------------------------------
好的,谢谢
回复

使用道具 举报

16

主题

60

帖子

0

精华

高级会员

Rank: 4

积分
798
金钱
798
注册时间
2016-9-17
在线时间
241 小时
发表于 2016-11-3 16:08:08 | 显示全部楼层
楼主是如何解决的啊
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2024-6-8 16:01

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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