Я не эксперт по NfcV, но вот что я узнал о тегах и низкоуровневом доступе
Что означает байт Flag
? - Неизвестно, НО http://www.ti.com/lit/an/sloa141/sloa141.pdf В разделе 4.1 приведены подробные сведения о значениях флагов ИСО 15693
Но один из флагов означает использование адресного или неадресованного режима, что приводит к UID
Что такое UID
байт. - Большинство тегов имеют серийный номер или уникальный номер идентификатора
. В адресуемом режиме вы должны указать правильный UID карты, с которой вы читаете или пишете, чтобы она была успешной. Это означает, что вы не будете писать или читать не с той карты. Существует команда, чтобы сначала прочитать UID с карты.
В режиме без адреса UID предоставляется в виде нулей
Вы сработали, второй байт равен 0x21
длякоманда записи.
0x20
для команды чтения
http://www.ti.com/lit/an/sloa141/sloa141.pdf В разделе 4.2 приведены подробные данные о значениях команд ISO 15693, и, как вы можете видеть, их значения Optional
или Custom
и поддержка, и то, что они делают, зависит от чипа.
OFFSET
, как вы указали, - это смещение блока памяти от первого блока или, лучше сказать, адрес памяти (воспринимайте это как страницуномер в книге). Большинство чипов разделяют память на блоки заданного размера. Есть некоторые микросхемы, которые используют один байт в качестве адреса памяти, а некоторые используют 2 байта.
Каждый блок имеет заданное количество байтов, обычно это 4 байта, но я видел спецификации микросхем, где он составляет 128 байтов.
Структура данных, которую вы дали в вашемВопрос обычно используется в качестве шаблона правильно сформированной команды для чипа, с которым вы пытаетесь связаться.
DATA
4 байта в вашем примере - это просто заполнители для фактических данных, которые вы хотите записать, выследует скопировать в шаблон фактические 4 байта, которые вы хотите записать перед отправкой команды.
Так что, когда вы используете его для записи, вы должны настроить OFFSET
/ Memory Address
на "правую страницу книги »и скопируйте нужное количество« букв », которые можно записать на странице в DATA
часть шаблона
Некоторые примеры кода NfcV для Android от производителя микросхемможно увидеть в конце https://www.st.com/content/ccc/resource/technical/document/application_note/group0/76/0e/00/a0/1b/04/4c/f2/DM00103491/files/DM00103491.pdf/jcr:content/translations/en.DM00103491.pdf
Итак, последний вопрос Lets go suppose, i have a 4 bytes data myData = "ABCD", and i want to write this data to block 04 of my tag
Пример построения команды
// Command Template
byte[] cmd = new byte[] {
(byte)0x20, //FLAG
(byte)0x21, //WRITE SINGLE BLOCK COMMAND
(byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, //UID
(byte)0x00, //OFFSET
(byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00 //DATA
};
// The data to be written
String myData = "ABCD";
// Get the data as bytes
byte[] data = myData.getBytes();
// Change the "OFFSET" / "Block number" to the the fourth Block
// If that what was meant by "block 04"
// The addresses start at Zero and the byte array starts at zero
// So the "Block Number" is the 11th byte in the command
cmd[10] = (byte)((3) & 0x0ff);
// Copy in 4 bytes of data in to bytes 11 to 15
// Starting at byte 0 in the data array
System.arraycopy(data, 0, cmd, 11, 4);
Для справки, что arraycopy
Параметры https://docs.oracle.com/javase/7/docs/api/java/lang/System.html#arraycopy(java.lang.Object,%20int,%20java.lang.Object,%20int,%20int)