Có cách nào đáng tin cậy để tìm hiểu xem thẻ RFID là Mifare Ultralight hoặc Mifare Ultralight C?Phân biệt Mifare Siêu nhẹ từ Mifare Siêu nhẹ C
Cách duy nhất tôi tìm thấy cho đến nay là sử dụng sự khác biệt về kích thước của hai thẻ phát hành một lệnh đọc vượt ra ngoài ranh giới của một nhỏ hơn. Nhưng nó trông giống như một hack và tôi giả định lệnh đọc có thể thất bại nếu thẻ sử dụng cơ chế xác thực siêu nhẹ C.
const char* mifare_ultralight_identification(const nfc_target_info_t nti)
{
byte_t abtCmd[2];
byte_t abtRx[265];
size_t szRxLen;
abtCmd[0] = 0x30; // MIFARE Ultralight READ command
abtCmd[1] = 0x10; // block address (1K=0x00..0x39, 4K=0x00..0xff)
if (!nfc_initiator_transceive_dep_bytes(pnd,abtCmd,2,abtRx,&szRxLen)) {
// READ command of 0x10 failed, we consider that Ultralight does have 0x10 address, so it's a "simple" Ultralight (i.e. not a Ultralight C)
// When a READ failed, the tag returns in HALT state, so we need to reselect tag
nfc_initiator_select_passive_target(pnd, NM_ISO14443A_106, nti.nai.abtUid, nti.nai.szUidLen, NULL);
return "";
}
return " C";
}
Đó cũng là suy nghĩ thứ hai của tôi. Tuy nhiên, sử dụng một lệnh không tồn tại trên một trong số chúng vẫn là một cách giải quyết. Nhưng dường như không có cách nào sạch sẽ để làm điều đó. – mibollma
Vâng, đó là cách đáng tin cậy đơn giản nhất. –