首先介绍一下。
我试图让Arduino的MFRC522 library在用C语言编程的ATmega328上工作(我首先使用一个普通的'控制器,以便稍后在树莓pi上工作州)。
我将.h和.cpp从库中复制到我自己的项目中,并将.c重命名为.cpp。删除.h文件中的类后,是.c文件的时间。我替换了所有'字节'对'uint8_t'的陈述,取代了' Serial.print'使用printf并对GPIO和SPI进行了更改。
问题。 经过一些小错误后,我终于从钥匙卡中获取了数据。然而它看起来像是工作,我从卡上读取第58行时出错。错误是:
MIFARE_READ()失败:MIFARE PICC以NAK回复。
我在SPI写入和读取时添加了一个print语句,发现了以下区别(左边是[C]版本,右边是Arduino版本):(因为我的声誉,图片可以在我在代码部分提到的BitBucket)
代码 代码很长,但我做了available on BitBucket
我希望有人可以指出我在哪里看(有些[C ++]>> [C]不同的解释),因为我不知道在哪里看。
桑德
答案 0 :(得分:0)
您需要在读取和写入之前运行PCD_Authenticate函数。链接的github库中有一些预先编程的密钥,用于验证卡。当我尝试写入卡时我得到了这个,因为我使用的是KEY_B而不是KEY_A。您可以在GitHub页面上提供的示例中看到此Authenticate。它应该看起来像这样。
status = (MFRC522::StatusCode) mfrc522.PCD_Authenticate(MFRC522::PICC_CMD_MF_AUTH_KEY_A, trailerBlock, &key, &(mfrc522.uid));
据我所知,NAK只是意味着使用了错误的密钥或者没有密钥。