基于STM32 RFID-RC522 验证问题
RC522很早之前就拿了,一直没有用,最近放假出来来玩玩。
先说说RC522的工作流程图
前三步骤,我都没有遇到问题,到第四步骤三次互相验证时就卡住了,也在网上找个几分程序作为参考。
RC522一套标准代码(不需更改,可以直接使用)中的验证卡片密码。
A密码和B密码的初始值都是0xff,0xff,0xff,0xff,0xff,0xff。一开始不知道密码是什么,跑去看数据手册,看的一脸懵逼。其实购买时商家提供的资料里有写。
以下是我的程序:
status=PcdAuthState(PICC_AUTHENT1A,7,KEYA,ucArray_ID);
//PICC_AUTHENT1验证A密码
//7 第一扇区的第三块
//KEYA {0xff,0xff,0xff,0xff,0xff,0xff};初始值。
//ucArray_ID 卡片的ID。
返回status的MI_ERR 0Xbb,而不是MI_OK 0x26。
以下是论坛找到的一份程序,lz说可以成功的验证:
status = PcdAuthState(KEYA, (snr*4+3), DefaultKey, SelectedSnr);
//KEYA 验证A密码
//snr=1;
//DefaultKey[6] = {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF};
//SelectedSnr ID
和一位博主讨论问题时,发现扇区块的地址有两种取法(可能还会有其他的取法),可能是因为寄存器版和库版本的取法不一样,这位博主的地址是分扇区的,只能从0-2之间取,而我的是将16个扇区的64个块按绝对地址编号为0~63。这是他博客的地址:https://www.cnblogs.com/wcw12580/p/10035787.html#4162909
随后猜测是不是没有通信成功,于是调用读取寄存器函数:status=ReadRawRC(VersionReg); 通过查看MF-RC522数据手册 VersionReg 便是读取模块的版本号。如果返回的值是0X92,说明通信成功,否则通信失败。串口返回数据显示时0X92,说明通信成功。
到此时,我开始怀疑卡不是空白卡,已经修改过密码了。
只能暂时放在一边,等下次购买材料时重新买一张卡,再来测试一下,是卡的原因还是程序原因,也有可能是模块本身原因。