搜索
bottom↓
回复: 1

求助RC522调试

[复制链接]

出0入0汤圆

发表于 2012-11-27 10:37:51 | 显示全部楼层 |阅读模式
主芯片LPC1114与RC522通过SPI进行通信,用IO口模拟SPI。发现读取RC522任意寄存器,返回值都为0xff。麻烦知道的人帮我解答一下,谢谢了。代码如下:

void WriteRawRC(unsigned char Address, unsigned char value)
{  
    unsigned char i, ucAddr;

    GPIOSetValue( PORT0, 10, 0 ); //sck = 0;
    GPIOSetValue( PORT1, 22, 0 ); //NSS = 0;
    ucAddr =((Address<<1)&0x7E);                                //地址字节的第一位为MSB,MSB=1为读,MSB=0为写

    for(i=8;i>0;i--)
    {                                          
            if(ucAddr&0x80) GPIOSetValue( PORT0, 9, 1 );
                else GPIOSetValue( PORT0, 9, 0 );
                GPIOSetValue( PORT0, 10, 1 );
                __nop();  __nop();__nop();__nop();__nop();                  
                ucAddr <<= 1;
                GPIOSetValue( PORT0, 10, 0 );
            __nop();  __nop();__nop();__nop();__nop();
    }
         
    for(i=8;i>0;i--)
    {
            if(value&0x80)GPIOSetValue( PORT0, 9, 1 );
                else GPIOSetValue( PORT0, 9, 0 );
                GPIOSetValue( PORT0, 10, 1 );
                __nop();  __nop();__nop();__nop();__nop();
                value <<= 1;
                GPIOSetValue( PORT0, 10, 0 );
                __nop();  __nop();__nop();__nop();__nop();
    }
    GPIOSetValue( PORT0, 10, 1 ); //SCK = 1;
    GPIOSetValue( PORT1, 22, 1 ); //NSS = 1;

}


unsigned char ReadRawRC(unsigned char Address)
{
     unsigned char i, ucAddr;
     unsigned char ucResult=0;

    GPIOSetValue( PORT0, 10, 0 ); //SCK = 0;
    GPIOSetValue( PORT1, 22, 0 ); //NSS = 0;
    ucAddr = ((Address<<1)&0x7E)|0x80;           //地址字节的第一位为MSB,MSB=1为读,MSB=0为写

     for(i=8;i>0;i--)
     {
            if(ucAddr&0x80) GPIOSetValue( PORT0, 9, 1 );
                else GPIOSetValue( PORT0, 9, 0 );
                GPIOSetValue( PORT0, 10, 1 );
                __nop();  __nop();__nop();__nop();__nop();                  
                ucAddr <<= 1;
                GPIOSetValue( PORT0, 10, 0 );
            __nop();  __nop();__nop();__nop();__nop();
     }

     for(i=8;i>0;i--)
     {
         GPIOSetValue( PORT0, 9, 1 ); //SCK = 1;//MF522_SCK = 1;
                 __nop();  __nop();__nop();__nop();__nop();
         ucResult <<= 1;
                 if(0==RC523_MISO) {ucResult|=0x0;}
                 else {ucResult|=0x1;}
         GPIOSetValue( PORT0, 10, 0 );//MF522_SCK = 0;
                 __nop();  __nop();__nop();__nop();__nop();
     }
    GPIOSetValue( PORT0, 10, 1 ); //SCK = 1;
    GPIOSetValue( PORT1, 22, 1 ); //NSS = 1;
    return ucResult;
}
int main(void)                        //主函数
{
  unsigned char tt1[2];
  unsigned char status1;
  unsigned char sn[4];
         //SystemInit(); 可直接配置
        GPIOInit();         //GPIO初始化  gpio.c

         /*模拟SPI I/O初始化 */
        GPIOSetDir( PORT0, 8, 0 ); //MISO         输入
    GPIOSetDir( PORT0, 9, 1 ); //MOSI         输出
    GPIOSetDir( PORT0, 10, 1 ); //SCK         时钟
    GPIOSetDir( PORT0, 11, 1 ); //RST         RC522复位控制
    GPIOSetDir( PORT0, 2, 1 ); //CS0         选通

    GPIOSetDir( PORT1, 31, 1 ); //LED        控制为输出口

    GPIOSetValue( PORT0, 8, 0 );
    GPIOSetValue( PORT0, 9, 1 );
    GPIOSetValue( PORT0, 10, 0 );
    GPIOSetValue( PORT0, 11, 0 );
    GPIOSetValue( PORT0, 2, 1 );

    GPIOSetValue( PORT1, 31, 0 );
GPIOSetValue( PORT1, 31, 1 );//MF522_RST=1;         //软件将RST置一段低电平,复位
    __nop();  __nop();__nop();__nop();__nop();
    GPIOSetValue( PORT1, 31, 0 );//MF522_RST=0;
    __nop(); __nop();__nop();__nop();__nop();
    GPIOSetValue( PORT1, 31, 1 );//MF522_RST=1;
    __nop();__nop();__nop();__nop();__nop();

    WriteRawRC(CommandReg,PCD_RESETPHASE);         //设置commandreg复位指令

    while(1)
  {
        for (i = 0; i < 0x40000; i++)   // DELAY
        {
        }

                j++;
                if(j==10)
                {
                        j=0;
                        shellPrint("version is:%x \n",ReadRawRC(0x37));}   //串口调试输出值


  }
}

阿莫论坛20周年了!感谢大家的支持与爱护!!

月入3000的是反美的。收入3万是亲美的。收入30万是移民美国的。收入300万是取得绿卡后回国,教唆那些3000来反美的!

出0入0汤圆

 楼主| 发表于 2013-1-10 17:08:06 | 显示全部楼层
问题解决,如有遇到这种问题的朋友,建议看下引脚波形,时序是否正确。
一点一点查找,会有收获的!
我这里是有个变量定义错误导致的。
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-4-27 04:03

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

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