使用外接NFC读卡器向NTAG213写入NDEF记录失败,但内存写入正常
问题:写入NDEF数据到ntag216标签后NFC Tools无法识别
我参考了Michael Roland的示例代码,修改字节命令结构适配另一篇回答的要求后,执行写入操作时读卡器返回90 00响应,但使用NFC Tools扫描标签却无法识别到NDEF记录。查看标签内存后确认,我的数据已经从块4开始写入,但使用NFC Tools自带的写标签功能写入NDEF消息后,扫描就能正常识别。
对比内存内容发现,除了块4起始的区块外,其他内存区块和NFC Tools写入后的完全一致,块3(Capability Container)的内容也完全相同,因此我认为这不是Capability Container的问题。请问在写入块4之前,是否需要执行其他NDEF读取/检查命令?
以下是我的代码:
byte[] ndefMessage = new byte[] { (byte)0xD1, (byte)0x01, (byte)0x0C, (byte)0x55, (byte)0x01, (byte)0x65, (byte)0x78, (byte)0x61, (byte)0x6D, (byte)0x70, (byte)0x6C, (byte)0x65, (byte)0x2E, (byte)0x63, (byte)0x6F, (byte)0x6D, (byte)0x2F }; // wrap into TLV structure byte[] tlvEncodedData = null; Log.e("length",String.valueOf(ndefMessage.length)); if (ndefMessage.length < 255) { tlvEncodedData = new byte[ndefMessage.length + 3]; tlvEncodedData[0] = (byte)0x03; // NDEF TLV tag tlvEncodedData[1] = (byte)(ndefMessage.length & 0x0FF); // NDEF TLV length (1 byte) System.arraycopy(ndefMessage, 0, tlvEncodedData, 2, ndefMessage.length); tlvEncodedData[2 + ndefMessage.length] = (byte)0xFE; // Terminator TLV tag } else { tlvEncodedData = new byte[ndefMessage.length + 5]; tlvEncodedData[0] = (byte)0x03; // NDEF TLV tag tlvEncodedData[1] = (byte)0xFF; // NDEF TLV length (3 byte, marker) tlvEncodedData[2] = (byte)((ndefMessage.length >>> 8) & 0x0FF); // NDEF TLV length (3 byte, hi) tlvEncodedData[3] = (byte)(ndefMessage.length & 0x0FF); // NDEF TLV length (3 byte, lo) System.arraycopy(ndefMessage, 0, tlvEncodedData, 4, ndefMessage.length); tlvEncodedData[4 + ndefMessage.length] = (byte)0xFE; // Terminator TLV tag } // fill up with zeros to block boundary: tlvEncodedData = Arrays.copyOf(tlvEncodedData, (tlvEncodedData.length / 4 + 1) * 4); for (int i = 0; i < tlvEncodedData.length; i += 4) { byte[] command = new byte[] { (byte)0xFF, // WRITE (byte)0xD6, (byte)0x00, (byte)((4 + i / 4) & 0x0FF), // block address (byte)0x04, 0, 0, 0, 0 }; System.arraycopy(tlvEncodedData, i, command, 5, 4); ResponseAPDU answer = cardChannel.transmit(new CommandAPDU(command)); byte[] response = answer.getBytes(); writeLogWindow("response: "+ byteArrayToHexString(response)); }
内容的提问来源于stack exchange,提问作者policenauts
相关产品推荐
相关产品推荐

