过去三天我一直在为Mifare 1K寻找区块和价值区块。
例如,我成功写入数据1.阻止此APDU:
< FF D6 00 01 10 61 79 79 69 6C 64 69 7A 66 61 74 69 68 31 31 31
- Start Block 01
- Number of Bytes to Write: 16
- Data: ayyildizfatih111
> 90 00
- Write Binary Block Success
然后我可以阅读如下APDU:
< FF B0 00 01 10
- Data Read at Start Block 01
- Number of Bytes Read: 16
> 61 79 79 69 6C 64 69 7A 66 61 74 69 68 31 31 31 90 00
- ASCII Mode: ayyildizfatih111
- Read Binary Block Success
但是当我尝试读取值时,它会发出此错误。
< FF B1 00 01 04
- ACR122U Read Value Block
> 63 00
- Operation failed
所以我的问题是有什么区别?当我写数据时,我应该使用二进制块还是值块。哪一个更好?
答案 0 :(得分:0)
读取值块失败,因为块1不是值块。二进制数据块和值块共享相同的内存,区别在于如何格式化块的内容以及如何设置块的权限。
为了将块1转换为值块,您可以设置块访问位以允许值块操作(递减,传输,恢复和(可选)递增)。然后,您可以将块写为值块(使用ACR122U V2.02:使用值块操作命令或使用常规更新二进制块命令)。
值块的格式(使用二进制数据块操作时)是:
+----------+----------+----------+----+----+----+----+
Byte | 0..3 | 4..7 | 8..11 | 12 | 13 | 14 | 15 |
+----------+----------+----------+----+----+----+----+
Data | xxxxxxxx | yyyyyyyy | xxxxxxxx | uu | vv | uu | vv |
+----------+----------+----------+----+----+----+----+
其中xxxxxxxx
是4字节有符号(2&#39; s补码)整数(LSB =字节0),yyyyyyyy
是xxxxxxxx
的反转值,{{1} }是一个地址字节(可以在实现备份机制时使用),uu
是vv
的反转值。
如果您应该使用二进制数据块或应该使用值格式取决于您的应用程序。如果要存储4字节整数值并使用值块操作,则可能更喜欢使用值块格式。如果要存储其他数据,不需要值块格式的冗余,只想使用二进制读/写操作,您可能更喜欢使用块作为自由格式的二进制数据块。