ISO15693 (NfcV) / Tag-it HF-I 命令引发标签丢失异常

2024-04-14

当我尝试收发 NFC-V Tag-it HF-I Plus Inlay 标签的命令时,大多数命令都会出现 TagLostException。

从我经历过的链接来看,这个异常可能是由不正确的命令引起的。

如何为 Nfc V Tag-it HF-I Plus Inlay 创建正确的 ISO15693 命令字节[]?

数据表显示了支持的命令,但如何创建正确的命令来读取 NFC-V 标签?

文档中的命令是:

我要读取的标签是:

Code:

Tag tag = intent.getParcelableExtra(NfcAdapter.EXTRA_TAG);
Log.i(TAG, " tag "+tag );
if (tag != null) {
    NfcV tech = NfcV.get(tag);
    Log.i(TAG, " tech "+tech  );

    if (tech != null) {
    try {
        tech.connect();
        Log.i(TAG, " on connect" );
        byte[] data = tech.transceive(Nfcv.InventoryRequest());
        Log.i(TAG, "resp data " + data);
        StringBuilder sb = new StringBuilder();
        for (int i = 0; i < data.length; i++) {
            byte b = data[i];
            System.out.println(b);
            sb.append(String.format("%02X ", b));
        }
        System.out.println("response: " + sb.toString());
    } catch (IOException e) {
        e.printStackTrace();
    } finally {
        try {
            tech.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

我经历了以下事情:

  • NfcV Transceive 命令在 android 中使用 TI HF-I plus 标签(ISO15693)抛出标签丢失异常 https://stackoverflow.com/questions/16903536/nfcv-transceive-command-throws-tag-lost-exception-with-ti-hf-i-plus-tagiso15693
  • ISO15693 / Tag-it HF-I 收发失败 https://stackoverflow.com/questions/18211548/transceive-failed-on-iso15693-tag-it-hf-i
  • Android NFCV 保持安静命令 https://stackoverflow.com/questions/19784929/android-nfcv-stay-quiet-command
  • Android NFCV (ISO 15693) 标签 https://stackoverflow.com/questions/12688235/android-nfcv-iso-15693-tag
  • 读取 Android NfcV 标签时出现连接错误 https://stackoverflow.com/questions/23827996/connection-error-when-reading-android-nfcv-tags

EDIT

我尝试过的命令:

public class Nfcv {
    // texas get system info -> tag lost exception
    public static byte[] GET_SYSTEM_INFO = ReadNfcActivity.hexStringToByteArray("010A00030418002B0000");

    //read multiple blocks -> not working
    byte[] read_multiple_blocks= ReadNfcActivity.hexStringToByteArray("010C00030418002301020000");

    byte[] readSingleBlock = ReadNfcActivity.hexStringToByteArray("010B000304180020050000");

    // readUID generic command -> not working
    public static byte[] readUID = ReadNfcActivity.hexStringToByteArray("FFCA000000");

    public static  byte[] InventoryRequest(){
        //working response: 00 00 3A E5 00 04 00 00 07 E0
        // R/0 UID is E0 07 00 00 04 00 E5 3A 00 00 (reverse)
        return new byte[] { (byte) 0x24, (byte) 0x01, (byte) 0x00};
    }

    //-> not working
    private byte[] ReadSingleBlockUnadressed(byte blocknumber) {
        return new byte[] {(byte) 0x00, (byte) 0x20, blocknumber};
    }

    //-> response 03
    public static byte[] get_system_info = {0x00,(byte)0x2B};
}

Android NFC 堆栈自动为您处理轮询(搜索各种标签技术/协议的标签)、防冲突(枚举一种标签技术/协议中的多个标签)和激活(启动与一个特定标签的通信)。因此,您绝对不应该自己发送用于防冲突和激活的命令。 Inventory 命令就是这样一种命令(用于发现范围内的标签)。

对于 Inventory 命令,通常不需要发送该命令。 Android NFC API 已提供您从此命令获得的所有信息:

  • 您可以使用以下方式获取 UIDtag.getId().
  • 您可以使用以下方式获取 DSFIDtech.getDsfId().

此外,为了使您的应用程序能够在不同的 Android 设备平台(= 不同的 NFC 堆栈)上可靠地工作,您应该始终使用命令的寻址版本(即作为请求的一部分发送的 Address_flag 设置和 UID)。看Android NfcV 获取信息命令仅返回一个字节 https://stackoverflow.com/q/36951077/2425802.

如果要读取/写入标签,可以使用 READ_SINGLE_BLOCK 和 WRITE_SINGLE_BLOCK 命令:

byte[] tagUid = tag.getId();  // store tag UID for use in addressed commands
int blockAddress = 0; // block address that you want to read from/write to

READ_SINGLE_BLOCK:

byte[] cmd = new byte[] {
    (byte)0x20,  // FLAGS
    (byte)0x20,  // READ_SINGLE_BLOCK
    0, 0, 0, 0, 0, 0, 0, 0,
    (byte)(blockAddress & 0x0ff)
};
System.arraycopy(tagUid, 0, cmd, 2, 8);

byte[] response = tech.transceive(cmd);

WRITE_SINGLE_BLOCK:

byte[] cmd = new byte[] {
    (byte)0x60,  // FLAGS
    (byte)0x21,  // WRITE_SINGLE_BLOCK
    0, 0, 0, 0, 0, 0, 0, 0,
    (byte)(blockAddress & 0x0ff),
    ... // data block that you want to write (same length as the blocks that you read)
};
System.arraycopy(tagUid, 0, cmd, 2, 8);

byte[] response = tech.transceive(cmd);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

ISO15693 (NfcV) / Tag-it HF-I 命令引发标签丢失异常 的相关文章

随机推荐

  • 无法以编程方式减小 gtk 窗口的大小

    以编程方式调整 gtk 窗口大小时 我似乎遇到了问题 问题是 一旦我将窗口的宽度和高度增加到 800x600 我似乎无法将其缩小回原来的大小 400x200 下面是示例代码 有人遇到过这样的问题吗 include
  • Selenium IDE - 导出测试脚本

    我正在尝试导出在 Selenium IDE 中创建的测试自动化 但找不到导出选项 我有一些测试场景 其中测试是相同的 但我需要复制现有测试并交换一些 ID 才能使其正常工作 我只能将其保存为 side 文件 而不能保存为 Selenium
  • glutTimerFunc问题

    I use Glut制作一个简单的动画 在主函数中 glutTimerFunc TIMERMSECS animate 0 叫做 这两段代码生成相同的图形 const int TIMERMSECS 20 float animation tim
  • 删除android进度条中的进度条背景

    如何去掉灰色背景 只在进度条中显示蓝色进度条 我已经回答过一个有类似要求的问题 Result 要删除它 简单地通过 id 搜索背景并尝试隐藏它是行不通的 要删除背景 我必须创建与系统版本相同的绘图并删除背景项目 TL DR 创建文件prog
  • 如何确保 Data.Vector 的摊销 O(n) 级联?

    我有一个应用程序 在其中使用向量作为代码的一部分是有效的 然而 在计算过程中我需要跟踪一些元素 我听说你可以从 Data Vectors 获得 O n 摊销串联 通过通常的数组增长技巧 但我认为我做得不对 假设我们有以下设置 import
  • 循环遍历节点列表 JS

    我的问题是 我正在尝试通过 Hot 类的 NODELIST 我想将他们的 className 更改为 cool 当我使用 for 循环时 它的第二个 li 似乎没有改变颜色 有谁知道我在这里犯了什么错误 第二个 li 元素没有改变颜色 谢谢
  • 如何更改 NSPopover 背景颜色包括三角形部分?

    我该如何改变NSPopover背景颜色包括三角形部分吗 它实际上要简单得多 并且您不需要私有 API 使视图控制器的根视图成为自定义类 implementation MyPopoverRootView void viewDidMoveToW
  • 在 Python 中为方法生成控制流图的最简单方法是什么?

    我正在编写一个程序来尝试比较两种方法 我想为所有匹配的方法生成控制流图 CFG 并使用拓扑排序来比较两个图 有一个Python包叫做staticfg https pypi org project staticfg 它正是从一段 Python
  • 为什么不再需要指明ByVal/ByRef?

    我刚刚安装了 Visual Studio 2010 Service Pack 在 Windows Update 上建议 我可以看到 intellisense 上的一个新功能 这意味着当我编写Function or Sub在 VB NET 中
  • Linux 上的 JDK 1.8 缺少 JNI 包含文件

    我正在尝试编译以下项目 https github com entropia libsocket can java 我总是收到此错误消息 有谁知道如何修复它 这可能是 Linux x64 Debian Wheezy 上 JDK 1 8 0 1
  • 自定义类型.NamedTuple

    我在用着NamedTuples来保存数据 我想添加一个可以被多个继承的方法NamedTuple基础课程 但是当我尝试使用多重继承或子类化时NamedTuple基于类 它不起作用 具体来说 我试图自动为所有数据类提供一个方法 该方法可以查看类
  • 同一服务器实例和同一作业存储上的多个 Quartz 实例

    我们有 2 个使用quartz 进行调度的应用程序 我们应用程序的quartz properties如下 org quartz scheduler instanceName sr22QuartzScheduler org quartz sc
  • HighCharts:在一个系列中绘制多个段?

    我问自己是否可以做多条重叠的线 在一个系列中 我找不到任何例子 我不想要这个 Highcharts Highstock 阶梯线没有垂直 过渡 线 https stackoverflow com questions 23242857 high
  • 私有子方法的原型

    我的代码如下所示 var baseClass function CODE var subClass function MORE CODE 向baseClass添加方法就可以了 我只是使用 baseClass prototype newMet
  • 如何从 XML 文档读取值来构建 ComboBox?

    我正在尝试阅读xml questions tagged xml我想为我妈妈制作的文件 所以基本上这就是我想做的 A ComboBox这将显示 XML 中的所有蔬菜名称 选择一种蔬菜后 第二个ComboBox将在 XML 中显示可以使用第一个
  • 如何使用用户环境在 NodeJS 中执行?

    我正在尝试在 Node 中执行命令 cd www foo path to git bin git exe config list global 基本上 我想执行一个返回全局配置 针对当前用户 的 Git 命令 当我直接在 cli 上执行命令
  • 如何在Spritekit中创建计时器?

    我已经弄清楚如何在单视图应用程序中制作计时器 但没有弄清楚 Spritekit 当我使用以下代码时 出现 2 个错误 如下所示 谁能帮我解决这个问题吗 谢谢 杰克 计时器 if scorelabel scorelabel SKLabelNo
  • Session_End 上的 asp.net 会话变量

    我需要访问 global asax cs 中 Session End 事件上的会话变量 但 HttpContext Current 为空 因此所有会话变量都不可访问 a 我可以以不同的方式访问用户会话 或者 b 在 Session End
  • 为什么以 utf-8 保存的文本文件比其他文件大?

    什么是 UTF 8 编码 为什么以 utf 8 格式保存的文本文件比其他格式的文件大 例如 我在记事本中输入 A 并将其保存为 UTF 8 格式 之后 文件大小变为 4字节 Why 几乎可以肯定 因为您用来保存文件的任何内容也包括字节顺序标
  • ISO15693 (NfcV) / Tag-it HF-I 命令引发标签丢失异常

    当我尝试收发 NFC V Tag it HF I Plus Inlay 标签的命令时 大多数命令都会出现 TagLostException 从我经历过的链接来看 这个异常可能是由不正确的命令引起的 如何为 Nfc V Tag it HF I