【问题标题】:APDU write command resulting in 6A 81APDU 写命令导致 6A 81
【发布时间】:2018-08-15 07:13:06
【问题描述】:

我正在创建一个使用 ACS ACR1255 reader/writer 读取/写入 NFC 标签的 Android 应用。

我可以使用这个 APDU 命令很好地读取它(读取 16 个字节,从块 04h 开始):

String APDU_COMMAND_READ_16_BYTES =
        "FF" // Class: FFh
        + " B0" // Instruction: Read Binary Blocks
        + " 00" // P1: 00h
        + " 04" // P2: Block Number (the starting block)
        + " 10"; // Le: Number of bytes to read (10h = 16 bytes = 1 block)

但是,我在尝试写入卡时运气不佳。当我尝试这个命令时:

String APDU_COMMAND_WRITE_16_BYTES =
        "FF" // Class: FFh
                + " D0" // Instruction: Write Binary Blocks
                + " 00" // P1: 00h
                + " 04" // P2: Block Number (the starting block)
                + " 10" // Lc: Length of data field (10h = 16 bytes = 1 block)
                + " 01 02 03 04 05 06 07 08 01 02 03 04 05 06 07 08" // String of data units to be written
                + ""; // Le: Empty

...我收到此回复:6A 81

根据this page 上的表 12,6A 部分表示“P1-P2 参数错误(SW2 中的进一步限定,参见表 18)”。但是,表 18 显示 81 部分表示“不支持功能”

所以我不确定出了什么问题。有人可以为我澄清问题所在。我需要什么命令才能成功写入标签?

注意 - 有问题的标签是 MIFARE Ultralight EV1 MFOUL21。 (而且我可以使用 Android 的 MifareUltralight 类很好地写入它。)

【问题讨论】:

  • 请注意,实际上您并没有使用 APDU 来写入卡。您正在使用 APDU 来控制读卡器,并告诉他向卡发送 D0/D6 指令。 MIFARE Ultralight 不支持 APDU,只支持低级命令。

标签: android apdu


【解决方案1】:

我刚刚在Standard Instructions table 中找到了解决方案。该表显示,除了 WRITE BINARY (D0) 指令外,还有 UPDATE BINARY (D6) 指令。

我的标签已经在我试图写入的块上有数据,所以我需要改用 UPDATE BINARY。所以只需将我的D0 更改为D6 即可解决问题。

更新

这些资源也可以帮助其他 APDU 新手:

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-09-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多