0

我最近为我的 arduino Uno 板购买了 NFC shield v1.0。我尝试了种子工作室 wiki 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 是正确的,所以我假设另一个论点一定是把事情搞砸了。我正在使用 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);
}
4

2 回答 2

1

您正在使用 MIFARE Classic 身份验证功能对 MIFARE Ultralight C 芯片进行身份验证。由于两种芯片使用完全不同的身份验证方法,因此这是行不通的。

于 2012-05-13T21:44:11.927 回答
0

您无需对超轻 NFC 标签的写入/读取进行身份验证。我遇到了同样的问题。

来自种子工作室或任何其他地方的库的问题在于它们仅支持读取超轻标签。

我试图“强制”写入标签,但没有成功,因为库中不存在该函数。您写入 Classic Mifare 上的扇区/块,但您需要写入超轻标签中​​的页面。您需要在 NFC.H/NFC.PP 中创建该函数,以便您可以写入超轻页面。

检查 NFC Ultralight 标签的结构,每页中的小块 http://www.sonmicro.com/en/downloads/Mifare/um_sm130_a2.pdf

于 2013-12-12T04:58:26.967 回答