Write tag UNO i modulem RC522 - Wersja do druku +- Arduino Polska Forum (https://forum.arduinopolska.pl) +-- Dział: Korzystanie z Arduino (https://forum.arduinopolska.pl/dzial-korzystanie-z-arduino) +--- Dział: Piaskownica (https://forum.arduinopolska.pl/dzial-piaskownica) +--- Wątek: Write tag UNO i modulem RC522 (/watek-write-tag-uno-i-modulem-rc522) |
Write tag UNO i modulem RC522 - RobertRW - 28-03-2024 Witam milo 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/blob/master/examples/rfid_read_personal_data/rfid_read_personal_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:ICC_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); } RE: Write tag UNO i modulem RC522 - RobertRW - 28-03-2024 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 |