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,说明通信成功。

到此时,我开始怀疑卡不是空白卡,已经修改过密码了。

 

只能暂时放在一边,等下次购买材料时重新买一张卡,再来测试一下,是卡的原因还是程序原因,也有可能是模块本身原因。

 

版权声明:本文为wuqudelinghun原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/wuqudelinghun/p/10266410.html