2014-10-18 96 views
0

在過去的三天裏,我一直在尋找Mifare 1K的塊和值塊。Mifare 1K寫塊但無法讀取值塊

< 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:

例如,我有這個APDU成功1塊寫數據

< 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

讀取值塊失敗,因爲塊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是倒值xxxxxxxx,uu是地址字節(可以在實現備份機制時使用),vvuu的反碼值。

如果您應該使用二進制數據塊或應使用值的格式取決於您的應用程序。如果要存儲4字節的整數值並使用值塊操作,則可能更願意使用值塊格式。如果要存儲其他數據,不需要值塊格式的冗餘,只需要使用二進制讀/寫操作,則可以優先使用塊作爲自由格式的二進制數據塊。