在Mifare Desfire中创建文件。 返回错误响应如0x0E已发生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 :(得分:1)
您遇到的问题是endianness。 (特别参见插图部分。)
DESFire指令要求您以最低有效字节顺序(little-endian)传递文件大小,但您的代码使用最高有效字节顺序(大-endian)。
您目前在代码中使用它的方式(0x00, 0x00, 0x0F
)您不需要大小为0x00000F
(15)字节但0x0F0000
(983 040)字节的文件。
要请求大小为15字节的文件,您的代码应为:
// ...
buffer[4] = (byte)0x0F;
buffer[5] = (byte)0x00;
buffer[6] = (byte)0x00;
// ...