2016-09-12 13 views
1

Arduino Uno를 사용하여 SL018 방패가있는 MIFARE 카드에서 특정 블록을 읽으려고합니다. 그것을 쓰는 것은 아무런 문제가되지 않지만, 저와 반 친구가 작업하고있는 프로젝트에서 우리는 입력을 읽을 수 있어야합니다 (심지어 0이나 1로도 충분할 것입니다).SL018을 사용하여 MIFARE의 특정 블록에서 바이트를 읽을 수 없습니다.

이 코드에 라이브러리를 사용하여 우리가 온라인으로 볼 수있는 코드는 우리가 온 :

/** 
* Arduino to SL018/SL030 wiring: 
* A4/SDA  2  3 
* A5/SCL  3  4 
* 5V   4  - 
* GND  5  6 
* 3V3  -  1 
*/ 

#include <Wire.h> 
#include <SL018.h> 

byte block = 0x01; 

SL018 rfid; 

void setup() 
{ 
    Wire.begin(); 
    Serial.begin(19200); 

    // prompt for tag 
    Serial.println("Show me your tag"); 
} 

void loop() 
{ 
    rfid.seekTag(); 

    while(!rfid.available()); 

    Serial.print("Block "); 
    printHex(block); 
    Serial.print(": "); 
    printArrayHex(rfid.getBlock(), 16); 
    Serial.print(" "); 
    printArrayAscii(rfid.getBlock(), 16); 
    Serial.println(); 
} 

사람이 우리가 예를 들면, 코드의 특정 부분을 읽을 수있는 방법을 알고 있나요, 블록 1을?

답변

0

SL018 라이브러리의 example code을 살펴보십시오. 코드의 사용자 인터페이스를 직렬 터미널과 함께 사용할 수 있습니다. 당신이 태그를 읽고 싶은 경우, 기계류 부품이 case 'R': (읽기 부문) 당신의 블록을 정의한 후 라인 (111)

action = READ; 
// specify what to read 
block = 0; 
numBlocks = 16; 
// tag has to be selected first 
rfid.selectTag(); 

에, 당신은 그것을 읽을 수 있습니다.

0

블록을 참조하고 printArrayHex()에 대한 호출에서 블록이 16 바이트로 구성된다고 가정하면 MIFARE 카드를 읽는 것으로 가정합니다.

먼저 태그를 기다릴 것이다 : 당신은 당신이 읽고 싶은 분야에 대해 인증 할 수

rfid.seekTag(); 
while (!rfid.available()); 

. 예를 들어 블록 번호 5 (섹터 1에 있음)를 읽으려면 섹터 1을 인증합니다.이 섹터의 ​​키 A가 기본값 (FF FF FF FF FF FF)으로 설정되고 블록 5에 대한 읽기 액세스가 가능하다고 가정하면 사용 : 당신은 MIFARE 클래식 1K 카드의 전체 메모리를 읽으려면,

rfid.readBlock(5); 
Serial.print("Block 5: "); 
printArrayHex(rfid.getBlock(), 16); 
Serial.println(); 

또는 (모든 블록이 있다고 가정 : 마지막으로

byte TRANSPORT_KEY[] = {0xff, 0xff, 0xff, 0xff, 0xff, 0xff}; 

// authenticate current sector using key type A and the key TRANSPORT_KEY 
rfid.authenticate(1, 0xAA, TRANSPORT_KEY); 

, 당신은 블록 (5)에서 데이터를 읽을 수 있습니다 키 A를 TRANSPORT_KEY 값과 함께 사용하여 읽을 수 있음) 다음과 같이 사용할 수 있습니다.

for (byte sector = 0; sector < 16; ++sector) { 
    // authenticate current sector using key type A and the key TRANSPORT_KEY 
    rfid.authenticate(sector, 0xAA, TRANSPORT_KEY); 
    for (byte block = 0; block < 4; ++block) { 
     rfid.readBlock(sector * 4 + block); 

     Serial.print("Sector "); 
     Serial.print(sector); 
     Serial.print(", Block "); 
     Serial.print(block); 
     Serial.print(": "); 
     printArrayHex(rfid.getBlock(), 16); 
     Serial.println(); 
    } 
}