C++ MFRC522 PICC响应NAK(将MFRC522 arduino库[C+;+;]移植到[C])

C++ MFRC522 PICC响应NAK(将MFRC522 arduino库[C+;+;]移植到[C]),c++,c,arduino,C++,C,Arduino,首先介绍一下。 我试图使Arduino的工作在一个用C编程的ATmega328上(我首先使用一个“正常”控制器,使它在以后的状态下在一个树莓pi上工作) 我将.h和.cpp从库复制到自己的项目中,并将.c重命名为.cpp。在删除了.h文件中的类之后,是时候使用.c文件了。我将所有“byte”语句替换为“uint8_t”,将“Serial.print”替换为printf,并对GPIO和SPI进行了更改 问题。 在犯了一些小错误之后,我终于从一张钥匙卡上得到了数据。不管它看起来如何工作,我在读卡上的

首先介绍一下。

我试图使Arduino的工作在一个用C编程的ATmega328上(我首先使用一个“正常”控制器,使它在以后的状态下在一个树莓pi上工作)

我将.h和.cpp从库复制到自己的项目中,并将.c重命名为.cpp。在删除了.h文件中的类之后,是时候使用.c文件了。我将所有“byte”语句替换为“uint8_t”,将“Serial.print”替换为printf,并对GPIO和SPI进行了更改

问题。 在犯了一些小错误之后,我终于从一张钥匙卡上得到了数据。不管它看起来如何工作,我在读卡上的第58行时出现了一个错误。错误是:

MIFARE_READ()失败:MIFARE PICC用NAK响应

我在SPI write and read中添加了一个print语句,发现了以下区别(左边是[C]版本,右边是Arduino版本):(因为我的声誉,图片可以在我在代码部分提到的BitBucket中找到)

代码 代码很长,但我做到了

我希望有人能指点我去哪里看(一些[C++]>[C]不同的解释),因为我再也不知道去哪里看了


Sander

在读写之前,您需要运行PCD_身份验证功能。链接的github库中有一些预编程的密钥,用于验证卡。我在尝试写入卡时收到了这个消息,因为我使用的是KEY_B,而不是KEY_A。您可以在GitHub页面上提供的示例中看到这个身份验证。应该是这样的

status = (MFRC522::StatusCode) mfrc522.PCD_Authenticate(MFRC522::PICC_CMD_MF_AUTH_KEY_A, trailerBlock, &key, &(mfrc522.uid));
据我所知,NAK仅仅意味着使用了错误的密钥,或者可能没有密钥