rfid学习总结,基本流程:
基本流程:
1.寻卡请求
2.防冲撞
3.选卡
4.验证
5.读数据/写数据
void IC_test()
{
uchar ucTagType[4];
uchar find=0xaa;
uchar ret;
int status = 1;
unsigned char auth_mode = 0x60;
unsigned char DefaultKey[6] = {
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF};
unsigned char Data[16];
unsigned char Data_W[16] = {
0x5A,0x58,0x58,0x20,0x4C,0x6F,0x76,0x65,0x73,0x20,0x47,0x4A,0x5A,0x3E,0x2E,0x3C};
while(1)
{
//16进制转ASC码
char i;
char Card_Id[8]; //存放32位卡号
char Card_Data[32];
uchar asc_16[16]={
'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};
switch(status)
{
case 1:
ret = PcdRequest(0x52,ucTagType);//寻卡 请求
if(ret != 0x26)
ret = PcdRequest(0x52,ucTagType);
if(ret != 0x26)
find = 0xaa;
if((ret == 0x26)&&(find == 0xaa))
status = 2;
break;
case 2:
if(PcdAnticoll(ucTagType) == 0x26)//防冲撞
{
UartSend_String("The Card ID is: ",16);
//16进制转ASC码
for(i=0;i<4;i++)
{
Card_Id[i*2]=asc_16[ucTagType[i]/16];
Card_Id[i*2+1]=asc_16[ucTagType[i]%16];
}
UartSend_String(Card_Id,8);
UartSend_String("\n",1);
find = 0x00;
status = 3;
}
else
status = 1;
break;
case 3:
if(PcdSelect(ucTagType) == 0x26)//选卡
{
UartSend_String("选卡成功",8);
UartSend_String("\n",1);
status = 4;
}
else
status = 1;
break;
case 4:
if(PcdAuthState(auth_mode,2,DefaultKey,ucTagType) == 0x26) // 验证密码
{
UartSend_String("验证成功",8);
UartSend_String("\n",1);
status = 5;
}
else
status = 1;
break;
case 5:
PcdWrite(2,Data_W); //写数据
PcdRead(2,Data); //读数据
UartSend_String("the data_r is :",16);
UartSend_String("\n",1);
for(i=0;i<16;i++)
{
Card_Data[i*2]=asc_16[Data[i]/16];
Card_Data[i*2+1]=asc_16[Data[i]%16];
}
UartSend_String(Card_Data,32);
UartSend_String("\n",1);
UartSend_String("the data_w is :",16);
UartSend_String("\n",1);
UartSend_String((char*)Data,16);
UartSend_String("\n",1);
status = 1;
break;
}
}
}
库函数
void Delay_I_1us(unsigned int k)
{
uint i,j;
for(i=0;i<k;i++)
for(j

本文详细介绍了RFID系统的基本操作流程,包括寻卡请求、防冲撞、选卡、验证和读写数据步骤。通过提供的C代码示例展示了如何使用MF522模块与Mifare卡进行交互,包括初始化、设置工作模式、读写操作等关键函数。此外,还涉及了SPI通信、CRC校验等关键技术。

938

被折叠的 条评论
为什么被折叠?



