我正在创建一个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/