Реализация этой команды нашлась в проекте libnfс, в утилите nfc-mfclassic.
Там есть функция get_rats, которая используется, возможно, для получения подробностей о типе карты. Судя по коду, карточке передаётся команда
E0 50
через функцию считывателя InCommunicateThru.
// настройка считывателя
>>> [ 9] 00 00 FF 03 FD D4 14 01 17
<<< [ 15] 00 00 FF 00 FF 00 00 00 FF 02 FE D5 15 16 00
// вызов функции InListPassiveTarget для поиска карточки
>>> [ 10] 00 00 FF 04 FC D4 4A 01 00 E1
<<< [ 28] 00 00 FF 00 FF 00 00 00 FF 0F F1 D5 4B 01 01 00 44 08 07 04 84 3A F2 D5 76 80 0C 00
// ответ от карты, SAK=8
(8, 7, '\x04\x84:\xf2\xd5v\x80')
// функция RATS
>>> [ 10] 00 00 FF 04 FC D4 42 E0 50 BA
// ответ от карточки, Historical bytes
<<< [ 28] 00 00 FF 00 FF 00 00 00 FF 0F F1 D5 43 00 0C 75 77 80 02 C1 05 21 30 00 77 C1 1F 00
// После RATS пробуем снова обратиться к карточке
>>> [ 10] 00 00 FF 04 FC D4 4A 01 00 E1
// Но считыватель ее не видит
<<< [ 16] 00 00 FF 00 FF 00 00 00 FF 03 FD D5 4B 00 E0 00
(0, 0, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00')
// авторизация в сектор 9003 завершается ошибкой
>>> [ 12] 00 00 FF 06 FA D4 40 01 70 03 90 E8
<<< [ 16] 00 00 FF 00 FF 00 00 00 FF 03 FD D5 41 27 C3 00
Кроме этого, в проекте libnfc (в файле nfc-anticol.c) встречается еще такая форма вызова команды RATS
uint8_t abtRats[4] = { 0xe0, 0x50, 0x00, 0x00 };
...
if ((abtRx[0] & SAK_FLAG_ATS_SUPPORTED) || force_rats) {
iso14443a_crc_append(abtRats, 2);
if (transmit_bytes(abtRats, 4)) {
memcpy(abtAts, abtRx, szRx);
szAts = szRx;
}
}
Тут используется еще добавление контрольной суммы к команде.