Почему данные метки NFC записываются успешно? С исключением потери метки

Я получаю исключение «Тег потерян» с кодом ниже. Однако данные записываются успешно, несмотря на исключение. Почему данные успешно записываются даже при возникновении исключения?

   nfc.connect();
   byte[] arrByt = new byte[7];
   arrByt[0] = 0x01; //Command Flag 0x02 works fine
   arrByt[1] = 0x21;
   arrByt[2] = 0x06;
   arrByt[3] = 0x00;
   arrByt[4] = 0x00;
   arrByt[5] = 0x00;
   arrByt[6] = 0x00;           
   byte[] response = nfc.transceive(arrByt);

Мой NFC-чип

Type V (ISO/IEC 15693 / Vicinity), Tag Type SL2 ICS2001 (ICODE SLI), Manufacturer NXP Semiconductors (Germany)

здесь обсуждалось Но результата нет :(


person Last Warrior    schedule 08.10.2012    source источник


Ответы (1)


Когда тег NfcV возвращает неуспешный код, стек Android NFC предполагает, что это исключение, и выдает «Тег потерян».
Чтобы избежать этого исключения, вы можете использовать команду 0x02, и соответствующие массивы байтов станут такими:
arrByte = {0x02, 0x21, 0x06, 0x00, 0x00, 0x00, 0x00}; где 0x02 — команда флага, 0x21 — команда записи отдельного блока, 0x06 — номер блока, а остаток — 4 байта данных. Надеюсь, это поможет.

person Imran Zulfiqar    schedule 09.10.2012
comment
Имран - хороший совет, за исключением того, что есть теги ISO15693, которые требуют использования флага option для операций записи и блокировки, что затем требует отправки EOF через некоторое время после его передачи, чтобы получить от тега ответ об отсутствии ошибок. . (TI и другие производители используют этот метод — оба метода (с флагом параметра и без него) разрешены в стандарте ISO). Это было исправлено с помощью последнего стека NFC в Nexus 4/Nexus 10 и выше, но это должно потребовать некоторых усилий. вероятно, сделано здесь для более старых версий стеков Android NFC, чтобы запись могла выполняться без сброса - person Josh Wyatt; 31.05.2013
comment
Извините, @ImranZulfiqar, я немного запутался. Мне нужно отправить команду 0x80, 0x44, ... на метку NFC, но я получаю это исключение. Итак, я должен сначала отправить 0x02, 0x21, ..., а затем свою команду или что-то в этом роде? - person ericn; 03.12.2013