2012-05-13 103 views
0

我最近得到了我的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); 
} 

回答

1

您正在使用MIFARE Classic認證功能對MIFARE Ultralight C芯片進行認證。由於這兩種芯片使用完全不同的身份驗證方法,因此這不起作用。

+0

小塊看到你的答案後,我有點困惑,因爲我的假設是,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

+0

嗯,對不起,其實我會繼續研究這第一個:https://github.com/adafruit/Adafruit-PN532 – sybohy

0

您不需要驗證超低NFC標籤的寫/讀操作。我遇到了同樣的問題。

從seedstudio或任何其他地方的圖書館的問題是,他們只支持閱讀超輕標籤。

我試圖「強制」寫入標籤,但沒有成功,因爲該函數在庫中不存在。您可以寫入經典Mifare上的扇區/區塊,但需要在超低標籤中寫入頁面。您需要使用NFC.H/NFC.PP內的功能,以便您可以寫入超輕型頁面。

檢查NFC超輕標籤的結構如何,在每個頁面 http://www.sonmicro.com/en/downloads/Mifare/um_sm130_a2.pdf