Arduino Polska Forum

Pełna wersja: Write tag UNO i modulem RC522
Aktualnie przeglądasz uproszczoną wersję forum. Kliknij tutaj, by zobaczyć wersję z pełnym formatowaniem.
Witam milo Blush 
Z gory przepraszam za nieuzywanie polskich znakow. Mieszkam w Niemczech i nie znam/posiadam polskiej klawiatury.

Odnalazlem to forum przypadkowo szukajac rozwiazania problemu UNO + RFID-RC522.
Programuje Arduino od ok. trzech lat. Zaprogramowalem juz kilka projektow, nabralem z czasem pewnego doswiadczenia.
Obecnie zaczalem projekt pisania i odcztywania tagow modulem RC522 i PN532.

Polaczylem Modul z UNO zgodnie z danymi w Sketch: https://github.com/miguelbalboa/rfid/blo...l_data.ino
Orginalny Sketch (Write + Read) dziala bez problemu. Zapisane dane na pierwszym secie (UNO + RC522) (rfid_write_personal_data.ino) odczytuje bez problemu na drugim secie (rfid_read_personal_data.ino).
Po modyfikacji kodu nie dziala mi Autentyfikacja. Tag zapisany moja zmodyfikowana, skrocona wersja (write) jest na stale zablokowany. Odcztywanie jak i ponowne zapisywanie bloku nie jest dostepne z powodu MFRC522.Authenticate.

"status = mfrc522.PCD_Authenticate(MFRC522:TongueICC_CMD_MF_AUTH_KEY_A, 4, &key, &(mfrc522.uid));"

Dokladnie: po zapisaniu tagu (obojetnie w ktorym bloku), program nie akceptuje mego "key" - pomimo ze funkcja programujaca key jest orginalnie ta sama.
Variable byte bBlock jak i byte dataBlock[] zapisuje danymi bezposrednio przed kontaktem z chip.

Autoryzacja mfrc522-PCD kwitowana jest bledem: "Timeout in communication." - do czego jeszcze raz powtarzam:
blad ten wystepuje w probie ponownego kontaktu z zapisanym przeze mnie blokiem. Pierwszy zapis dziala - po zapisie nie mam juz dostepu do bloku. Problem powstaje po powyzszej funkcji: "status = mfrc522_PCD_Authenticate.......

Z gory dziejuje za uwage i mozliwa pomoc.
W przyszlosci podziele sie z wami z wdziecznoscia moim doswiadczeniem w programowaniu Arduino i ESP....

Pozdrawiam goraco, Robert

#include <SPI.h>
#include <MFRC522.h>

#define RST_PIN 9            
#define SS_PIN 10     
MFRC522 mfrc522(SS_PIN, RST_PIN);

byte bBlock;
byte dataBlock[] = {
    0x00, 0x00, 0x00, 0x00, //  0,  0,   0,  0,
    0x00, 0x00, 0x00, 0x00, //  0,  0,   0,  0,
    0x00, 0x00, 0x00, 0x00, //  0,  0,   0,  0,
    0x00, 0x00, 0x00, 0x00  //  0,  0,   0,  0
};

void vWriteChip()
{
  if (!mfrc522.PICC_IsNewCardPresent()){return;}
  if (!mfrc522.PICC_ReadCardSerial()){return;}

  digitalWrite(pinLED, HIGH);
  Serial.print(F("Chip UID:")); // Dump UID
  for (byte i = 0; i < mfrc522.uid.size; i++)
  {
    Serial.print(mfrc522.uid.uidByte[i] < 0x10 ? " 0" : " ");
    Serial.print(mfrc522.uid.uidByte[i], HEX);
  }
  Serial.print(F(" PICC Typ: ")); // Dump PICC type
  MFRC522::PICC_Type piccType = mfrc522.PICC_GetType(mfrc522.uid.sak);
  Serial.println(mfrc522.PICC_GetTypeName(piccType));  

  MFRC522::MIFARE_Key key;
  for (byte i = 0; i < 6; i++) key.keyByte[i] = 0xFF;

  MFRC522::StatusCode status;
  status = mfrc522.PCD_Authenticate(MFRC522::PICC_CMD_MF_AUTH_KEY_A, bBlock, &key, &(mfrc522.uid));
  if (status != MFRC522::STATUS_OK)
  {
    Serial.print(F("PCD_Authenticate() failed: "));
    Serial.println(mfrc522.GetStatusCodeName(status));
    delay(3000);
    digitalWrite(pinLED, LOW);
    return;
  }
  else
    Serial.println(F("PCD_Authenticate() success: "));

  status = mfrc522.MIFARE_Write(bBlock, dataBlock, 16); // Write block
  if (status != MFRC522::STATUS_OK)
  {
    Serial.print(F("MIFARE_Write() failed:"));
    Serial.println(mfrc522.GetStatusCodeName(status));
    delay(3000);
    digitalWrite(pinLED, LOW);
    return;
  }
  else
    Serial.println(F("MIFARE_Write() success:"));

  mfrc522.PICC_HaltA();
  mfrc522.PCD_StopCrypto1();
 
  // End Write
  delay(3000);
  digitalWrite(pinLED, LOW);
}

Angel 
Problem rozwiazal sie w miedzyczasie sam od siebie.
Dzisaj wyprobowalem modul ponownie, przy czym z wielkim zdziwieniem i radoscia stwerdzilem, ze moj Set i sketch dzalaja.
Nie wiem i z pewnoscia nie poznam przyczyny wczorajszych problemow. W miedzyczasie zmienilem kilka szczegolow w moim sketch - szczegolow, ktore moim zaniem nie maja wiekszego wplywu na przebieg zapisu.
Faktem jest ze:
1. siedem wczorajszych zapisow (blok 1 do 7) na chip MIFARE jest blednych. 
2. tych zapisow nie da sie juz skorygowac, chipu nie da sie takze sformatowac.
3. reszte pamieci czipa, czyli wpisy od bloku nr. 8 mozna wciagac (takze edycja tych wpisow jest bez ograniczen mozliwa)
4. prawdopodobnie nie jak przypuszczalem: key, lecz bledne wpisy blokuja zepsute bloki
5. MIFARE-karty dzialaja bez zastrzezen

Tak wiec kolejna faza mego projektu jest ukonczona, nastepnym krokiem bedzie zabezpieczenie wpisu czipa kluczem 'key'
Mam nadzieje, ze YouTube i wujek Google pomoga mi takze w tym przypadku jak najszybciej odnalezc stosowne rozwiazanie.

Zycze wszystkim szczesliwych i przede wszystkim zdrowych swiat wielkanocnych!

Pozdrawiam, Robert Blush