51单片机驱动RC522模块

2020-12-12 18:09发布

最近在某宝上买了一块RC522模块,试玩了下,读写卡正常。想学习使用新的东西时,有必要了解它的工作原理和工作过程,不清楚或者不知道的可以参考相关数据手册和参考文献,在这里为了节省自己的时间,我只对我的51程序做一个小小的笔记~~ 想要驱动RC522模块对IC卡(这里用的是M1卡型号是S50)进行读写操作,一定要有以下5个步骤:

 一、寻卡 二、防冲突 三、选择卡 四、验证扇区密码(每个扇区都有密匙A和密匙B,验证正确才能对该扇区的某块进行读写) 五、读/写

在这里插入图片描述

  • 硬件方面与单片机I/O口连好,使用SPI通信的时候NSS就是SDA引脚,IRQ悬空。
  • 主程序如下:


//Open master interrupt switch
	CmdValid=0; 
	PcdReset();			//以下三条是天线的初始化,必须
  	PcdAntennaOff(); 
 	 PcdAntennaOn();  
//	delay_10ms(250);
	M500PcdConfigISOType( 'A' );//工作模式“A”
    while(1)
	{
		ANT_INIT();
	}


}
void ANT_INIT()
{
	PcdHalt();
	PcdRequest(PICC_REQALL,&pTagType);//寻卡成功
	status=PcdAnticoll(&MLastSelectedSnr);//防冲撞成功
	PcdSelect(MLastSelectedSnr);
	PcdAuthState(0x60,1,DefaultKey,MLastSelectedSnr);
	//status=PcdWrite(1,me);		   //这是写,使用时可以先注释掉下面一行代码
	//status=PcdRead(1,RevBuffer);//这是读,使用时可以先注释掉上面一行代码
	if(status==0)
	  SBUF=MLastSelectedSnr[0];//触发串口中断
	else TI=0;
}
/*----------------------------
UART interrupt service routine
----------------------------*/
void Uart_Isr() interrupt 4 using 1
{											
	static unsigned char i=0;				 //白卡序列号       : BA A5 EF 0A
	if(TI==1)
	{
		TI=0;
		for(i=1;i<4;i++)
		{
			SBUF=MLastSelectedSnr[i];
			while(!TI);
			TI=0;
		}
	}
}

另外mfrc522.h和RC522.c可以从资料调用过来自己的工程。