RC522 13.56M开发详解一
MFRC522数据手册_引脚图_参数

The MFRC522 is available in two versions:
• MFRC52201HN1, hereafter referred to version 1.0 and • MFRC52202HN1, hereafter referred to version 2.0.
MFRC522
Standard 3V MIFARE reader solution
Rev. 3.7 — 26 March 2014 112137
Product data sheet COMPANY PUBLIC
1. Introduction
This document describes the functionality and electrical specifications of the contactless reader/writer MFRC522.
83 of 94
NXP Semiconductors
MFRC522
Standard 3V MIFARE reader solution
001aak598 (1) (2)
(3)
10 μs/div (1) MinLevel (1 V/div) on pin AUX2. (2) Corr1 (1 V/div) on pin AUX1. (3) RF field.
All information provided in this document is subject to legal disclaimers.
Rev. 3.7 — 26 March 2014 112137
© NXP Semiconductors N.V. 2014. All rights reserved.
科博电子RC522读卡模块快速使用说明

RFID读卡模块快速使用说明
第一步:将RFID模块正确的和板子上的8位排母(在流水灯旁)连接。
第二步:将拨码开关的LED位拨上,其余位拨下关闭
第三步:将串口线链接计算机和开发板
第四步:将usb电源线链接计算机和开发板
第五步:将卡片放到读卡模块上
第六步:打开串口调试助手软件
第七步:按下开发板子锁按键,用仿真器或编程器下载RC522程序至开发板,串口调试助手会出现下图界面:
第八步:在串口发送区,输入A点击发送,为自动寻卡模式,输入F点击发送为单次寻卡模式
测试完毕!
备注:北京科博电子的工程师正在加速开发完善该读卡模块的其他应用程序,在此之前用户朋友自行研发时需参考我们提供的文档资料和其他参考资料,程序如有更新我们会第一时间发布并通知!。
项目三 13.56MHz物联网RFID应用系统设计——公交收费系统

3.2.2 MIFARE 1射频卡的功能组成
卡片 天线
15
MIFARE 1卡 片 内 部 结 构
RF Interface 射频接口电路
Digital Section 数字电路部分
波 形 转 换 CLOCK 正 弦 波 →方 波DATA
整
Modu / DeModu
流
调制 /解调
电压调节
POR 上电复位
本课程使用MIFARE 1 S50卡作为公交收费系统公 交卡。
2020/9/22
9
3.2.1 MIFARE 1射频卡简介
MIFARE 1射频卡的核心是philips公司的MIFARE 1 IC S50系列微晶片。
MIFARE 1射频卡采用先进的芯片制造工艺制作,内建有 高速的CMOS EEPROM,MCU等。卡片上除了IC微晶片 及一副高效率天线外,无任何其它元件。卡片上没有电源, 工作时的电源能量由卡片阅读器天线发送无线电载波信号 耦合到卡片上天线上而产生电能,一般可达2V以上,供卡 片上IC工作。工作频率是13.56MHz。
➢ Type B是一个开放式的非接触式智能卡标准
12
代表Type A非接触射频卡芯片
代表Type A非接触智能卡芯片主要有:
Mifare_Light (MF1 IC L10系列)
MIFARE1 (S50系列、内置ASIC)
Mifare2 (即:Mifare Pro) (MF2 ICD8x系列
1
0
1
Never Never KeyA|B KeyB Never Never
1
1
1
Never Never KeyA|B Never Never Never
3.2.4 MIFARE 1卡与阅读器的通信
超低功耗13.56M芯片SI522,替代RC522完全兼容PIN对PIN

超低功耗13.56M芯⽚SI522,替代RC522完全兼容PIN对PIN
SI522是应⽤于13.56MHz ⾮接触式中⾼集成度读写卡系列中的⼀员。
SI522的概述:
Si522 是⼀个⾼度集成的,⼯作在13.56MHz 的⾮接触式读写器芯⽚,阅读器⽀持ISO/IEC 14443 A/MARE。
⽆需外围其他,Si522 的内部发送器可驱动读写器天线与ISO/IEC 14443A/MIFARE 卡和应答机通信。
接收器模块提供⼀个强⼤和⾼效的电路来解调译码ISO/IEC 144443 A/MIFARE 兼容卡和应答机的信号。
数块处理完整的ISO/IEC14443 A 帧和错误检测功能(奇偶和CRC)。
Si522 ⽀持MIFARE 产品。
Si522 ⽀持⾮接触式通信,与MIFARE 系列双向通信速率⾼达848kBd。
Si522 内部集成低功耗⾃动寻卡与定时唤醒功能,可编程寻卡时间间隔,寻卡过程⽆需MCU 操作,寻卡成功中断唤醒或定时唤醒MCU 实现低电流消耗的同时⼜保证了低功耗寻卡模式的稳定性。
提供以下主机:
1SPI(串⾏外设接⼝)
2串⾏UART(类似RS232,电压电平值取决于引脚供电电压)
3标准双线
Si522 主要优势点:
1. 直接PIN2PIN 兼容,与FM17550/FM17520/RM522
2. 完全替换RC522,接收功耗下降10mA,相⽐新增了⾃动寻卡和定时唤醒,⾃动寻卡功耗为4.5uA,业界最低。
3.⾸创全新寻卡⽅式,读卡模组不再死机。
rc522读写程序

rc522读写程序摘要:1.简介2.什么是rc522 读写程序3.功能与特点4.应用场景5.结论正文:rc522 读写程序是一款用于非接触式射频识别(RFID)技术的软件,它能够实现对MFRC522 射频模块的数据读写操作。
这款程序广泛应用于各种智能设备中,如物联网、智能家居、门禁系统等。
1.简介rc522 读写程序基于MFRC522 射频模块设计,可以实现对各类非接触式RFID 卡片的读写操作。
它支持MIFARE Classic、MIFARE DESFire、MIFARE UID 等常见的RFID 卡片类型,具有较高的兼容性。
2.什么是rc522 读写程序rc522 读写程序是一款用于操作MFRC522 射频模块的软件,通过编写简单的程序,可以实现对RFID 卡片的读取和写入操作。
这款程序具有操作简便、功能齐全的特点,适合各类开发者使用。
3.功能与特点rc522 读写程序的功能主要包括:- 读取RFID 卡片中的数据- 向RFID 卡片写入数据- 支持MIFARE Classic、MIFARE DESFire、MIFARE UID 等卡片类型- 支持SPI 和UART 接口- 提供详细的API 文档和示例代码这款程序的特点有:- 兼容性强,支持多种RFID 卡片类型- 操作简便,易于上手- 功能齐全,满足各类应用场景的需求4.应用场景rc522 读写程序广泛应用于以下场景:- 物联网设备的数据采集和控制- 智能家居系统的设备联动- 门禁系统中的卡片识别和权限控制- 智能标签的读写操作5.结论rc522 读写程序是一款实用的RFID 读写工具,通过简单的编程,可以实现对各类RFID 卡片的读写操作。
rc522射频模块使用方法

rc522射频模块使用方法rc522射频模块是一种基于射频的非接触式物联网(IoT)模块,它可以在控制器,如Arduino,Raspberry Pi等(简称MCU)之间实现智能化交互,可以实现身份识别、数据传输和数据交换等功能,功能强大。
rc522射频模块可以实现各种通信功能,可以精确识别远程物体,可用于家庭自动化,智能电子产品的快速开发,可以用于室内导航,可以实现支付系统、密码学案例和身份认证等方面的应用。
rc522射频模块的使用十分简单,首先,确定射频模块的主要电路原理:利用高频射频信号发送数据,然后接收方接收该信号,从而实现远程数据传输。
然后,使用射频模块,利用射频调节MCUGPIO,安装软件驱动,连接模块和MCU,连接模块之间,实现数据传输之后,就可以使用该模块实现数据传输功能了。
另外,该模块还具有身份认证功能,可以根据模块的ID号进行认证,确定模块的特定身份,进而实现自动化的数据交换,以达到精确识别的效果。
可以用rc522射频模块进行智能家居的控制,如灯光的自动开关,室内温湿度的自动检测,客厅的空气质量的自动检测等。
此外,射频模块还可以用于室内导航,可以帮助提高室内空间的利用效率,为用户提升更好的服务体验。
最后,rc522射频模块也有一些局限性,它只能用于短距离的数据传输,而不能用于长距离的传输,如室外长距离的控制。
同时,该模块由于具有安全性较低的特点,容易受到外部信号的干扰,因此在使用过程中,需要注意避免外界干扰。
综上所述,rc522射频模块具有识别精度高,安装方便,容易实现身份认证等优点,可以用于室内导航,可以用于家庭自动化,智能电子产品的快速开发等多种应用,但是它也存在一些局限性,如只能用于短距离的数据传输,安全性较低等,因此在使用过程中,需要注意避免外界的干扰,以保证安全性。
MF RC522 射频识别参考程序注释new
MF RC522 射频识别参考程序注释串口读取的数据//------------------------------------------ucAddr = ((Address<<1)&0x7E)|0x80;//变化成有效的地址形式,最低位为0,最高位为1时候是,从MFRC522读出数据,参考39页// 读SPI数据//------------------------------------------unsigned char SPIReadByte(void){unsigned char data SPICount; // Counter used to clock out the dataunsigned char data SPIData;SPIData = 0;for (SPICount = 0; SPICount < 8; SPICount++) // Prepare to clock in the data to be read{SPIData <<=1; // Rotate the data CLR_SPI_CK; nop();nop(); // Raise the clock to clock the data out of the MAX7456if(STU_SPI_MISO){SPIData|=0x01;}Drop the clock ready for the next bit} // and loop back return (SPIData); // Finally return the read data}//------------------------------------------// 写SPI数据//------------------------------------------void SPIWriteByte(unsigned char data SPIData){unsigned char data SPICount; // Counter used to clock out the datafor (SPICount = 0; SPICount < 8; SPICount++){if (SPIData & 0x80){SET_SPI_MOSI;}else{CLR_SPI_MOSI;} nop();nop();CLR_SPI_CK;nop();nop();SET_SPI_CK;nop();nop();SPIData <<= 1;}}///////////////////////////////////////////////////////////////////////功能:寻卡//参数说明: req_code[IN]:寻卡方式// 0x52 = 寻感应区内所有符合14443A标准的卡// 0x26 = 寻未进入休眠状态的卡// pTagType[OUT]:卡片类型代码// 0x4400 = Mifare_UltraLight// 0x0400 = Mifare_One(S50)// 0x0200 = Mifare_One(S70)// 0x0800 = Mifare_Pro(X)// 0x4403 = Mifare_DESFire//返回: 成功返回MI_OK/////////////////////////////////////////////////////////////////////char PcdRequest(unsigned char data req_code,unsigned char *pTagType){unsigned int data unLen;unsigned char data ucComMF522Buf[MAXRLEN];ClearBitMask(Status2Reg,0x08);//清除MRCrypto1on,要用软件清零WriteRawRC(BitFramingReg,0x07);//startsend=0,rxalign=0,在FIFO中存放的位置,TXlastbit=7SetBitMask(TxControlReg,0x03);//TX2rfen=1,TX1RFen=1,传递调制的13.56MHZ的载波信号ucComMF522Buf[0] = req_code;status = PcdComMF522(PCD_TRANSCEIVE,ucComMF522Buf,1,ucComMF522Buf,&unLen);//****** ************8if ((status == MI_OK) && (unLen == 0x10)){*pTagType = ucComMF522Buf[0];*(pTagType+1) = ucComMF522Buf[1];}else{ status = MI_ERR; }return status;}///////////////////////////////////////////////////////////////////////功能:防冲撞//参数说明: pSnr[OUT]:卡片序列号,4字节//返回: 成功返回MI_OK/////////////////////////////////////////////////////////////////////char PcdAnticoll(unsigned char *pSnr){char data status;unsigned char data i,snr_check=0;unsigned int data unLen;unsigned char data ucComMF522Buf[MAXRLEN];ClearBitMask(Status2Reg,0x08); //清除MRCrypto1on,要用软件清零WriteRawRC(BitFramingReg,0x00); //表示最后一个字节所有位都发送ClearBitMask(CollReg,0x80); //CollRegCollReg 0冲突结束后冲突位被置零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); //CollRegCollReg 在106kbps良好的防冲突情况下该位置1 return status;}///////////////////////////////////////////////////////////////////////功能:选定卡片//参数说明: pSnr[IN]:卡片序列号,4字节//返回: 成功返回MI_OK/////////////////////////////////////////////////////////////////////char PcdSelect(unsigned char *pSnr){char data status;unsigned char data i;unsigned int data unLen;unsigned char data 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);//清零MFcryonstatus = PcdComMF522(PCD_TRANSCEIVE,ucComMF522Buf,9,ucComMF522Buf,&unLen);if ((status == MI_OK) && (unLen == 0x18)){ status = MI_OK; }else{ status = MI_ERR; }return status;}///////////////////////////////////////////////////////////////////////功能:验证卡片密码//参数说明: auth_mode[IN]: 密码验证模式// 0x60 = 验证A密钥// 0x61 = 验证B密钥// addr[IN]:块地址// pKey[IN]:密码// pSnr[IN]:卡片序列号,4字节//返回: 成功返回MI_OK/////////////////////////////////////////////////////////////////////char PcdAuthState(unsigned char data auth_mode,unsigned char data addr,unsigned char *pKey,unsigned char *pSnr){char data status;unsigned int data unLen;unsigned char data i,ucComMF522Buf[MAXRLEN];ucComMF522Buf[0] = auth_mode; //验证A密钥ucComMF522Buf[1] = addr; //addr[IN]:块地址for (i=0; i<6; i++){ ucComMF522Buf[i+2] = *(pKey+i); }for (i=0; i<6; i++){ ucComMF522Buf[i+8] = *(pSnr+i); }// memcpy(&ucComMF522Buf[2], pKey, 6);// memcpy(&ucComMF522Buf[8], pSnr, 4);status = PcdComMF522(PCD_AUTHENT,ucComMF522Buf,12,ucComMF522Buf,&unLen);if ((status != MI_OK) || (!(ReadRawRC(Status2Reg) & 0x08))){ status = MI_ERR; }return status;///////////////////////////////////////////////////////////////////////功能:读取M1卡一块数据//参数说明: addr[IN]:块地址// pData[OUT]:读出的数据,16字节//返回: 成功返回MI_OK/////////////////////////////////////////////////////////////////////char PcdRead(unsigned char data addr,unsigned char *pData){char data status;unsigned int data unLen;unsigned char data i,ucComMF522Buf[MAXRLEN];ucComMF522Buf[0] = PICC_READ;ucComMF522Buf[1] = addr;CalulateCRC(ucComMF522Buf,2,&ucComMF522Buf[2]);status = PcdComMF522(PCD_TRANSCEIVE,ucComMF522Buf,4,ucComMF522Buf,&unLen);if ((status == MI_OK) && (unLen == 0x90))// { memcpy(pData, ucComMF522Buf, 16); }{for (i=0; i<16; i++){ *(pData+i) = ucComMF522Buf[i]; }}else{ status = MI_ERR; }return status;}///////////////////////////////////////////////////////////////////////功能:写数据到M1卡一块//参数说明: addr[IN]:块地址// pData[IN]:写入的数据,16字节//返回: 成功返回MI_OK/////////////////////////////////////////////////////////////////////char PcdWrite(unsigned char data addr,unsigned char *pData){char data status;unsigned int data unLen;unsigned char data i,ucComMF522Buf[MAXRLEN];ucComMF522Buf[1] = addr;CalulateCRC(ucComMF522Buf,2,&ucComMF522Buf[2]);status = PcdComMF522(PCD_TRANSCEIVE,ucComMF522Buf,4,ucComMF522Buf,&unLen);if ((status != MI_OK) || (unLen != 4) || ((ucComMF522Buf[0] & 0x0F) != 0x0A)){ status = MI_ERR; }if (status == MI_OK){//memcpy(ucComMF522Buf, pData, 16);for (i=0; i<16; i++){ucComMF522Buf[i] = *(pData+i);}CalulateCRC(ucComMF522Buf,16,&ucComMF522Buf[16]);status = PcdComMF522(PCD_TRANSCEIVE,ucComMF522Buf,18,ucComMF522Buf,&unLen);if ((status != MI_OK) || (unLen != 4) || ((ucComMF522Buf[0] & 0x0F) != 0x0A)){ status = MI_ERR; }}return status;}///////////////////////////////////////////////////////////////////////功能:命令卡片进入休眠状态//返回: 成功返回MI_OK/////////////////////////////////////////////////////////////////////char PcdHalt(void){char data status;unsigned int data unLen;unsigned char data ucComMF522Buf[MAXRLEN];ucComMF522Buf[0] = PICC_HALT;ucComMF522Buf[1] = 0;CalulateCRC(ucComMF522Buf,2,&ucComMF522Buf[2]);status = PcdComMF522(PCD_TRANSCEIVE,ucComMF522Buf,4,ucComMF522Buf,&unLen);return MI_OK;}///////////////////////////////////////////////////////////////////////用MF522计算CRC16函数/////////////////////////////////////////////////////////////////////void CalulateCRC(unsigned char *pIndata,unsigned char data len,unsigned char *pOutData){unsigned char data i,n;ClearBitMask(DivIrqReg,0x04);WriteRawRC(CommandReg,PCD_IDLE); //取消当前命令SetBitMask(FIFOLevelReg,0x80);//FlushBuffer 清除ErrReg 的标志位for (i=0; i<len; i++){ WriteRawRC(FIFODataReg, *(pIndata+i)); }WriteRawRC(CommandReg, PCD_CALCCRC);i = 0xFF;do{n = ReadRawRC(DivIrqReg);i--;}while ((i!=0) && !(n&0x04)); //当CRCIRq 所有数据被处理完毕该位置位pOutData[0] = ReadRawRC(CRCResultRegL); //显示计算出来的CRC值pOutData[1] = ReadRawRC(CRCResultRegM);}///////////////////////////////////////////////////////////////////////功能:复位RC522//返回: 成功返回MI_OK/////////////////////////////////////////////////////////////////////char PcdReset(void){//PORTD|=(1<<RC522RST);SET_RC522RST;delay_ns(10);//PORTD&=~(1<<RC522RST);CLR_RC522RST;delay_ns(10);//PORTD|=(1<<RC522RST);SET_RC522RST;delay_ns(10);WriteRawRC(CommandReg,PCD_RESETPHASE);//#define PCD_RESETPHASE 0x0F //复位WriteRawRC(ModeReg,0x3D); //和Mifare卡通讯,CRC初始值0x6363 WriteRawRC(TReloadRegL,30); //定时器的低8位数据,WriteRawRC(TReloadRegH,0); //定时器的高8位数据,WriteRawRC(TModeReg,0x8D); //定时器模式寄存器,定时器减值计数WriteRawRC(TPrescalerReg,0x3E); //实际值是OXD3E 这部分主要是设置定时器寄存器,##############WriteRawRC(TxAutoReg,0x40);//必须要,设置逻辑1,强制100%ASK调制return MI_OK;}////////////////////////////////////////////////////////////////////////设置RC522的工作方式//////////////////////////////////////////////////////////////////////char M500PcdConfigISOType(unsigned char data type){if (type == 'A') //ISO14443_A{ClearBitMask(Status2Reg,0x08); //状态2寄存器WriteRawRC(ModeReg,0x3D);//3F //和Mifare卡通讯,CRC初始值0x6363WriteRawRC(RxSelReg,0x86);//84 选择内部接收器设置,内部模拟部分调制信号,发送数据后,延迟6个位时钟,接收WriteRawRC(RFCfgReg,0x7F); //4F 配置接收器48dB最大增益WriteRawRC(TReloadRegL,30);//tmoLength);// TReloadVal = 'h6a =tmoLength(dec)WriteRawRC(TReloadRegH,0); //实际值是OXD3E 这部分主要是设置定时器寄存器,##############WriteRawRC(TModeReg,0x8D);WriteRawRC(TPrescalerReg,0x3E);delay_ns(1000);PcdAntennaOn();}else{ return -1; }return MI_OK;}///////////////////////////////////////////////////////////////////////功能:读RC522寄存器//参数说明:Address[IN]:寄存器地址//返回:读出的值/////////////////////////////////////////////////////////////////////unsigned char ReadRawRC(unsigned char data Address){unsigned char data ucResult=0;CLR_SPI_CS;ucAddr = ((Address<<1)&0x7E)|0x80;//变化成有效的地址形式,最低位为0,最高位为1时候是,从MFRC522读出数据,参考39页SPIWriteByte(ucAddr);ucResult=SPIReadByte();SET_SPI_CS;return ucResult;}///////////////////////////////////////////////////////////////////////功能:写RC632寄存器//参数说明:Address[IN]:寄存器地址// value[IN]:写入的值/////////////////////////////////////////////////////////////////////void WriteRawRC(unsigned char data Address, unsigned char data value){unsigned char data ucAddr;CLR_SPI_CS;ucAddr = ((Address<<1)&0x7E);//变化成有效的地址形式,最低为为0,最高位为1时候是,写入MFRC522数据SPIWriteByte(ucAddr);SPIWriteByte(value);SET_SPI_CS;}///////////////////////////////////////////////////////////////////////功能:置RC522寄存器位//参数说明:reg[IN]:寄存器地址// mask[IN]:置位值/////////////////////////////////////////////////////////////////////void SetBitMask(unsigned char data reg,unsigned char data mask){char data tmp = 0x0;tmp = ReadRawRC(reg);WriteRawRC(reg,tmp | mask); // set bit mask}///////////////////////////////////////////////////////////////////////功能:清RC522寄存器位//参数说明:reg[IN]:寄存器地址// mask[IN]:清位值/////////////////////////////////////////////////////////////////////void ClearBitMask(unsigned char data reg,unsigned char data mask) {char data tmp = 0x0;tmp = ReadRawRC(reg);WriteRawRC(reg, tmp & ~mask); // clear bit mask}///////////////////////////////////////////////////////////////////////功能:通过RC522和ISO14443卡通讯//参数说明:Command[IN]:RC522命令字// pInData[IN]:通过RC522发送到卡片的数据// InLenByte[IN]:发送数据的字节长度// pOutData[OUT]:接收到的卡片返回数据// *pOutLenBit[OUT]:返回数据的位长度/////////////////////////////////////////////////////////////////////char PcdComMF522(unsigned char data Command,unsigned char *pInData,unsigned char data InLenByte,unsigned char *pOutData,unsigned int *pOutLenBit){char data status = MI_ERR;unsigned char data irqEn = 0x00;unsigned char data waitFor = 0x00;unsigned char data lastBits;unsigned char data n;unsigned int data 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);//清除FIFO中的读写指针for (i=0; i<InLenByte; i++){ WriteRawRC(FIFODataReg, pInData[i]); }//写寻卡命令WriteRawRC(CommandReg, Command);//发送并接收数据if (Command == PCD_TRANSCEIVE){ SetBitMask(BitFramingReg,0x80); }//相当于启动发送STARTSENG//i = 600;//根据时钟频率调整,操作M1卡最大等待时间25msi = 2000;do{n = ReadRawRC(ComIrqReg);i--;}while ((i!=0) && !(n&0x01) && !(n&waitFor));ClearBitMask(BitFramingReg,0x80);//相当于清除发送STARTSENGif (i!=0)//定时时间到,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 nowWriteRawRC(CommandReg,PCD_IDLE);return status;}///////////////////////////////////////////////////////////////////////开启天线//每次启动或关闭天险发射之间应至少有1ms的间隔/////////////////////////////////////////////////////////////////////void PcdAntennaOn(void){unsigned char data i;i = ReadRawRC(TxControlReg);if (!(i & 0x03)){SetBitMask(TxControlReg, 0x03); //tx12RFEN==11; ,打开发射管脚}}///////////////////////////////////////////////////////////////////////关闭天线/////////////////////////////////////////////////////////////////////void PcdAntennaOff(void){ClearBitMask(TxControlReg, 0x03); //tx12RFEN==00; ,禁止发射管脚}。
基于RC522课程设计报告
射频识别课程设计专业班级:姓名:学号:负责:成绩:_________姓名:学号:负责:成绩:________姓名:学号:负责:成绩: ________芯片型号:MF RC522目录第1章绪论....................................................................... 错误!未定义书签。
1.1 选题背景及意义.................................................. 错误!未定义书签。
1.2 国内外发展现状.................................................. 错误!未定义书签。
1.3 任务分析.............................................................. 错误!未定义书签。
第2章系统关键技术....................................................... 错误!未定义书签。
2.1 射频识别技术...................................................... 错误!未定义书签。
2.1.1 射频识别技术的系统组成 ....................... 错误!未定义书签。
2.1.2 射频识别技术的电磁基础 ....................... 错误!未定义书签。
2.1.3 射频识别技术的工作流程 ....................... 错误!未定义书签。
2.1.4 天线........................................................... 错误!未定义书签。
2.2 非接触式IC卡的存储 ........................................ 错误!未定义书签。
MFRC522引脚功能
MFRC522引脚功能引脚序号及名称类型1 I2C I2 PVDD P3 DVDD P4 DVSS G5 PVSS G6 NRSTPD I7 MFIN I8 MFOUT O9 SVDD P10 TVSS G11 TX1O12 TVDD P13 TX2O14 TVSS G15 AVDD P16 VMID P17 RX I18 AVSS G19 AUX1O20 AUX2O21 OSCIN I22 OSCOUT O23 IRQ O24 SDA I/ONSS IRX I25 D1I/OADR_5I/O26 D2I/OADR_4I27 D3I/OADR_3I28 D4I/OADR_2I29 D5I/OADR_1ISCK IDTRQ O30 D6I/OADR_0IMOSI I/OMX O31 D7I/OSCL I/OMISO I/OTX O32 EA IMFRC522各名称和引脚功能功能1I2C-bus enable inputpin power supplydigital power supplydigital groundpin power supply groundreset and power-down input:power-down: enabled when LOW; internal current sinks are switched off, the oscillatorreset: enabled by a positive edgeMIFARE signal inputMIFARE signal outputMFIN and MFOUT pin power supplytransmitter output stage 1 groundtransmitter 1 modulated 13.56 MHz energy carrier outputtransmitter power supply: supplies the output stage of transmitters 1 and 2transmitter 2 modulated 13.56 MHz energy carrier outputtransmitter output stage 2 groundanalog power supplyinternal reference voltageRF signal inputanalog groundauxiliary outputs for test purposesauxiliary outputs for test purposescrystal oscillator inverting amplifier input; also the input for an externally generated clo crystal oscillator inverting amplifier outputinterrupt request output: indicates an interrupt eveI2C-bus serial data line input/outputSPI signal inputUART address inputtest portI2C-bus address 5 inputtest portI2C-bus address 4 inputtest portI2C-bus address 3 inputtest portI2C-bus address 2 inputtest portI2C-bus address 1 inputSPI serial clock inputUART request to send output to microcontrollertest portI2C-bus address 0 inputSPI master out, slave inUART output to microcontrollertest portI2C-bus clock input/outputSPI master in, slave outUART data output to microcontrollerexternal address input for coding I2C-bus address中文I2C 总线输入电源输入引脚数字电源供电数字电源地电源地引脚复位和低电位输入:低电位是0或者下降沿;复位由一个正边沿来触发;非接触式读卡器信号输入非接触式读卡器信号输出MFIN and MFOUT脚供电发射机1接地端13.56赫兹发射机1调制的能源载体输出电源供应器输出阶段:供应变送器的1和2的输出级13.56赫兹发射机2调制的能源载体输出发射机2的接地端模拟电源供电内部的参考电压的能源载体输出射频信号输入模拟电源地辅助输出1辅助输出2反向放大器的输入;晶体振荡器输入一个外部时钟晶体振荡器反向放大器输出中断请求输出: 表示一个中断事件I2C串行数据总线输入/输出SPI 数据线输入UART地址输入测试端口I2C总线第5输入地址测试端口I2C总线第4输入地址测试端口I2C总线第3输入地址测试端口I2C总线第2输入地址测试端口I2C总线第1输入地址SPI串行时钟输入请求发送UART输出到单片机测试端口I2C总线第0输入地址SPI主出从进单片机通用异步收发机输出测试端口I2C总线时钟输入/输出SPI主进从出通用异步收发机数据输出到单片机外部地址编码I2C总线输入地址。
RC522速成教程
RC522速成教程材料清单:1. Arduino开发板2.RC522模块3.面包板4.杜邦线(若干)步骤1:连接电路将RC522模块连接到Arduino开发板。
将模块的SDA引脚连接到Arduino的数字引脚10,SCK引脚连接到数字引脚13,MOSI引脚连接到数字引脚11,MISO引脚连接到数字引脚12,RST引脚连接到数字引脚9、同时,将模块的VCC引脚连接到Arduino的3.3V引脚,GND引脚连接到GND引脚。
步骤2:安装MFRC522库在Arduino IDE中打开"库管理器",并安装"MFRC522"库。
这个库为我们提供了一些函数,可以方便地与RC522模块进行通信。
步骤3:编写代码```c++#include <SPI.h>#include <MFRC522.h>#define RST_PIN 9#define SS_PIN 10MFRC522 mfrc522(SS_PIN, RST_PIN);void setuSerial.begin(9600);SPI.begin(;mfrc522.PCD_Init(;Serial.println("Scan RFID tag...");void looif (mfrc522.PICC_IsNewCardPresent( &&mfrc522.PICC_ReadCardSerial()Serial.print("UID Tag :");for (byte i = 0; i < mfrc522.uid.size; ++i)Serial.print(mfrc522.uid.uidByte[i] < 0x10 ? " 0" : " ");Serial.print(mfrc522.uid.uidByte[i], HEX);}Serial.println(;mfrc522.PICC_HaltA(;}```步骤4:上传代码并测试注意事项:- 请确保您的电路连接正确,确保模块的SDA、SCK、MOSI、MISO、RST引脚正确连接到了Arduino开发板上。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
13.56M读卡器开发详解一
1.介绍开发方案
13.56读写芯片: MFRC522芯片(NXP)
QFN封装
MCU: STC11F05E
sop20封装
通信端口: MAX3232ese
sop16封装
天线类型: PCB板载
2.硬件介绍
2.1MFRC522硬件
在每次上电或硬件复位后,MF RC522也复位其接口模式并检测当前微处理器的接口类型。
MF RC522 在复位阶段后根据控制脚的逻辑电平识别微处理器接口。这是由固定管脚连接的
组合和一个专门的初始化程序实现的。
表2.1 检测接口类型的连接配置
注:L为低电平----本设计接地
H为高电平----本设计接3.3V
RC522硬件设计单元原理图
1. I2C端口接为低电平,小编想用单片机的SPI通信和串口控制RC522
2. EA端口设计为高低电平切换方式,就是想进行串口和SPI口通信切换
3. 设计的电容、电阻、电感都是已经调试成功的值。
调试注意:
1.晶振电容值与晶振匹配值设计,此处需要根据晶振厂家的资料进行电容匹配。
2.VDD电源处电容需要注意,最好用示波器观察电源纹波值大小,如果有纹波建议更换大
电容。
2.2 STC11F05E硬件
STC11F05E单元原理图
调试注意:
1.晶振电容值与晶振匹配值设计,此处需要根据晶振厂家的资料进行电容匹配。
2.VCC电源处电容需要注意,最好用示波器观察电源纹波值大小,如果有纹波建议更换大
电容或增加0.1UF电容。
3.RST复位端口电容电阻值设计,本设计为4.1V电压复位。故R30电阻10K,C31电容2.2UF
4.P1.0和P1.1 起初烧写程序时需要接低。
2.3MAX3232ESE设计
注意:此原理图的5个电容值不要随意更改,详细请看数据手册
2.4 PCB图片介绍
13.56 PCB天线PCB图片
1. 13.56M 频率的天线是通过产生磁场来读卡的。所以影响此天线的主要因素是天线的电
感值。故 天线的长度对电感值影响比较大。
2. 天线的底层不能进行腹铜。
天线附近腹铜,应该和数字电路腹铜分开。
1.降低了天线磁场对电路的影响。
2.避免数字信号对天线的干扰。