Nano120 连接 RC522 可以用的程序

本文介绍了一个基于MFRC522模块的非接触式智能卡读取测试程序。该程序运行于特定的硬件平台,并针对复旦FM1208卡片进行了测试。文章记录了程序运行的日志,包括卡片选择、读取状态等详细信息,并对比了不同硬件平台上的测试效果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

程序所在的目录为:
CardRead\SmartCardRead\ModuleTest\MFRC522\src\nanoRC522\
对应的卡片:
复旦非接触式卡片
FM1208
UID: a3 90 4a 05

对应的板子:
这里写图片描述

有时候运行会错误,需要卡片摆放正确:
运行的log为:

abc11234---DATE: Apr  9 2018---- TIME: 16:22:33

Hello !

retA = 0x3d

retB = 0x3d

PcdRequest :


 In PcdComMF522:


 PcdComMF522: i= 199996,waitFor = 48,n= 100


 Out PcdComMF522:

PcdRequest 0x26 Status = 0,unLen= 2,[0]= 0x8,[1]= 0x0

0--0x8

1--0x0

2--0x0

3--0x0

success


 In PcdComMF522:


 PcdComMF522: i= 199994,waitFor = 48,n= 100


 Out PcdComMF522:

防冲撞state:0

Rec:a3

Rec:90

Rec:4a

Rec:5


 In PcdComMF522:


 PcdComMF522: i= 199990,waitFor = 48,n= 100


 Out PcdComMF522:

:选定卡片state:fe

 :e0

 :51

 :35

 :b4


 In PcdComMF522:


 PcdComMF522: i= 199976,waitFor = 48,n= 100


 Out PcdComMF522:

Rats :status:0,unLen:12

 :10

 :78

 :80

 :a0

 :2

 :20

 :90

 :0

 :0

 :0

 :0

 :0

 :a3

 :90

 :4a

 :5

 :39

 :4a

 rats  ############################### over!

 cpucard_select_MF*************** over!

A pack_pcb:0

B pack_pcb  :a

 :a

 :1

 :0

 :a4

 :0

 :0

 :2

 :3f

 :0


 In PcdComMF522:


 PcdComMF522: i= 199960,waitFor = 48,n= 100


 Out PcdComMF522:

 :a

 :1

 :6f

 :15

 :84

 :e

 :31

 :50

 :41

 :59

 :2e

 :53

 :59

 :53

 :2e

 :44

 :44

 :46

 :30

 :31

 :a5

 :3

 :88

 :1

 :1

 :90

 :0

 :e7

 :e1

status:0,unLen:1d

cpucard_select_MF over! status:0,unLen:1d

A pack_pcb:0

B pack_pcb  :b

 :b

 :1

 :0

 :84

 :0

 :0

 :4


 In PcdComMF522:


 PcdComMF522: i= 199960,waitFor = 48,n= 100


 Out PcdComMF522:

status:0,unLen:a

 :b

 :1

 :32

 :19

 :ca

 :77

 :90

 :0

 :d6

 :b5

该卡片在PN532上面的效果:

唤醒读卡器
00 00 FF 00 FF 00 00 00 FF 02 FE D5 15 16 00 
获取卡片ID
00 00 FF 00 FF 00 00 00 FF 1C E4 D5 4B 01 01 00 08 20 04 A3 90 4A 05 10 78 80 A0 02 20 90 00 00 00 00 00 A3 90 4A 05 54 00 
00 a4 00 00 02 3F 00
00 00 FF 00 FF 00 00 00 FF 1C E4 D5 41 00 6F 15 84 0E 31 50 41 59 2E 53 59 53 2E 44 44 46 30 31 A5 03 88 01 01 90 00 6D 00 

继续
同样的程序,用小黄板按照相同的连接方式连接:
连接方式如下:

管脚小黄板号码SPI符号颜色RC522模块符号
PC156SCK
PC255MISO
PC354MOSI
PC1073RESET
PC1172NSS

串口连接:

管脚小黄板号码符号
PB044RXD
PB145TXD

这里写图片描述

对应源码:
https://download.youkuaiyun.com/download/wowocpp/10338702

///////////////////////////////////////////////////////////////////// //功 能:寻 //参数说明: 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 ///////////////////////////////////////////////////////////////////// signed char PcdRequest(unsigned char req_code,unsigned char *pTagType) { signed 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; } ///////////////////////////////////////////////////////////////////// //功 能:防冲撞 //参数说明: pSnr[OUT]:片序列号,4字节 //返 回: 成功返回MI_OK ///////////////////////////////////////////////////////////////////// signed char PcdAnticoll(unsigned char *pSnr) { signed 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; } ///////////////////////////////////////////////////////////////////// //功 能:选定片 //参数说明: pSnr[IN]:片序列号,4字节 //返 回: 成功返回MI_OK ///////////////////////////////////////////////////////////////////// signed char PcdSelect(unsigned char *pSnr) { signed 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; } ///////////////////////////////////////////////////////////////////// //功 能:验证片密码 //参数说明: auth_mode[IN]: 密码验证模式 // 0x60 = 验证A密钥 // 0x61 = 验证B密钥 // addr[IN]:块地址 // pKey[IN]:密码 // pSnr[IN]:片序列号,4字节 //返 回: 成功返回MI_OK ///////////////////////////////////////////////////////////////////// signed char PcdAuthState(unsigned char auth_mode,unsigned char addr,unsigned char *pKey,unsigned char *pSnr) { signed char status; unsigned int unLen; unsigned char i,ucComMF522Buf[MAXRLEN]; ucComMF522Buf[0] = auth_mode; ucComMF522Buf[1] = addr; 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; }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值