and001 发表于 2014-4-24 15:35:52

求指点--我读出来RFID-RC522寄存器值为“0”

本帖最后由 and001 于 2014-4-24 15:38 编辑

最近调试一个RFID软件:发现一个问题---就是读出来的值是“0”

我明明是将某个位已经置“1”了可是读出来还是“0”


为了简洁列出 主要函数
主要函数如下:
//初始化函数:
void MC522_Initial(void)
{

   PcdReset();      
   PcdAntennaOff();   
   Delay_us(10000);
   PcdAntennaOn();   
   Delay_us(10000);
   M500PcdConfigISOType( 'A' );


}


/////////////////////////////////////////////////////////////////////
//复位RC522
//成功返回: MI_OK
/////////////////////////////////////////////////////////////////////
char PcdReset(void)
{
    MF522_RST_H()   
    __NOP;
   Delay_us(1);
    MF522_RST_L()
    __NOP;
   Delay_us(1);   MF522_RST_H()
   __NOP;
   Delay_us(1);
    WriteRawRC(CommandReg,PCD_RESETPHASE);      __NOP;
   
    WriteRawRC(ModeReg,0x3D);            
    WriteRawRC(TReloadRegL,30);         
    WriteRawRC(TReloadRegH,0);
    WriteRawRC(TModeReg,0x8D);
    WriteRawRC(TPrescalerReg,0x3E);
    WriteRawRC(TxAutoReg,0x40);   
    return MI_OK;
}

/////////////////////////////////////////////////////////////////////
//开启天线
//每次开启天线或者关闭天线时间间隔大于1mS
/////////////////////////////////////////////////////////////////////
void PcdAntennaOn()
{
    unsigned char i;
    i = ReadRawRC(TxControlReg);

printf("\n 先确认txcontrolreg= %d.   \r\n", i );

    if (!(i & 0x03))
    {
      SetBitMask(TxControlReg, 0x03);
   
   i = ReadRawRC(TxControlReg);//add by chen jian
   printf("\n 再读出txcontrolreg= %d:   \r\n", i );   

//问题点:刚写进去第三位为“1”,可是读出来还是“0”

}
}


/////////////////////////////////////////////////////////////////////
//读RC632寄存器的值
//返回读出值
/////////////////////////////////////////////////////////////////////
unsigned char ReadRawRC(unsigned char Address)
{
   unsigned char i, ucAddr;
   unsigned char ucResult=0;

   MF522_SCK_L()
   MF522_NSS_L()
    Delay_us(1);//add by chen ji an
   ucAddr = Address|0x80; // ucAddr = ((Address<<1)&0x7E)|0x80;//我自己修改部分,其实后面是没有改的语句也是不行

//特别说明下:我是认为第一个地址左移一次后值改变了,好像有点矛盾,所有自己改了下同时也满足读的时候第一个字节高位为“1”

   for(i=8;i>0;i--)
   {
      // MF522_SI = ((ucAddr&0x80)==0x80);// 从51移植过来的,现在MCU是STM32
         if ((ucAddr&0x80)==0x80)
            MF522_SI_H()
      else   
         MF522_SI_L()   
      
      
               
         MF522_SCK_H()
   Delay_us(1);//add by chen ji an
         ucAddr <<= 1;
         MF522_SCK_L()
   Delay_us(1);//add by chen ji an
   }

   for(i=8;i>0;i--)
   {
         MF522_SCK_H()
      Delay_us(1);//add by chen ji an
         ucResult <<= 1;
//   ucResult|=MF522_SO; // ucResult|=(bit)MF522_SO; // 从51移植过来的,现在MCU是STM32
   
   if( GPIO_ReadInputDataBit(GPIOC,GPIO_Pin_8))ucResult|=0x01;
   else    ucResult&=~0x01;
   
   
   
         MF522_SCK_L()
      Delay_us(1);

   }

   MF522_NSS_H()
   MF522_SCK_H()
   return ucResult;
}



/////////////////////////////////////////////////////////////////////
//些RC632寄存器
//
/////////////////////////////////////////////////////////////////////
void WriteRawRC(unsigned char Address, unsigned char value)
{
    unsigned char i, ucAddr;

    MF522_SCK_L()
    MF522_NSS_L()
   Delay_us(1);//add by chen ji an
    ucAddr = (Address&0x7F);   // ucAddr = ((Address<<1)&0x7E);//我自己修改部分,其实后面是没有改的语句也是不行

//特别说明下:我是认为第一个地址左移一次后值改变了,好像有点矛盾,所有自己改了下同时也满足写的时候第一个字节高位为“0”
    for(i=8;i>0;i--)
    {
       // MF522_SI = ((ucAddr&0x80)==0x80);// 从51移植过来的,现在MCU是STM32

         if ((ucAddr&0x80)==0x80)
         MF522_SI_H()
    else   
         MF522_SI_L()
      
      
      
      MF522_SCK_H()

      Delay_us(1);//add by chen ji an
      ucAddr <<= 1;
      MF522_SCK_L()
      Delay_us(1);//add by chen ji an
    }

    for(i=8;i>0;i--)
    {
       // MF522_SI = ((value&0x80)==0x80);// 从51移植过来的,现在MCU是STM32
if ((value&0x80)==0x80)
         MF522_SI_H()
    else   
         MF522_SI_L()
   
      MF522_SCK_H()
      Delay_us(1);//add by chen ji an
      value <<= 1;
      MF522_SCK_L()
      Delay_us(1);//add by chen ji an
    }
    MF522_NSS_H()
    MF522_SCK_H()
}



请有做过这个的高人帮忙指点!求救。。。

and001 发表于 2014-4-25 09:15:42

自己发现的问题并且解决了!

是自己定义的GPIO弄错了脚号,所有读出来的全是“0”,自己的粗心!见笑了!

如果有出现同样的问题,可以和我一起学习!
谢谢大家!

and001 发表于 2014-4-24 15:39:01

感觉读写不成功
页: [1]
查看完整版本: 求指点--我读出来RFID-RC522寄存器值为“0”