我最近为我的arduino Uno板获得了NFC屏蔽v1.0。我尝试了种子工作室维基http://www.seeedstudio.com/wiki/index.php?title=NFC_Shield提供的一些入门代码。在多次尝试阅读或编写一套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是正确的,所以我假设另一个参数必须是绊倒的。我正在使用密钥[] = {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);
}
答案 0 :(得分:1)
您正在使用MIFARE Classic身份验证功能与MIFARE Ultralight C芯片进行身份验证。由于这两种芯片使用完全不同的身份验证方法,因此无法使用。
答案 1 :(得分:0)
您不需要验证超轻NFC标签的写入/读取。我遇到了同样的问题。
来自seedstudio或任何其他地方的图书馆的问题是他们只支持阅读超轻型标签。
我试图强迫"写入标记没有成功,因为该函数不存在于库中。您在Classic Mifare上写入扇区/块,但您需要在超轻标签中写入Pages。您需要在NFC.H / NFC.PP中制作该功能,以便您可以写入超轻页面。
检查NFC Ultralight标签的结构,每页中的较小块 http://www.sonmicro.com/en/downloads/Mifare/um_sm130_a2.pdf