我正在创建一个android应用程序,它使用ACS ACR1255 reader/writer来读/写nfc标签。
我可以使用这个apdu命令(从块04h开始,读取16个字节)很好地读取它:

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部分表示“不支持功能”。
所以我不知道怎么回事。有人能为我澄清一下问题是什么吗?我需要什么命令才能成功写入标记?
注意-所讨论的标签是aMIFARE Ultralight EV1 MFOUL21。(而且我可以用android的MifareUltralight类写得很好。)

最佳答案

我刚刚在这个Standard Instructions table中找到了解决方案。该表显示除了write binary(D0)指令外,还有update binary(D6)指令。
我的标记已经包含了我试图写入的块上的数据,因此我需要使用update binary代替。所以把我的D0改成D6就解决了这个问题。
更新
这些资源还可以帮助其他新手了解APDU:
NFC Forum - Type 2 Tag OperationSpecification
ISO 7816-4 Section 6 - Basic Interindustry Commands
Complete list of APDU responses

关于android - APDU写命令导致6A 81,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/51850708/

10-12 06:16