gpt4 book ai didi

android - NFC-V "Tag Lost"Xamarin 和 ST M24LR 标签异常

转载 作者:行者123 更新时间:2023-11-30 01:03:26 26 4
gpt4 key购买 nike

我是 Xamarin 和 Android 开发的新手。我有一个 NFC 标签,特别是 ST M24LR64E,上面有数据。我可以使用 Google Play 上的 ST 应用程序查看数据 block 。在我的 Xamarin 应用程序中,我无法在未收到 TagLostException 的情况下向标签发送消息。我可以毫无问题地查询标签 ID,但尝试读取单个数据 block 时,出现异常。任何方向将不胜感激。

byte[] response = new byte[] { 0x0A };

byte[] cmd = new byte[]
{
(byte) 0x26,
(byte) 0x01,
0x00
};
response = nfcv.Transceive(cmd);

byte[] single = new byte[]
{
(byte) 0x40, // FLAGS
(byte) 0x20, // READ_SINGLE_BLOCK
0, 0, 0, 0, 0, 0, 0, 0,
(byte) (0 & 0x0ff)
};
Array.Copy(id, 0, single, 2, 8);
response = nfcv.Transceive(single);

第一个 Transceive() 正常,我看到返回了 10 个字节。一旦我尝试读取数据 block ,我就会收到 TagLostException。

最佳答案

使用 NfcV 标签技术,TagLostException 可能表示读取器无法再与标签通信或命令导致错误。

根据其manual ,M24LR64E只支持READ_SINGLE_BLOCK命令的扩展版本(Protocol Extension flag set):

The Protocol_extension_flag should be set to 1 for the M24LR64E-R to operate correctly. If the Protocol_extension_flag is at 0, the M24LR64E-R answers with an error code.

因此,您的 READ_SINGLE_BLOCK 命令版本与标签不兼容。您需要设置协议(protocol)扩展标志并提供一个 16 位的 block 号。应该工作的版本是:

int blockNumber = 0;
byte[] readSingleBlock = new byte[] {
(byte) 0x28, // Flags: Addressed (bit 5), Protocol Extension (bit 3)
(byte) 0x20, // Command: READ_SINGLE_BLOCK
0, 0, 0, 0, 0, 0, 0, 0, // placeholder for UID
(byte) (blockNumber & 0x0ff),
(byte) ((blockNumber >> 8) & 0x0ff)
};
byte[] id = nfcv.GetTag().GetId();
Array.Copy(id, 0, readSingleBlock, 2, 8);
response = nfcv.Transceive(readSingleBlock);

由于您在 INVENTORY 命令中使用了高数据速率(设置了 Data_rate 标志),因此您可能还想在 READ_SINGLE_BLOCK 命令中使用高数据速率。在这种情况下,您将使用标志值 0x2A(而不是 0x28)。

最后,您应该避免在任何 NfcX 标签技术对象上发送防冲突/枚举命令,例如 INVENTORY 命令。虽然这可能有效,但您可能会混淆 ANdroid NFC 堆栈的内部状态保持,因为它已经为您执行了这些命令并跟踪枚举标签。您可以从 Tag 对象和 NfcV 对象获取通过 INVENTORY 请求获取的所有信息:

  • tag.GetId() 为您提供标签的 UID。
  • nfcv.GetDsfId() 为您提供标签的 DSFID。
  • nfcv.GetResponseFlags() 为您提供 INVENTORY 响应的标志字节。

关于android - NFC-V "Tag Lost"Xamarin 和 ST M24LR 标签异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39153783/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com