проблемы с RFID отладкой на MEGA2560 - не меняет UID

Andrey2020
Offline
Зарегистрирован: 09.07.2020

Доброго дня всем. Приобрёл стандартный комплект MEGA2560

Решил поиграться с RFID. В комплекте считыватель и стандартная программка для изменения UID

Результат - карту читает но UID не меняет пишет ошибка. купил отдельно разных Mifare ключей чистых и продавцу сказал что мне надо с изменяемым UID. Всё равно таже ошибка.

Помогите.

Ниже сообщения и программа:

 

 

Сообщения из порта:

Warning: this example overwrites the UID of your UID changeable card, use with care!

Card UID: AD F9 8C 02

Card did not respond to 0x40 after HALT command. Are you sure it is a UID changeable one?

Error name: A buffer is not big enough.

Activating the UID backdoor failed.

New UID and contents:

Card UID: AD F9 8C 02

Card SAK: 08

PICC type: MIFARE 1KB

Sector Block   0  1  2  3   4  5  6  7   8  9 10 11  12 13 14 15  AccessBits

  15     63   00 00 00 00  00 00 FF 07  80 69 FF FF  FF FF FF FF  [ 0 0 1 ] 

         62   00 00 00 00  00 00 00 00  00 00 00 00  00 00 00 00  [ 0 0 0 ] 

……

Программа:

#include <SPI.h>

#include <MFRC522.h>

 

#define RST_PIN   8     // Configurable, see typical pin layout above

#define SS_PIN    53    // Configurable, see typical pin layout above

 

MFRC522 mfrc522(SS_PIN, RST_PIN);   // Create MFRC522 instance

 

/* Set your new UID here! */

#define NEW_UID {0xDE, 0xAD, 0xBE, 0xEF}

 

MFRC522::MIFARE_Key key;

 

void setup() {

  Serial.begin(9600);  // Initialize serial communications with the PC

  while (!Serial);     // Do nothing if no serial port is opened (added for Arduinos based on ATMEGA32U4)

  SPI.begin();         // Init SPI bus

  mfrc522.PCD_Init();  // Init MFRC522 card

  Serial.println(F("Warning: this example overwrites the UID of your UID changeable card, use with care!"));

  

  // Prepare key - all keys are set to FFFFFFFFFFFFh at chip delivery from the factory.

  for (byte i = 0; i < 6; i++) {

    key.keyByte[i] = 0xFF;

  }

}

 

// Setting the UID can be as simple as this:

//void loop() {

//  byte newUid[] = NEW_UID;

//  if ( mfrc522.MIFARE_SetUid(newUid, (byte)4, true) ) {

//    Serial.println("Wrote new UID to card.");

//  }

//  delay(1000);

//}

 

// But of course this is a more proper approach

void loop() {

  

  // Look for new cards, and select one if present

  if ( ! mfrc522.PICC_IsNewCardPresent() || ! mfrc522.PICC_ReadCardSerial() ) {

    delay(50);

    return;

  }

  

  // Now a card is selected. The UID and SAK is in mfrc522.uid.

  

  // Dump UID

  Serial.print(F("Card 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.println();

 

  // Dump PICC type

//  MFRC522::PICC_Type piccType = mfrc522.PICC_GetType(mfrc522.uid.sak);

//  Serial.print(F("PICC type: "));

//  Serial.print(mfrc522.PICC_GetTypeName(piccType));

//  Serial.print(F(" (SAK "));

//  Serial.print(mfrc522.uid.sak);

//  Serial.print(")\r\n");

//  if (  piccType != MFRC522::PICC_TYPE_MIFARE_MINI 

//    &&  piccType != MFRC522::PICC_TYPE_MIFARE_1K

//    &&  piccType != MFRC522::PICC_TYPE_MIFARE_4K) {

//    Serial.println(F("This sample only works with MIFARE Classic cards."));

//    return;

//  }

  

  // Set new UID

  byte newUid[] = NEW_UID;

  if ( mfrc522.MIFARE_SetUid(newUid, (byte)4, true) ) {

    Serial.println(F("Wrote new UID to card."));

  }

  

  // Halt PICC and re-select it so DumpToSerial doesn't get confused

  mfrc522.PICC_HaltA();

  if ( ! mfrc522.PICC_IsNewCardPresent() || ! mfrc522.PICC_ReadCardSerial() ) {

    return;

  }

  

  // Dump the new memory contents

  Serial.println(F("New UID and contents:"));

  mfrc522.PICC_DumpToSerial(&(mfrc522.uid));

  

  delay(2000);

}

 

b707
Offline
Зарегистрирован: 26.05.2017

во-первых, вставьте код по правилам.

А во-вторых - вы точно знаете что карточка у вас перезаписываемая?