【问题标题】:Initialing MFRC522 RFID chip in UART interface在 UART 接口中初始化 MFRC522 RFID 芯片
【发布时间】:2016-07-04 11:39:33
【问题描述】:

我正在使用this arduino 库与我的 MFRC522 芯片进行初始化和通信,该库最初使用 SPI 接口在 MCU 和 RC522 之间进行通信。当我在 SPI 接口中使用它时,一切正常并正确运行.现在我正在尝试将接口更改为 UART 模式。根据 NXP 的 MFRC522 数据表,我将引脚状态设置为 UART 模式。读写序列和 UART 帧地址也基于数据表。此外,当我读取 RC522 的 VersionReg 寄存器时,它成功返回了 0x92,这意味着它是 V 2.0,但它无法检测到 RFID 标签的存在。 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);

}

【问题讨论】:

    标签: c arduino rfid mifare nxp-microcontroller


    【解决方案1】:

    问题在于 UART 模式和 SPI 模式中地址字节的差异,如您在此所见 picture 新修改的读/写函数效果很好:

    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);
        }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-06-24
      • 2018-02-05
      • 1970-01-01
      • 1970-01-01
      • 2017-04-26
      • 2019-02-03
      • 2021-09-26
      相关资源
      最近更新 更多