为什么我的符合 ISO 15693 标准的标签无法写入其 AFI?

问题描述 投票:0回答:1

我正在尝试在 Android 手机上使用 NFC 将 RFID 标签的应用程序系列标识符从

0x07
更改为
0xC2
,然后再更改回来。我已经阅读了标准以及在线支持信息,并且同事给了一些命令规范,但无论我做什么,我总是遇到 I/O 错误。

我正在通过 NFC Tools android 应用程序发送命令

00:27:C2
- 但是我也被提示尝试(并失败)
22:27:C2
27:C2
。这些标签是新的,所以我 98% 确定它们没有被锁定,但这是有可能的,而且我还没有找到可靠的来源来了解如何发现它们是否被锁定。我有一些 ICODE SLIK 类型的标签,还有一些实现 ISO 标准的未知类型。

NFC 工具的日志始终如下(根据我使用的芯片 ID 不同):

> Waiting
> Chip detected: 24:03:F9:64:50:01:04:E0
> Available I/O Class: NfcV
> Connecting NfcV
> Connected
> Sending «command»
> Error: I/O failure
android nfc rfid iso-15693
1个回答
0
投票

开头警告:我的答案取决于 NfcV 标签 ICODE SLIX (SL2S2002) 类型,因此如果您使用其他类型,请不要依赖参数。请仔细查看标签的数据表。如果您不确定标签类型,我推荐 NXP TagInfo 应用程序,可在应用程序商店中找到。

写入 NfcV 标签与其他(存储)标签有很大不同,尤其是在写入 AFI 等“管理数据”时。不仅有命令(它是 0x27h),还有 Iso15693Flags。对此标志使用错误的设置可能会损坏您的标签!

我编写此方法是为了在 Android/Java 上使用,以使用 默认选项集(标志) 写入新的 AFI 值。这需要在全局变量 (tagUid) 中提供 TagUID,并将其复制到 tagUid 占位符中(占位符只是一个空的 UID)。

public boolean writeAfi(byte afi) {
// written for ICODE SLIX (SL2S2002)
    byte[] cmd = new byte[] {
            /* FLAGS   */ (byte)0x20, // flags: addressed (= UID field present), use default OptionSet
            /* COMMAND */ WRITE_AFI_CCOMMAND, //(byte)0x27, // command write afi
            /* UID     */ (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00,
            /* OFFSET  */ afi
    };
    System.arraycopy(tagUid, 0, cmd, 2, 8); // copy tagId to UID
    byte[] response;
    try {
        response = nfcV.transceive(cmd);
    } catch (IOException e) {
        errorCode = RESPONSE_FAILURE;
        errorCodeReason = "writeAfi IOException: " + e.getMessage();
        Log.e(TAG, "writeAfi IOException: " + e.getMessage());
        return false;
    }
    if (!checkResponse(response)) return false; // errorCode and reason are setup
    Log.d(TAG, "afi written successfully");
    errorCode = RESPONSE_OK;
    errorCodeReason = RESPONSE_OK_STRING;
    return true;
}

如果失败,有以下几个原因:

a) TagUID 错误 - 仔细检查,例如标签信息

b) AFI 已锁定。 AFI 可以通过编程方式锁定,这是一个“一次性”命令,无法逆转(“解锁”)。一张全新的卡不应该被锁定,但是当使用这样的标签玩时......

c) AFI 受密码保护,这意味着您只有在成功验证后才能写入此字段。与b)相同,默认情况下全新标签不受保护。

© www.soinside.com 2019 - 2024. All rights reserved.