在UART接口初始化MFRC522 RFID芯片
Initialing MFRC522 RFID chip in UART interface
我正在使用 this arduino 库来初始化并与我的 MFRC522 芯片进行通信,库最初使用 SPI 接口在 MCU 和 RC522.When 之间进行通信 RC522.When 我每次都在 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);
}
问题出在 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);
}
我正在使用 this arduino 库来初始化并与我的 MFRC522 芯片进行通信,库最初使用 SPI 接口在 MCU 和 RC522.When 之间进行通信 RC522.When 我每次都在 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);
}
问题出在 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);
}