So, you get the value { 0x02 } from the transceive method. As shown in this thread , this can happen if you use unaddressed commands. Therefore, you should always send address commands via NfcV (since this seems to be supported on all NFC sets on Android devices). In your case, you can use something like this to generate the given READ MULTIPLE BLOCKS command:
int offset = 0; // offset of first block to read int blocks = 1; // number of blocks to read byte[] cmd = new byte[]{ (byte)0x60, // flags: addressed (= UID field present) (byte)0x23, // command: READ MULTIPLE BLOCKS (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, // placeholder for tag UID (byte)(offset & 0x0ff), // first block number (byte)((blocks - 1) & 0x0ff) // number of blocks (-1 as 0x00 means one block) }; System.arraycopy(id, 0, cmd, 2, 8); byte[] response = nfcvTag.transceive(cmd);
source share