Question: I am using a PSoC5 with Cypress Creater to read an RFID tag with a MFRC522 chip. It is in C. This is the code
I am using a PSoC5 with Cypress Creater to read an RFID tag with a MFRC522 chip. It is in C. This is the code I have below. I honestly don't know if the registrar and values I send to it are correct. Any help would be amazing. I only really need teh UID that is unique to each tag.
#include "project.h"
void lock()
{ uint8 motorVal = 9;
LCD_Position(1,0);
for(int x = 0; x <= 2; x++)
{
MotorPort_Write(motorVal);
motorVal = 5;
CyDelay(500);
MotorPort_Write(motorVal);
motorVal = 6;
CyDelay(500);
MotorPort_Write(motorVal);
motorVal = 10;
CyDelay(500);
MotorPort_Write(motorVal);
motorVal = 9;
CyDelay(500);
}
}
void unlock()
{
uint8 motorVal = 6;
LCD_Position(1,0);
for(int x = 0; x <= 2; x++)
{
MotorPort_Write(motorVal);
motorVal = 5;
CyDelay(500);
MotorPort_Write(motorVal);
motorVal = 9;
CyDelay(500);
MotorPort_Write(motorVal);
motorVal = 10;
CyDelay(500);
MotorPort_Write(motorVal);
motorVal = 6;
CyDelay(500);
}
}
int main(void)
{
CyGlobalIntEnable;
LCD_Start();
SPIM_Start();
SPIM_CLK_Start();
for(;;)
{
//Reset set to high
MFRC522_RST_Write(0);
uint8 SpiData[8];
//TModeReg
SpiData[0] = 0x2A;
SpiData[1] = 0x8D;
MFRC522_SDA_Write(0);
CyDelay(1);
SPIM_PutArray(SpiData, 2);
MFRC522_SDA_Write(1);
CyDelay(1);
//TPrescalerReg
SpiData[0] = 0x2B;
SpiData[1] = 0x3E;
MFRC522_SDA_Write(0);
CyDelay(1);
SPIM_PutArray(SpiData, 2);
MFRC522_SDA_Write(1);
CyDelay(1);
//TReloadRegL
SpiData[0] = 0x2C;
SpiData[1] = 0x30;
MFRC522_SDA_Write(0);
CyDelay(1);
SPIM_PutArray(SpiData, 2);
MFRC522_SDA_Write(1);
CyDelay(1);
//TReloadRegH
SpiData[0] = 0x2D;
SpiData[1] = 0x00;
MFRC522_SDA_Write(0);
CyDelay(1);
SPIM_PutArray(SpiData, 2);
MFRC522_SDA_Write(1);
CyDelay(1);
//TxAutoReg
SpiData[0] = 0x15;
SpiData[1] = 0x40;
MFRC522_SDA_Write(0);
CyDelay(1);
SPIM_PutArray(SpiData, 2);
MFRC522_SDA_Write(1);
CyDelay(1);
//ModeReg
SpiData[0] = 0x11;
SpiData[1] = 0x3D;
MFRC522_SDA_Write(0);
CyDelay(1);
SPIM_PutArray(SpiData, 2);
MFRC522_SDA_Write(1);
CyDelay(1);
//Antenna On
SpiData[0] = 0x14;
SpiData[1] = 0x03;
MFRC522_SDA_Write(0);
CyDelay(1);
SPIM_PutArray(SpiData, 2);
MFRC522_SDA_Write(1);
CyDelay(1);
//To actually read I think we have initilize and define it to read then call it to read it
//BitFramingReg
SpiData[0] = 0x0D;
SpiData[1] = 0x07;
MFRC522_SDA_Write(0);
CyDelay(1);
SPIM_PutArray(SpiData, 2);
MFRC522_SDA_Write(1);
CyDelay(1);
//PCD_TRANSCEIVE (Not Sure)
SpiData[0] = 0x0C;
SpiData[1] = 0xAC;
MFRC522_SDA_Write(0);
CyDelay(1);
SPIM_PutArray(SpiData, 2);
MFRC522_SDA_Write(1);
CyDelay(1);
//PICC_ANTICOLL
SpiData[0] = 0x93;
SpiData[1] = 0x20;
MFRC522_SDA_Write(0);
CyDelay(1);
SPIM_PutArray(SpiData, 2);
MFRC522_SDA_Write(1);
CyDelay(1);
//Trying to Read
SpiData[0] = 0x12; //command write to FIFO: 0x12
SpiData[1] = 0x0C; //data trasieve 0x0C
MFRC522_SDA_Write(0);
CyDelay(1);
SPIM_PutArray(SpiData, 2);
MFRC522_SDA_Write(1);
CyDelay(1);
SpiData[0] = 0x92; //read FIFO
SpiData[1] = 0x90; // dummy
MFRC522_SDA_Write(0);
CyDelay(1);
SPIM_PutArray(SpiData, 2);
MFRC522_SDA_Write(1);
CyDelay(1);
SPIM_ClearRxBuffer();
SpiData[0] = SPIM_ReadRxData();
SpiData[1] = SPIM_ReadRxData();
SpiData[2] = SPIM_ReadRxData();
SpiData[3] = SPIM_ReadRxData();
SpiData[4] = SPIM_ReadRxData();
SpiData[5] = SPIM_ReadRxData();
SpiData[6] = SPIM_ReadRxData();
SpiData[7] = SPIM_ReadRxData();
LCD_ClearDisplay();
LCD_Position(0,0);
LCD_PrintNumber(SpiData[0]);
LCD_PrintString(" ");
LCD_PrintNumber(SpiData[1]);
LCD_PrintString(" ");
LCD_PrintNumber(SpiData[2]);
LCD_PrintString(" ");
LCD_PrintNumber(SpiData[3]);
LCD_Position(1,0);
LCD_PrintNumber(SpiData[4]);
LCD_PrintString(" ");
LCD_PrintNumber(SpiData[5]);
LCD_PrintString(" ");
LCD_PrintNumber(SpiData[6]);
LCD_PrintString(" ");
LCD_PrintNumber(SpiData[7]);
CyDelay(300);
LCD_ClearDisplay();//I put this here to see how quick the program runs and resets
CyDelay(1000);
}
}
/* [] END OF FILE */
Step by Step Solution
There are 3 Steps involved in it
Get step-by-step solutions from verified subject matter experts
