最近在某宝上买了一块RC522模块,试玩了下,读写卡正常。想学习使用新的东西时,有必要了解它的工作原理和工作过程,不清楚或者不知道的可以参考相关数据手册和参考文献,在这里为了节省自己的时间,我只对我的51程序做一个小小的笔记~~ 想要驱动RC522模块对IC卡(这里用的是M1卡型号是S50)进行读写操作,一定要有以下5个步骤:
一、寻卡 二、防冲突 三、选择卡 四、验证扇区密码(每个扇区都有密匙A和密匙B,验证正确才能对该扇区的某块进行读写) 五、读/写
//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可以从资料调用过来自己的工程。