2016-06-07 66 views
0

在Mifare Desfire中創建文件。 返回錯誤響應,如0x0E DESFire卡相關異常已發生。 什麼是正確的命令,以在MIFARE創建文件的DESFire在Mifare Desfire中創建標準數據文件

CreateStdDataFile(FileNo,Com.Set.,AccessRights,FileSize) 
     [8bytes] 

public void CreateFile() throws Exception { 
    byte[] buffer = new byte[7]; 
    buffer[0] = (byte) ((0x00)); //file Number 
    buffer[1] = (byte) ((0xFF)); //Comm. Sett. 
    buffer[2] = (byte) (0x00); // 2 & 3 Access Rights 
    buffer[3] = (byte) (0x04); 
    buffer[4] = (byte) (0x00); // 4 & 5 & 6 File Size 
    buffer[5] = (byte) (0x00); 
    buffer[6] = (byte) (0x0F); 

    sendRequest(CREATE_FILE,buffer); 
} 

try 
{ 
    reader.CreateFile(); 
} 
catch (Exception e) { 
    Log.d(TAG, "Problem accessing Desfire tag", e); 
} finally { 
    try { 
     isoDep.close(); 
    } catch (IOException e) { 
     // ignore 
    } 
} 
+0

'0xF0000'字節聽起來像一個相當大的文件大小。你確定你的DESFire卡可以容納這麼多的數據嗎? – zenzelezz

+0

是的desfire卡可以容納很多數據 – Pradip

+0

我的觀點是指定您所需的文件大小的字節似乎顛倒過來;因爲DESFire首先預期最低有效字節的數據。您正在要求它創建一個接近1兆字節大小的文件。 – zenzelezz

回答

0

您所遇到的問題是endianness。 (特別見插圖部分。)

的DESFire非指令需要你通過在至少顯著字節順序(little-endian)的文件大小,但你的代碼使用最顯著字節秩序(大端)。

您目前它在你的代碼(0x00, 0x00, 0x0F)你是不是要求大小0x00000F(15)個字節的文件的方式,但0x0F0000(983 040)字節。

要請求的大小15個字節的文件,你的代碼應該是:

// ... 
buffer[4] = (byte)0x0F; 
buffer[5] = (byte)0x00; 
buffer[6] = (byte)0x00; 
// ... 
+0

感謝您的回覆使用此創建文件,但一個問題,無法讀取/寫入創建的文件緩衝區[2] =(字節)(0x00); // 2&3訪問權限 buffer [3] =(byte)(0x04);我試試這個緩衝區[2] =(byte)(0xE);可以改變訪問權限來讀/寫文件 – Pradip

+0

緩衝區[3] =(字節)(0x0); // 2&3訪問權限,但只寫不能讀取此文件讀取此文件時驗證錯誤 – Pradip

+0

爲了真正理解DESFire卡的指令集,您應該查閱[NXP]的技術規範(http:// www .nxp.com)。 – zenzelezz

相關問題