我最近得到了我的arduino Uno主板的NFC屏蔽v1.0。我嘗試了一些由種子工作室wiki http://www.seeedstudio.com/wiki/index.php?title=NFC_Shield提供的入門代碼。在多次嘗試閱讀或編寫一組Mifare Ultralight C之後,我開始一行一行地嘗試查看問題所在。我把範圍縮小到或多或少這一行:NFC MIFARE Ultralight C認證失敗
nfc.authenticateBlock(1 /*1 or 2*/,
id /*Card NUID*/,
10/*0 to 63*/,
KEY_A /*Either KEY_A or KEY_B */,
keys))
該卡的ID是正確的,所以我假設其他參數必須跳閘的事情了。我爲密鑰使用了keys [] = {0xff,0xff,0xff,0xff,0xff,0xff}。還有什麼可能是這個問題?我在下面列出了我的整個代碼。如果您需要更多詳細信息,請告訴我。
謝謝!
#include "PN532.h"
#define SCK 13
#define MOSI 11
#define SS 10
#define MISO 12
PN532 nfc(SCK, MISO, MOSI, SS);
void setup(void) {
Serial.begin(9600);
Serial.println("Hello!");
nfc.begin();
uint32_t versiondata = nfc.getFirmwareVersion();
if (! versiondata) {
Serial.print("Didn't find PN53x board");
while (1); // halt
}
// Got ok data, print it out!
Serial.print("Found chip PN5"); Serial.println((versiondata>>24) & 0xFF, HEX);
Serial.print("Firmware ver. "); Serial.print((versiondata>>16) & 0xFF, DEC);
Serial.print('.'); Serial.println((versiondata>>8) & 0xFF, DEC);
Serial.print("Supports "); Serial.println(versiondata & 0xFF, HEX);
// configure board to read RFID tags and cards
nfc.SAMConfig();
}
void loop(void) {
uint32_t id;
// look for MiFare type cards
id = nfc.readPassiveTargetID(PN532_MIFARE_ISO14443A);
if (id != 0)
{
Serial.print("Read card #");
Serial.println(id);
Serial.println();
uint8_t keys[]= {0xFF,0xFF,0xFF,0xFF,0xFF,0xFF}; // default key of a fresh card
if(nfc.authenticateBlock(1 /*1 or 2*/,
id /*Card NUID*/,
0x08 /*0 to 63*/,
KEY_A /*Either KEY_A or KEY_B */,
keys))
{
Serial.println("authenticated!");
}
else {
Serial.println("failed to authenticate");
}
}
delay(2000);
}
小塊看到你的答案後,我有點困惑,因爲我的假設是,PN532庫將處理所有的MIFARE類型的認證(正如Arduino nfc-shield wiki上一般所述,http://www.seeedstudio.com/wiki/index.php?title=NFC_Shield)。出於好奇,我研究了libfreefare項目的mifare_ultralight.c以獲取靈感,但是出現了一些缺點。由於libfreefare項目不適用於我擁有的arduino nfc屏蔽,有關如何調整PN532 lib以支持MIFARE ultralightC的任何建議?對不起,因爲這樣一個noob :( – sybohy
嗯,對不起,其實我會繼續研究這第一個:https://github.com/adafruit/Adafruit-PN532 – sybohy