首页 > 解决方案 > 有没有办法使用自定义 NFC-V 命令?

问题描述

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

我已经为 SINGLE READ (0xC0) 和 MULTIPLE READ (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,
                };

标签: androidformatnfcrfidiso-15693

解决方案


您的命令似乎完全搞砸了。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();

推荐阅读