0

在过去的三天里,我一直在寻找 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

所以我的问题是有什么区别?当我写数据时,我应该使用二进制块还是值块。哪一个更好?

4

1 回答 1

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 的补码)整数(LSB = 字节 0),yyyyyyyy是 的反转值xxxxxxxxuu是地址字节(可以在实现备份机制时使用),vv是 的反转值uu

是应该使用二进制数据块还是应该使用值格式取决于您的应用程序。如果要存储 4 字节整数值并使用值块操作,您可能更喜欢使用值块格式。如果要存储其他数据,不需要值块格式的冗余,只想使用二进制读/写操作,你可能更喜欢使用一个块作为自由格式的二进制数据块。

于 2014-10-19T07:43:15.773 回答