Есть ли способ использовать пользовательские команды NFC-V? - PullRequest
0 голосов
/ 30 января 2019

Я использую датчик с микросхемой RF430FRL 15xH, от которого планирую получать данные через NFC.Есть ли способ написать и активировать пользовательские коды NFC?

Я пробовал настраиваемые 16-разрядные команды для SINGLE READ (0xC0) и MULTIPLE READ (0xC3).Поиск данных NFC все еще не расширен.Я пробовал следующий код:

cmd = new byte[]{
                 (byte)0x00,  //Protocol_Extension_flag=1 // 
                 (byte)0xC0,  //READ multiple blocks
                 (byte)0x07,
                 (byte)0xE0,  // First block (offset)
                 (byte)0x00,  // Number of blocks
                 (byte)0x06,
                };

1 Ответ

0 голосов
/ 30 января 2019

Ваша команда, кажется, полностью запуталась.0xC0 - это код для CUSTOM READ SINGLE BLOCK, но используемые вами параметры предполагают, что вы захотите прочитать несколько блоков.Более того, руководство пользователя предполагает, что допустимый диапазон для номера блока составляет 0x600 - 0xA00, поэтому ваш номер блока 0x0E0, по-видимому, находится вне допустимого диапазона.Кроме того, количество блоков может быть только в диапазоне 0-2 / 0-5 в зависимости от конфигурации тега.Наконец, вы, вероятно, захотите использовать адресную команду на Android (поскольку у некоторых устройств возникают проблемы с неадресованной формой).Команда CUSTOM READ MULTIPLE BLOCKS может выглядеть следующим образом:

NfcV nfcV = NfcV.get(tag);
nfcV.connect();
byte[] tagUid = tag.getId();  // store tag UID for use in addressed commands

int blockAddress = 0x0600;
int numberOfBlocks = 2;
byte[] cmd = new byte[] {
    (byte)0x20,  // FLAGS (addressed)
    (byte)0xC3,  // CUSTOM_READ_MULTIPLE_BLOCKS
    (byte)0x07,  // MANUFACTURER CODE (TI)
    0, 0, 0, 0, 0, 0, 0, 0,  // Placeholder for UID (address), filled by arraycopy below
    (byte)(blockAddress & 0x0ff),
    (byte)((blockAddress >>> 8) & 0x0ff),
    (byte)(numberOfBlocks & 0x0ff),
};
System.arraycopy(tagUid, 0, cmd, 3, 8);

byte[] response = nfcV.transceive(cmd);

nfcV.close();
...