RC522 射频读卡器模块(MINI型)

2022-09-06 10:03:10 浏览数 (1)

大家好,又见面了,我是你们的朋友全栈君。

一、硬件:

二、[主芯片介绍] 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、IIC或串行UART模式之一,有利于减少连线,缩小PCB板体积,降低成本。

三、[WMFRC522模块介绍] WMFRC522模块采用Philips MFRC522原装芯片设计读卡电路,使用方便,成本低廉,适用于设备开发、读卡器开发等高级应用的用户、需要进行射频卡终端设计/生产的用户。本模块可直接装入各种读卡器模具。模块采用电压为3.3V,通过SPI接口简单的几条线就可以直接与用户任何CPU主板相连接通信,可以保证模块稳定可靠的工作、读卡距离远; 注:模块接口座可以按客户需求更改:

目前提供UART TTL、RX232和RS485三种接口

1、RC522接口芯片电路

2、通信电路

3、PCB效果

4、焊接完后的效果图:

4、固件:

/******************************************************************************** * @Brief : 测试522读写M1卡, 完成操作后PC6的LED闪烁一下,并打印到USART2上 * @Param : None * @Retval : None */ u8 MFRC522Test(void) { u8 i; static u8 WriteFlag; u8 CardType[2], CardSN[4]; //0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 u8 DefaultData[16] = {0xff,0xff,0xff,0xff,0x00,0x00,0x00,0x00,0xff,0xff,0xff,0xff,0x01,0xFE,0x01,0xFE}; u8 DefaultKey[6] = {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF}; u8 DataD[4] = {0,0,0,0×01}; u8 BlockData[16];

LED0_OFF(); BEEP_OFF(); if(MI_OK != PcdRequest(PICC_REQALL, CardType)) //扫描卡 { printf(“IC Card Type: %xn”, *((u16 *)CardType)); return 1; } if(MI_OK != PcdAnticoll(CardSN)) //防冲撞 { printf(” IC Card SN: %xn”, *((u32 *)CardSN)); return 2; }

if(MI_OK != PcdSelect(CardSN)) //选定卡片 return 3; if(MI_OK != PcdAuthState(PICC_AUTHENT1A, 1, DefaultKey, CardSN))//验证卡片密码 return 4; if(MI_OK != PcdRead(1, BlockData)) //读块 return 5; for(i = 0; i < 4; i ) printf(“%x”, BlockData[i]); if(!WriteFlag) { if(MI_OK != PcdWrite(1, DefaultData)) //写块 return 6; WriteFlag = 1; printf(“First Write Valuen”); } if(MI_OK != PcdValue(PICC_DECREMENT, 1, DataD)) //扣款 return 7; if(MI_OK != PcdRead(1, BlockData)) //读块 return 8; printf(“IC Card Type: %xn”, *((u16 *)CardType)); printf(” IC Card SN: %xn”, *((u32 *)CardSN)); printf(“Select Card!n”); printf(“Check Pass Word Ok!n”); printf(“Data Value decrease!n”);

for(i = 0; i < 4; i ) printf(“%x”, BlockData[i]); printf(“n”); LED0_ON(); BEEP_ON();

return 0; }

发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/154561.html原文链接:https://javaforall.cn

0 人点赞