MFRC522设计射频身份识别器C程序
#include "myinit.h"
/*
数 名:Write_MFRC5200 * 函
* 功能描述:向MFRC522的某一寄存器写一个字节数据
* 输入参数:addr--寄存器地址;val--要写入的值
* 返 回 值:无
*/
void Write_MFRC522(uchar addr, uchar val)
{
GPIO_WriteLow(GPIOE,GPIO_PIN_5);
//地址格式:0XXXXXX0
SPI_Write((addr<<1)&0x7E);
SPI_Write(val);
GPIO_WriteHigh(GPIOE,GPIO_PIN_5); }
/*
* 函 数 名:Read_MFRC522
* 功能描述:从MFRC522的某一寄存器读一个字节数据
* 输入参数:addr--寄存器地址
* 返 回 值:返回读取到的一个字节数据
*/
uchar Read_MFRC522(uchar addr) {
uchar val;
GPIO_WriteLow(GPIOE,GPIO_PIN_5);
//地址格式:1XXXXXX0
SPI_Write(((addr<<1)&0x7E) | 0x80);
val = SPI_Read();
GPIO_WriteHigh(GPIOE,GPIO_PIN_5);
return val;
}
/*
* 函 数 名:SetBitMask
* 功能描述:置RC522寄存器位
* 输入参数:reg--寄存器地址;mask--置位值
* 返 回 值:无
*/
void SetBitMask(uchar reg, uchar mask)
{
uchar tmp;
tmp = Read_MFRC522(reg);
Write_MFRC522(reg, tmp | mask); // set bit mask
}
/*
* 函 数 名:ClearBitMask
* 功能描述:清RC522寄存器位
* 输入参数:reg--寄存器地址;mask--清位值
* 返 回 值:无
*/
void ClearBitMask(uchar reg, uchar mask)
{
uchar tmp;
tmp = Read_MFRC522(reg);
Write_MFRC522(reg, tmp & (~mask)); // clear bit mask
}
/*
* 函 数 名:AntennaOn
* 功能描述:开启天线,每次启动或关闭天险发射之间应至少有1ms的间隔
* 输入参数:无
* 返 回 值:无
*/
void AntennaOn(void)
{
uchar temp;
temp = Read_MFRC522(TxControlReg);
if (!(temp & 0x03))
{
SetBitMask(TxControlReg, 0x03);
}
}
/*
* 函 数 名:AntennaOff
* 功能描述:关闭天线,每次启动或关闭天险发射之间应至少有1ms的间隔
* 输入参数:无
* 返 回 值:无
*/
void AntennaOff(void)
{
ClearBitMask(TxControlReg, 0x03);
}
/*
* 函 数 名:ResetMFRC522
* 功能描述:复位RC522
* 输入参数:无
* 返 回 值:无
*/
void MFRC522_Reset(void)
{
Write_MFRC522(CommandReg, PCD_RESETPHASE); }
void MFRC522_Init(void)
{
Set_NRSTPD;
MFRC522_Reset();
//Timer: TPrescaler*TreloadVal/6.78MHz = 24ms
Write_MFRC522(TModeReg, 0x8D); //Tauto=1; f(Timer) = 6.78MHz/TPreScaler
Write_MFRC522(TPrescalerReg, 0x3E); //TModeReg[3..0] + TPrescalerReg
Write_MFRC522(TReloadRegL, 30);
Write_MFRC522(TReloadRegH, 0);
Write_MFRC522(TxAutoReg, 0x40); //100%ASK
Write_MFRC522(ModeReg, 0x3D); //CRC初始值0x6363 ???
//ClearBitMask(Status2Reg, 0x08); //MFCrypto1On=0
//Write_MFRC522(RxSelReg, 0x86); //RxWait = RxSelReg[5..0]
//Write_MFRC522(RFCfgReg, 0x7F); //RxGain = 48dB
AntennaOn(); //打开天线
}
/*
* 函 数 名:MFRC522_ToCard
* 功能描述:RC522和ISO14443卡通讯
* 输入参数:command--MF522命令字,
* sendData--通过RC522发送到卡片的数据,
* sendLen--发送的数据长度
* backData--接收到的卡片返回数据,
* backLen--返回数据的位长度
* 返 回 值:成功返回MI_OK
*/
uchar MFRC522_ToCard(uchar command, uchar *sendData, uchar sendLen, uchar *backData,
uint *backLen)
{
uchar status = MI_ERR;
uchar irqEn = 0x00;
uchar waitIRq = 0x00;
uchar lastBits;
uchar n;
uint i;
switch (command)
{
case PCD_AUTHENT: //认证卡密
{
irqEn = 0x12;
waitIRq = 0x10;
break;
}
case PCD_TRANSCEIVE: //发送FIFO中数据
{
irqEn = 0x77;
waitIRq = 0x30;
break;
}
default:
break;
}
Write_MFRC522(CommIEnReg, irqEn|0x80); //允许中断请求
ClearBitMask(CommIrqReg, 0x80); //清除所有中断请求位
SetBitMask(FIFOLevelReg, 0x80); //FlushBuffer=1, FIFO初始化
Write_MFRC522(CommandReg, PCD_IDLE); //NO action;取消当前命令 ???
//向FIFO中写入数据
for (i=0; i
MAX_LEN)
{
n = MAX_LEN;
}
//读取FIFO中接收到的数据
for (i=0; i
检测
工程第三方检测合同工程防雷检测合同植筋拉拔检测方案传感器技术课后答案检测机构通用要求培训
,读取选中卡片的卡序列号
* 输入参数:serNum--返回4字节卡序列号,第5字节为校验字节
* 返 回 值:成功返回MI_OK
*/
uchar MFRC522_Anticoll(uchar *serNum)
{
uchar status;
uchar i;
uchar serNumCheck=0;
uint unLen;
//ClearBitMask(Status2Reg, 0x08); //TempSensclear
//ClearBitMask(CollReg,0x80); //ValuesAfterColl
Write_MFRC522(BitFramingReg, 0x00); //TxLastBists = BitFramingReg[2..0]
serNum[0] = PICC_ANTICOLL;
serNum[1] = 0x20;
status = MFRC522_ToCard(PCD_TRANSCEIVE, serNum, 2, serNum, &unLen);
if (status == MI_OK)
{
//校验卡序列号
for (i=0; i<4; i++)
{
serNumCheck ^= serNum[i];
}
if (serNumCheck != serNum[i])
{
status = MI_ERR;
}
}
//SetBitMask(CollReg, 0x80); //ValuesAfterColl=1
return status;
}
/*
* 函 数 名:CalulateCRC
* 功能描述:用MF522计算CRC
* 输入参数:pIndata--要读数CRC的数据,len--数据长度,pOutData--计算的CRC结果
* 返 回 值:无
*/
void CalulateCRC(uchar *pIndata, uchar len, uchar *pOutData)
{
uchar i, n;
ClearBitMask(DivIrqReg, 0x04); //CRCIrq = 0
SetBitMask(FIFOLevelReg, 0x80); //清FIFO指针
//Write_MFRC522(CommandReg, PCD_IDLE);
//向FIFO中写入数据
for (i=0; i
本文档为【MFRC522设计射频身份识别器C程序】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑,
图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。