2012-05-13 4 views
0

Недавно я получил щит NFC v1.0 для моей платы Arduino Uno. Я пробовал некоторые из кода стартера, предоставленного из 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)) 

Идентификатор для карты правильно, поэтому я предполагаю, другой аргумент должен быть расцепления вещи. Я использую ключи [] = {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, http://www.seeedstudio.com/wiki/index.php?title=NFC_Shield). Из любопытства я заглянул в проект mifare_ultralight.c проекта libfreefare для вдохновения, но немного подошел. Поскольку проект libfreefare не будет работать с щитом arduino nfc, у меня есть какие-либо рекомендации о том, как настроить PN532 lib для поддержки сверхлегкого MIFAREC? извините за то, что вы такой noob :( – sybohy

+0

hm, извините, я буду продолжать изучать это первым: https://github.com/adafruit/Adafruit-PN532 – sybohy

0

Вам не нужно аутентифицировать запись/чтение сверхлегкого тега NFC. У меня были те же проблемы.

Проблема с библиотекой из seedstudio или любого другого места заключается в том, что они поддерживают только чтение сверхлегких тегов.

Я попытался «принудительно» записать в тег без успеха, потому что функция не существует в библиотеке. Вы пишете секторы/блоки на классическом Mifare, но вам нужно писать на страницы в сверхлегком теге. Вам необходимо СДЕЛАТЬ функцию в NFC.H/NFC.PP, чтобы вы могли писать на сверхлегкие страницы.

Проверьте, как структура тега NFC Ultralight есть небольшие блоки в каждой странице http://www.sonmicro.com/en/downloads/Mifare/um_sm130_a2.pdf

Смежные вопросы