Я использую pn532 (SPI-связь) с библиотекой Adafruit для Arduino, чтобы изменить китайский тег с изменяемым uid.
Я могу прочитать все блоки тега, используя ключ по умолчанию. Я могу записать все блоки данных (1,2,4,5,6,8,9 ....), но Я не могу написать трейлер сектора, содержащий ключи (блоки 3, 7, 11 ... ) ни один блок 0 (содержащий UID) с использованием модуля pn532. Я могу успешно написать все блоки, используя Mifare Classi c Tool для Android.
Вот код, который я использую (блок 8 написан в этом примере). Во всех случаях (блок данных или трейлер), nfc.mifareclassic_WriteDataBlock
возвращает success=1
. Но данные действительно записываются, только если номер блока соответствует блоку данных.
uint8_t blankAccessBits[3] = { 0xff, 0x07, 0x80 };
uint8_t keya[6] = { 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF };
uint8_t keya_new[6] = { 0x48, 0x45, 0x58, 0x41, 0x43, 0x54 };
success = nfc.mifareclassic_AuthenticateBlock(uid, uidLength, 8, 0, keya);
if (success)
{
memcpy(blockBuffer, keya_new, sizeof(keya_new));
memcpy(blockBuffer + 6, blankAccessBits, sizeof(blankAccessBits));
blockBuffer[9] = 0x69;
memcpy(blockBuffer + 10, keya, sizeof(keya));
success = nfc.mifareclassic_WriteDataBlock (8, blockBuffer);
}
if (success)
{
// Data seems to have been written
Serial.println("Successfully wrote the block");
}