打印
[射频器件]

RC522 使用DEMO 时 对每块的校验和写块 有时会不成功

[复制链接]
1395|4
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
hxricky|  楼主 | 2015-12-9 09:11 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本人新人一枚。再次请求大虾援助。帮我分析一下问题在哪。
LZ找个一个demo 网上的demo估计都差不多。
使用的是MSP430F5438A,使用硬件SPI的方式,与RC522通讯 ,测试的过程中发现,正常的寻卡方冲突选卡都OK ,卡校验和写块不是很稳定,有时候连续12块校验写块都能通过,有时候却只能写1块。经过LZ的仔细检查时序,也没发现什么问题,也可能我还没有发现。但是发现失败后读ErrorFlag的值是0x01,初步怀疑校验和写块都是写了很多个字节到FIFO后,写入的字节数和RC522接收到的字节数不等。
下面贴一下时序图和代码:
顺序是CS,SCK,SIMO,SOMI,SCK硬件生成 =0.25M =单片机外部8M/32分频。

下面贴上代码:
//功能:使用SPI发送一个字节,硬件spi写
//输入参数: sData=发送的字节
//输出参数: 无
void SPI_Write(unsigned char sData)//功能:使用SPI发送一个字节
{
   unsigned char val;  
//  while (!(UCB3IFG & UCTXIFG));   //发送缓冲器已经准备好
   UCB3TXBUF = sData;
   while (!(UCB3IFG&UCRXIFG));     // 发送完成?(MSP430)的收发是同时进行的。
   val =UCB3RXBUF;                 // 清空接收缓冲,因为这次收到的数据没有意义
}
//功能:使用SPI接收一个字节,硬件spi读
//输入参数: 无
//输出参数: 接收的字节
unsigned char SPI_Read(void)//功能:使用SPI接收一个字节
{
   unsigned char val;
  // while (!(UCB3IFG & UCTXIFG));   //发送缓冲器已经准备好
   UCB3TXBUF = 0x00;
   while (!(UCB3IFG&UCRXIFG));     // 发送完成?(MSP430)的收发是同时进行的。
   val =UCB3RXBUF;                 // 清空接收缓冲,因为这次收到的数据没有意义
   return val;
}


/////////////////////////////////////////////////////////////////////
//功    能:读RC522寄存器
//参数说明:Address[IN]:寄存器地址
//返    回:读出的值
//注意点:1/片选信号低电平有效,
//2/手册7.2.2节中,MOSI发送地址0时MISO读出的不算,MOSI发送地址1时,MISO读出的是地址0的数据
/////////////////////////////////////////////////////////////////////
unsigned char ReadRawRC(unsigned char Address)
{
    unsigned char ucAddr;
    unsigned char ucResult=0;
    SS_LOW;

    ucAddr = ((Address<<1)&0x7E)|0x80;//变化成有效的地址形式,最低位为0,最高位为1时候是,从MFRC522读出数据,参考39页   
    SPI_Write(ucAddr);//spi发送地址
    ucResult=SPI_Read();//spi读取数据


    SS_HIGH;

   return ucResult;
}


/////////////////////////////////////////////////////////////////////
//功    能:写RC522寄存器
//参数说明:Address[IN]:寄存器地址
//          value[IN]:写入的值
//注意点:片选信号低电平有效
/////////////////////////////////////////////////////////////////////
void WriteRawRC(unsigned char Address, unsigned char value)
{  
    unsigned char ucAddr;

    SS_LOW;

    ucAddr = ((Address<<1)&0x7E);//变化成有效的地址形式,最低为为0,最高位为1时候是,写入MFRC522数据
    SPI_Write(ucAddr);
    SPI_Write(value);


    SS_HIGH;

}


相关帖子

沙发
hxricky|  楼主 | 2015-12-9 09:14 | 只看该作者
波形中,CS拉低的时候,原来是有一个短延时,后来去掉后还是不行。__delay_cycles(50);

使用特权

评论回复
板凳
hxricky|  楼主 | 2015-12-9 09:17 | 只看该作者
有大虾路过,请赐教啊。

使用特权

评论回复
地板
hxricky|  楼主 | 2015-12-9 09:23 | 只看该作者
本人邮箱hxricky@gmail.com
QQ :472455165
可以互相交流。

使用特权

评论回复
5
生非死惧| | 2016-1-6 00:26 | 只看该作者
楼主  在吗?? 求交流一下

使用特权

评论回复
来自iphone 5s
评分
参与人数 1威望 +1 收起 理由
hxricky + 1 很给力!
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1

主题

4

帖子

0

粉丝