Android NFC Reads ISO15693 RFID Tag

I am trying to read the RFID ISO15693 tag with the nfc android library:

Details for the tag: http://img42.com/gw07d+

The tag ID is read correctly, but there is no data in the tag.

onCreate Method:

 // initialize NFC nfcAdapter = NfcAdapter.getDefaultAdapter(this); nfcPendingIntent = PendingIntent.getActivity(this, 0, new Intent(this, this.getClass()).addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP), 0); 

onNewIntent :

 if (NfcAdapter.ACTION_TAG_DISCOVERED.equals(intent.getAction()) || NfcAdapter.ACTION_TECH_DISCOVERED.equals(intent.getAction())) { currentTag = intent.getParcelableExtra(NfcAdapter.EXTRA_TAG); byte[] id = currentTag.getId(); Tag_data_TextDisplay.setText("TagId:" + Common.getHexString(id)); for (String tech : currentTag.getTechList()) { if (tech.equals(NfcV.class.getName())) { NfcV nfcvTag = NfcV.get(currentTag); try { nfcvTag.connect(); txtType.setText("Hello NFC!"); } catch (IOException e) { Toast.makeText(getApplicationContext(), "Could not open a connection!", Toast.LENGTH_SHORT).show(); return; } try { byte[] cmd = new byte[]{ (byte) 0x00, // Flags (byte) 0x23, // Command: Read multiple blocks (byte) 0x00, // First block (offset) (byte) 0x04 // Number of blocks }; byte[] userdata = nfcvTag.transceive(cmd); userdata = Arrays.copyOfRange(userdata, 0, 32); txtWrite.setText("DATA:" + Common.getHexString(userdata)); } catch (IOException e) { Toast.makeText(getApplicationContext(), "An error occurred while reading!", Toast.LENGTH_SHORT).show(); return; } } } } 

userdata contains one byte with the value 0x02 ( { 0x02 } ) immediately after the transfer procedure is completed.

+6
source share
1 answer

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); 
+2
source

Source: https://habr.com/ru/post/982196/


All Articles