点击这里找小助理0元领取:扫码进群领资料
【RC522芯片简介】

MF RC522是运用于13.56MHz非打仗式通信中高集成度的读写卡芯片,是NXP公司针对“三表”运用推出的一款低电压、低本钱、体积小的非打仗式读写卡芯片,是智能仪表和便携式手持设备研发的较好选择。 MF RC522利用了前辈的调制和解调观点,完备集成了在13.56MHz下所有类型的被动非打仗式通信办法和协议。支持14443A兼容应答器旗子暗记。数字部分处理ISO14443A帧和缺点检测。此外,还支持快速CRYPTO1加密算法,用语验证MIFARE系列产品。MFRC522支持MIFARE系列更高速的非打仗式通信,双向数据传输速率高达424kbit/s。 作为13.56MHz高集成度读写卡系列芯片家族的新成员,MF RC522与MF RC500和MF RC530有不少相似之处,同时也具备许多特点和差异。它与主机间通信采取SPI模式,有利于减少连线,缩小PCB板体积,降落本钱。

【RFID模块简介】
RC522模块采取Philips MFRC522芯片设计读卡电路,利用方便,本钱低廉,适用于设备开拓、读卡器开拓等高等运用的用户、须要进行射频卡终端设计/生产的用户。本模块可直接装入各种读卡器模具。模块采取电压为3.3V,通过SPI接口大略的几条线就可以直接与用户任何CPU主板相连接通信,可以担保模块稳定可靠的事情、读卡间隔远.
事理图如下:
PCB图如下:
以下为.h文件:
#ifndef __RC522_H#define __RC522_H#include "stm32f10x.h" ///MF522命令字/#define PCD_IDLE 0x00 //取消当前命令#define PCD_AUTHENT 0x0E //验证密钥#define PCD_RECEIVE 0x08 //吸收数据#define PCD_TRANSMIT 0x04 //发送数据#define PCD_TRANSCEIVE 0x0C //发送并吸收数据#define PCD_RESETPHASE 0x0F //复位#define PCD_CALCCRC 0x03 //CRC打算 ///Mifare_One卡片命令字/#define PICC_REQIDL 0x26 //寻天线区内未进入休眠状态#define PICC_REQALL 0x52 //寻天线区内全部卡#define PICC_ANTICOLL1 0x93 //防冲撞#define PICC_ANTICOLL2 0x95 //防冲撞#define PICC_AUTHENT1A 0x60 //验证A密钥#define PICC_AUTHENT1B 0x61 //验证B密钥#define PICC_READ 0x30 //读块#define PICC_WRITE 0xA0 //写块#define PICC_DECREMENT 0xC0 //扣款#define PICC_INCREMENT 0xC1 //充值#define PICC_RESTORE 0xC2 //调块数据到缓冲区#define PICC_TRANSFER 0xB0 //保存缓冲区中数据#define PICC_HALT 0x50 //休眠 ///MF522 FIFO长度定义/#define DEF_FIFO_LENGTH 64 //FIFO size=64byte#define MAXRLEN 18 ///MF522寄存器定义/// PAGE 0#define RFU00 0x00 #define CommandReg 0x01 #define ComIEnReg 0x02 #define DivlEnReg 0x03 #define ComIrqReg 0x04 #define DivIrqReg 0x05#define ErrorReg 0x06 #define Status1Reg 0x07 #define Status2Reg 0x08 #define FIFODataReg 0x09#define FIFOLevelReg 0x0A#define WaterLevelReg 0x0B#define ControlReg 0x0C#define BitFramingReg 0x0D#define CollReg 0x0E#define RFU0F 0x0F// PAGE 1 #define RFU10 0x10#define ModeReg 0x11#define TxModeReg 0x12#define RxModeReg 0x13#define TxControlReg 0x14#define TxAutoReg 0x15#define TxSelReg 0x16#define RxSelReg 0x17#define RxThresholdReg 0x18#define DemodReg 0x19#define RFU1A 0x1A#define RFU1B 0x1B#define MifareReg 0x1C#define RFU1D 0x1D#define RFU1E 0x1E#define SerialSpeedReg 0x1F// PAGE 2 #define RFU20 0x20 #define CRCResultRegM 0x21#define CRCResultRegL 0x22#define RFU23 0x23#define ModWidthReg 0x24#define RFU25 0x25#define RFCfgReg 0x26#define GsNReg 0x27#define CWGsCfgReg 0x28#define ModGsCfgReg 0x29#define TModeReg 0x2A#define TPrescalerReg 0x2B#define TReloadRegH 0x2C#define TReloadRegL 0x2D#define TCounterValueRegH 0x2E#define TCounterValueRegL 0x2F// PAGE 3 #define RFU30 0x30#define TestSel1Reg 0x31#define TestSel2Reg 0x32#define TestPinEnReg 0x33#define TestPinValueReg 0x34#define TestBusReg 0x35#define AutoTestReg 0x36#define VersionReg 0x37#define AnalogTestReg 0x38#define TestDAC1Reg 0x39 #define TestDAC2Reg 0x3A #define TestADCReg 0x3B #define RFU3C 0x3C #define RFU3D 0x3D #define RFU3E 0x3E #define RFU3F 0x3F ///和MF522通讯时返回的缺点代码/#define MI_OK 0#define MI_NOTAGERR (1)#define MI_ERR (2) #defineSHAQU10X01#defineKUAI40X04#defineKUAI70X07#defineREGCARD0xa1#defineCONSUME0xa2#define READCARD0xa3#define ADDMONEY0xa4 ////#define spi_cs 1;//sbit spi_ck=P0^6;//sbit spi_mosi=P0^7;//sbit spi_miso=P4^1;//sbit spi_rst=P2^7;#define SPIReadByte()SPIWriteByte(0)u8 SPIWriteByte(u8 byte);void SPI1_Init(void); #define SET_SPI_CS (GPIOF->BSRR=0X01)#define CLR_SPI_CS (GPIOF->BRR=0X01) #define SET_RC522RST GPIOF->BSRR=0X02#define CLR_RC522RST GPIOF->BRR=0X02 /RC522 函数宏定义/#define RC522_CS_Enable() GPIO_ResetBits ( GPIOB, GPIO_Pin_12 )#define RC522_CS_Disable() GPIO_SetBits ( GPIOB, GPIO_Pin_12 ) #define RC522_Reset_Enable() GPIO_ResetBits( GPIOA, GPIO_Pin_8 )#define RC522_Reset_Disable() GPIO_SetBits ( GPIOA, GPIO_Pin_8 ) #define RC522_SCK_0() GPIO_ResetBits( GPIOB, GPIO_Pin_13 )#define RC522_SCK_1() GPIO_SetBits ( GPIOB, GPIO_Pin_13 ) #define RC522_MOSI_0() GPIO_ResetBits( GPIOB, GPIO_Pin_15 )#define RC522_MOSI_1() GPIO_SetBits ( GPIOB, GPIO_Pin_15 ) #define RC522_MISO_GET() GPIO_ReadInputDataBit ( GPIOB, GPIO_Pin_14 ) void RC522_Handel (void);void RC522_Init ( void ); //初始化void PcdReset ( void ); //复位void M500PcdConfigISOType ( u8 type ); //事情办法char PcdRequest ( u8 req_code, u8 pTagType ); //寻卡char PcdAnticoll ( u8 pSnr); //读卡号 char PcdSelect ( u8 pSnr );char PcdAuthState ( u8 ucAuth_mode, u8 ucAddr, u8 pKey, u8 pSnr );char PcdWrite ( u8 ucAddr, u8 pData );char PcdRead ( u8 ucAddr, u8 pData );void ShowID(u16 x,u16 y, u8 p, u16 charColor, u16 bkColor); //显示卡的卡号,以十六进制显示 #endif
以下为主程序:
#include "rc522.h" int main(){...RC522_Init(); //初始化射频卡模块...while(1){RC522_Handel();}return 0;}
实际利用中创造的一些问题:
⑴ SPI1_Init()中的IO口初始化速率最好为2MHZ或10MHZ。50MHZ是会对通讯情形有较大影响。手册中也有提到:
2019/12/05更新:
⑵ M500PcdConfigISOType()中对RFCfgReg寄存器的配置应改为0X4F,实际测试中创造0X7F效果很差,改为0X4F后会好很多。即改为
WriteRawRC( RFCfgReg, 0x4F );
完全代码可进群免费领取!
!
!
嵌入式物联网的学习之路非常漫长,不少人由于学习路线不对或者学习内容不足专业而错失落高薪offer。不过别担心,我为大家整理了一份150多G的学习资源,基本上涵盖了嵌入式物联网学习的所有内容。点击下方链接,0元领取学习资源,让你的学习之路更加顺畅!
记得点赞、关注、收藏、转发哦!
点击这里找小助理0元领取:扫码进群领资料







