永发信息网

RC522读卡芯片怎么用?

答案:2  悬赏:30  手机版
解决时间 2021-05-16 19:24
MF RC522内部有64个寄存器,共分4页:PAGE0:COMMAND AND STATUS;PAGE1:COMMAND;PAGE2:CFG;PAGE3:TEST。MF RC522通过内部寄存器的读写控制与Mifare 1 IC卡数据通信。怎么用单片机来控制的?
最佳答案

什么意思?


#include
#define RST 1 << 8 // P0.7控制RC522复位,低电平复位



int RC522_RST (void)
{


//PINSEL0 = 0x00000000; // 设置管脚连接GPIO
IO0DIR = RST; // 设置RST控制口为输出
IO0SET = RST; // P0.7置高
DelayNS(10); // 延时
IO0CLR = RST; // P0.7置低
DelayNS(3);
IO0SET = RST;


return 0;
}



unsigned char ReadRawRC(unsigned char Address)
{
unsigned char ucAddr;
unsigned char ucResult = 0;
ucAddr = ((Address<<1)&0x7E)|0x80;


ucResult = MSPI_SendData (ucAddr);


return ucResult;

}


void WriteRawRC(unsigned char Address,unsigned char value)
{
unsigned char ucAddr;
ucAddr = ((Address<<1)&0x7E);


MSPI_SendData(ucAddr);
MSPI_SendData(value);



return 0;


}



void SetBitMask(unsigned char reg,unsigned char mask)
{
char tmp = 0x0;
tmp = ReadRawRC(reg);
WriteRawRC(reg,tmp | mask);



return 0;
}



void ClearBitMask(unsigned char reg,unsigned char mask)
{
char tmp = 0x0;
tmp ReadRawRC(reg);
WriteRawRC(reg,tmp & ~mask);



return 0;
}



void PcdAntennaOn()
{
unsigned char i;
i = ReadRawRC(TxControlReg);
if (!(i & 0x03))
{
SetBitMask(TxControlReg,0x03);


}


return 0;
}



void PcdAntennaOff()
{
ClearBitMask(TxControlReg,0x03);

}



char PcdComMF522(unsigned char Command,
unsigned char *pInData,
unsigned char InLenByte,
unsigned char *pOutData,
unsigned int *pOutLenBit)
{
char status = MI_ERR;
unsigned char irqEn = 0x00;
unsigned char waitFor = 0x00;
unsigned char lastBits;
unsigned char n;
unsigned int i;
switch (Command)
{
case PCD_AUTHENT:
irqEn = 0x12;
waitFor = 0x10;
break;
case PCD_TRANSCEIVE:
irqEn = 0x77;
waitFor = 0x30;
break;
default:
break;
}

WriteRawRC(ComIEnReg,irqEn|0x80);
ClearBitMask(ComIrqReg,0x80);
WriteRawRC(CommandReg,PCD_IDLE);
SetBitMask(FIFOLevelReg,0x80);

for (i=0; i<InLenByte; i++)
{ WriteRawRC(FIFODataReg, pInData[i]); }
WriteRawRC(CommandReg, Command);


if (Command == PCD_TRANSCEIVE)
{ SetBitMask(BitFramingReg,0x80); }

i = 600;//根据时钟频率调整,操作M1卡最大等待时间25ms
do
{
n = ReadRawRC(ComIrqReg);
i--;
}
while ((i!=0) && !(n&0x01) && !(n&waitFor));
ClearBitMask(BitFramingReg,0x80);

if (i!=0)
{
if(!(ReadRawRC(ErrorReg)&0x1B))
{
status = MI_OK;
if (n & irqEn & 0x01)
{ status = MI_NOTAGERR; }
if (Command == PCD_TRANSCEIVE)
{
n = ReadRawRC(FIFOLevelReg);
lastBits = ReadRawRC(ControlReg) & 0x07;
if (lastBits)
{ *pOutLenBit = (n-1)*8 + lastBits; }
else
{ *pOutLenBit = n*8; }
if (n == 0)
{ n = 1; }
if (n > MAXRLEN)
{ n = MAXRLEN; }
for (i=0; i<n; i++)
{ pOutData[i] = ReadRawRC(FIFODataReg); }
}
}
else
{ status = MI_ERR; }

}


SetBitMask(ControlReg,0x80); // stop timer now
WriteRawRC(CommandReg,PCD_IDLE);
return status;
}


2007-8-11 22:33:00 jianjian1981



等级:初中二年级
文章:51
积分:1461
门派:无门无派
注册:2006年4月19日第 2 楼


--------------------------------------------------------------------------------




char PcdRequest(unsigned char req_code,unsigned char *pTagType)
{
char status;
unsigned int unLen;
unsigned char ucComMF522Buf[MAXRLEN];


ClearBitMask(Status2Reg,0x08);
WriteRawRC(BitFramingReg,0x07);
SetBitMask(TxControlReg,0x03);

ucComMF522Buf[0] = req_code;


status = PcdComMF522(PCD_TRANSCEIVE,ucComMF522Buf,1,ucComMF522Buf,&unLen);

if ((status == MI_OK) && (unLen == 0x10))
{
*pTagType = ucComMF522Buf[0];
*(pTagType+1) = ucComMF522Buf[1];
}
else
{ status = MI_ERR; }

return status;
}



char PcdAnticoll(unsigned char *pSnr)
{
char status;
unsigned char i,snr_check=0;
unsigned int unLen;
unsigned char ucComMF522Buf[MAXRLEN];


ClearBitMask(Status2Reg,0x08);
WriteRawRC(BitFramingReg,0x00);
ClearBitMask(CollReg,0x80);

ucComMF522Buf[0] = PICC_ANTICOLL1;
ucComMF522Buf[1] = 0x20;


status = PcdComMF522(PCD_TRANSCEIVE,ucComMF522Buf,2,ucComMF522Buf,&unLen);


if (status == MI_OK)
{
for (i=0; i<4; i++)
{
*(pSnr+i) = ucComMF522Buf[i];
snr_check ^= ucComMF522Buf[i];
}
if (snr_check != ucComMF522Buf[i])
{ status = MI_ERR; }
}

SetBitMask(CollReg,0x80);
return status;
}



char PcdSelect(unsigned char *pSnr)
{
char status;
unsigned char i;
unsigned int unLen;
unsigned char ucComMF522Buf[MAXRLEN];

ucComMF522Buf[0] = PICC_ANTICOLL1;
ucComMF522Buf[1] = 0x70;
ucComMF522Buf[6] = 0;
for (i=0; i<4; i++)
{
ucComMF522Buf[i+2] = *(pSnr+i);
ucComMF522Buf[6] ^= *(pSnr+i);
}
CalulateCRC(ucComMF522Buf,7,&ucComMF522Buf[7]);

ClearBitMask(Status2Reg,0x08);


status = PcdComMF522(PCD_TRANSCEIVE,ucComMF522Buf,9,ucComMF522Buf,&unLen);

if ((status == MI_OK) && (unLen == 0x18))
{ status = MI_OK; }
else
{ status = MI_ERR; }


return status;
}


全部回答
RC522开发套件 .............\_desktop.ini .............\图纸 .............\....\SL016.Bkp .............\....\SL016.DDB .............\....\SL016.PCB .............\....\SL106.sch .............\....\SL610-430.PCB .............\....\SL610-430.SCH .............\....\SL610-LPC.PCB .............\....\SL610L-PC.SCH .............\....\_desktop.ini .............\文档 .............\....\049510.PDF .............\....\0495101.pdf .............\....\ISO14443 .............\....\........\ISO14443-2.pdf .............\....\........\ISO14443-3.pdf .............\....\........\ISO14443-4.pdf .............\....\........\_desktop.ini .............\....\M01040.PDF .............\....\M01811.PDF .............\....\M112120_FSpec_RC522_20050801.pdf .............\....\Mifare卡片资料 .............\....\..............\M01040.PDF .............\....\..............\M01811.PDF .............\....\..............\M043531.pdf .............\....\..............\_desktop.ini .............\....\PASS.TXT .............\....\_desktop.ini .............\源代码 .............\......\C430 .............\......\....\MAIN.C .............\......\....\MAIN.H .............\......\....\MFRC522.H .............\......\....\RC522.C .............\......\....\_desktop.ini .............\......\C51 .............\......\...\LPCREG.H .............\......\...\MAIN.C .............\......\...\MAIN.H .............\......\...\MAIN.LST .............\......\...\MAIN.OBJ .............\......\...\MFRC522.H .............\......\...\RC522.C .............\......\...\RC522.LST .............\......\...\RC522.OBJ .............\......\...\TEST522 .............\......\...\TEST522.hex .............\......\...\TEST522.lnp .............\......\...\TEST522.M51 .............\......\...\TEST522.Opt .............\......\...\TEST522.plg .............\......\...\TEST522.rar .............\......\...\TEST522.Uv2 .............\......\...\TEST522_Opt.Bak .............\......\...\TEST522_Uv2.Bak .............\......\...\_desktop.ini .............\......\_desktop.ini .............\......\复件 C51 .............\......\........\LPCREG.H .............\......\........\MAIN.C .............\......\........\MAIN.H .............\......\........\MAIN.LST .............\......\........\MAIN.OBJ .............\......\........\MFRC522.H .............\......\........\RC522.C .............\......\........\RC522.LST .............\......\........\RC522.OBJ .............\......\........\TEST522 .............\......\........\TEST522.hex .............\......\........\TEST522.lnp .............\......\........\TEST522.M51 .............\......\........\TEST522.Opt .............\......\........\TEST522.plg .............\......\........\TEST522.rar .............\......\........\TEST522.Uv2 .............\......\........\TEST522_Opt.Bak .............\......\........\TEST522_Uv2.Bak .............\......\........\_desktop.ini
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
被狗抓破了脚皮,怎么办?
DNF影虎刀最高属性
有什么简单容易的办法能让头发迅速生长???(简
彩铃用英语怎么说?
经常在电脑前工作的人注意什么,饮食怎么注意
怎么样可以让头发快点长
写讨厌带眼镜的句子
怎麽创造qq炫舞 舞团
硚口区武汉遵义羊肉粉在哪里啊,我有事要去这
河北保定太空闪动空间网吧的具体位置在哪里,
请问胸部乳头两个不一样是不是有问题
到底要选什么行业好阿?
谁给说点90后听得好听的哥。张杰,许嵩除外。
求一份全天性的篮球后卫训练计划。要从早到晚
北京盘古大观酒店是白金五星级吗?
推荐资讯
200分求有侠气的诗歌(越多越好)
泡面什么牌子好?
鼓楼区开封金明区人民医院-急诊我想知道这个
潜江市潜江华电器修理地址是什么,有没有知道
成都到敦煌自驾怎么走,从南京六合到湖州德清
吃龟灵膏能减肥吗?
萨尔图区大庆米多国际水育潜能开发哪位知道具
internet explorer6怎么安装啊!
东莞有几家混泥土公司,各叫什么名字?
两个人以后在一起,是不是要通过家里人的同意
想要去南方,只是想去静一年,可行么?
为什么我的压力那么重?
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?