2012-05-13 3 views
0

최근 Arduino Uno 보드 용 NFC shield v1.0을 받았습니다. 씨앗의 스튜디오 위키 http://www.seeedstudio.com/wiki/index.php?title=NFC_Shield에서 제공하는 초기 코드 중 일부를 시도했습니다. Mifare Ultralight C 세트를 읽거나 쓰려고 여러 번 시도한 후 문제가 무엇인지 한 줄씩 살펴 보려고했습니다. 나는 더 많거나 적은이 라인을 좁혀 :NFC MIFARE 초경량 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); 
} 

답변

1

MIFARE Ultralight C 칩으로 인증 할 때 MIFARE Classic 인증 기능을 사용하고 있습니다. 두 종류의 칩은 완전히 다른 인증 방법을 사용하기 때문에 작동하지 않습니다.

+0

에서 작은 블록 답을 본 후, 나는 약간 혼란스러워했다 (일반적으로 arduino nfc-shield wiki에 명시된 바와 같이 http://www.seeedstudio.com/wiki/index.php?title=NFC_Shield). 호기심에서, 저는 libfreefare 프로젝트의 mifare_ultralight.c를 들여다 보았습니다. libfreefare 프로젝트가 arduino nfc shield와 함께 작동하지 않기 때문에, MIFARE ultralightC를 지원하기 위해 PN532 라이브러리를 조정하는 방법에 대한 조언은 무엇입니까? 그런 멍청한 녀석 인 것을 유감스럽게 생각한다 : ( – sybohy

+0

흠, 죄송합니다. 사실 이걸 먼저 살펴 보겠습니다. https://github.com/adafruit/Adafruit-PN532 – sybohy

0

초경량 NFC 태그의 쓰기/읽기를 인증 할 필요가 없습니다. 나는 똑같은 문제를 겪고 있었다.

seedstudio 또는 다른 장소의 라이브러리와 관련된 문제점은 초경량 태그를 읽는 것만 지원한다는 것입니다.

라이브러리에 함수가 없기 때문에 태그에 쓰기를 "강제로"시도했지만 성공하지 못했습니다. Classic Mifare의 섹터/블록에 쓰지만 초경량 태그의 Pages에 쓰면됩니다. 초경량 페이지에 쓸 수 있도록 NFC.H/NFC.PP 내의 기능을 만들어야합니다. 내 가정이 PN532 라이브러리 인증의 모든 MIFARE 유형을 처리 할 것이라고했습니다 때문에 NFC 초경량 태그의 구조가 얼마나

확인, 각 페이지 http://www.sonmicro.com/en/downloads/Mifare/um_sm130_a2.pdf