是否可以使用自定义NFC-V命令?

时间:2019-01-30 11:58:41

标签: android format nfc rfid iso-15693

我正在使用带有RF430FRL 15xH IC的传感器,我打算从中通过NFC获取数据。有没有办法编写和激活自定义NFC代码?

我尝试了针对单读(0xC0)和多读(0xC3)的自定义16位命令。 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 :(得分:1)

您的命令似乎完全混乱了。 0xC0是“自定义读取单个块”的代码,但是您使用的参数建议您要读取多个块。此外,user manual建议块号的有效范围是0x600-0xA00,因此您的块号0x0E0似乎超出范围。同样,根据标签配置,块的数量只能在0-2 / 0-5的范围内。最后,您可能想在Android上使用寻址命令(因为某些设备似乎存在未寻址形式的问题)。自定义读取多个块命令可能看起来像这样:

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();