Я не эксперт по NfcV, но ниже я узнал о тегах и низкоуровневом доступе.
Что означает Flag
байт? - Неизвестно, НО http://www.ti.com/lit/an/sloa141/sloa141.pdf Раздел 4.1 содержит подробную информацию о значениях флагов ISO 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)
person
Andrew
schedule
31.10.2019
Technology Supported:
Совместимость с ISO/IEC 15693-3 Совместимость с ISO/IEC 15693-2Supported Commands:
Чтение/запись одного блока, чтение/запись нескольких блоков, получение системной информации, AFI, DSFIDNfcV and NdefFormatable
- person cazzruan   schedule 31.10.2019