char M500Reset(void)
{ char status;
RC500RST=0; //RC500在RSTPD脚由高变低的时候复位
delay_1ms(25); //注意延时的长度,本系统的晶振频率是11.0592MHz
RC500RST=1;
delay_50us(200);
RC500RST=0;
delay_50us(50);
.
.
.
return status;
}
char M500Config(void)//对RC500的寄存器进行初始化
//RC500发送请求。req_code是请求模式,一共有request all和Request std两种模式。Request all指令是非连续性的读卡指令,只读一次。但有个例外,当某一次Request all指令读卡片失败时,例如,卡片没能通过密码认证或其它原因而出错时,Request all指令将连续地读卡,直到读卡成功才进入非连续性的读卡模式。Request std指令的使用和Request all指令刚巧相反。Request std指令是连续性的读卡指令。当某一张卡片在MCM之天线的有效的工作范围(距离)内,Request std指令在成功地读取这一张卡片之后,进入MCM对卡片的其它操作。如果其它操作完成之后 ,程序员又将MCM进入Request std指令操作,则Request std指令将连续地再次进行读卡操作,而不管这些片卡是否被拿卡。只要有一张卡片进入MCM之天线的有效的工作范围(范围)内,Request std指令将始终连续地再次进行读卡操作。对于Mifare1卡,该函数反回值为0004H。
char M500PiccCascAnticoll(unsigned char bcnt,unsigned
char *snr) //反碰撞函数,得到一张卡的序列号
//存入snr中
char M500PiccCascSelect(unsigned char *snr,unsigned char *sak) //选中snr指定的卡,对于Mifarel卡返回值为0008H,值存入sak中
char M500PiccAuthKey(unsigned char auth_mode,unsigned char *snr,unsigned char *keys,unsigned char block)
//这是三轮认证函数,整个过程包括:先将所要访问的区密码加密(如区0的初始密码为6个FFH),再将加密后的密码通过Loadkey存入MF RC500的Key缓存中,接着进行认证。
Char M500PiccRead(unsigned char addr,unsigned char *_data) //最后读卡,读到的数据存入_data中