我正在创建一个使用ACS ACR1255 reader/writer来读取/写入NFC标签的Android应用。
我可以使用此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
部分表示“不支持的功能” 。
所以我不确定到底有什么问题。有人可以为我澄清问题是什么。成功写入标签需要什么命令?
NB-有问题的标签是MIFARE Ultralight EV1 MFOUL21。 (而且我可以使用Android的MifareUltralight
类来写它。)
答案 0 :(得分:2)
我刚刚在此Standard Instructions table中找到了解决方案。该表显示,除了WRITE BINARY(D0
)指令外,还有一条UPDATE BINARY(D6
)指令。
我的标签已经有我要写入的块上的数据,因此我需要使用UPDATE BINARY。因此,只需将我的D0
更改为D6
就可以解决问题。
更新
这些资源还可以帮助其他新手使用APDU: