在UART接口中初始化MFRC522 RFID芯片



我使用这个arduino库初始化&与我的MFRC522芯片通信,库最初采用SPI接口与单片机之间通信;RC522。当我在SPI接口中使用它时,一切都OK &正确操作。现在我正在尝试将接口更改为UART模式。基于NXP的MFRC522数据表,我设置了UART模式的引脚状态。也阅读&编写序列&UART帧地址基于数据表。此外,当我读取RC522的VersionReg寄存器时,它成功地返回了0x92,这意味着它是V 2.0,但它无法检测到RFID标签的存在。SPI和SPI之间还有其他区别吗?UART接口或任何我必须做的额外设置?有没有人在UART模式下使用这个芯片的经验?

我的改变寄存器读&写功能:

unsigned char ReadRawRC(unsigned char Address)
{
     unsigned char ucAddr;
     unsigned char ucResult=0;
     ucAddr = Address | 0x80;
     UART_SendBlocking(USART0, &ucAddr, 1);
     UART_ReadBlocking(USART0, &ucResult, 1);
     return ucResult;
}
/////////////////////////////////////////////////////////////////////
//@ Function: write RC522 register
//@ Parameter Description: Address [IN]: register address
//Value [IN]: write value
/////////////////////////////////////////////////////////////////////
void WriteRawRC(unsigned char Address, unsigned char value)
{
        unsigned char ucAddr;
        unsigned char ucValu;
        ucAddr = Address & 0x7F;
        ucValu = value;
        UART_SendBlocking(USART0, &ucAddr, 1);
        UART_SendBlocking(USART0, &ucValu, 1);
}

问题是关于UART模式和SPI模式下地址字节的差异,如图所示图片新修改的读/写函数运行得非常好:

unsigned char ucAddr;
unsigned char ucValu;
uint8_t IncomingData;
    /////////////////////////////////////////////////////////////////////
    //@ Function: Reading RC522 register
    //@ Parameter Description: Address [IN]: register address
    //@ Return: The value read
    /////////////////////////////////////////////////////////////////////
    unsigned char ReadRawRC(unsigned char Address)
    {
         ucAddr = Address | 0x80;
             dataSign=false;
         Chip_UART_SendBlocking(LPC_USART0, &ucAddr, 1);
             StopWatch_DelayMs(3);
             if(dataSign==true)
             return IncomingData;
             return 0;
    }
    /////////////////////////////////////////////////////////////////////
    //@ Function: write RC522 register
    //@ Parameter Description: Address [IN]: register address
    //Value [IN]: write value
    /////////////////////////////////////////////////////////////////////
    void WriteRawRC(unsigned char Address, unsigned char value)
    {
            ucAddr = Address & 0x7F;
            ucValu = value;
        Chip_UART_SendBlocking(LPC_USART0, &ucAddr, 1);
        Chip_UART_SendBlocking(LPC_USART0, &value, 1);
    }

最新更新