我遇到了MIFARE DESFire的一个非常奇怪的问题。当我写入少量数据(例如11个字节)时,写操作成功。但是,当我尝试写例如50字节,响应为917E,这意味着命令中存在一些长度问题。
尝试写11个字节:
<-- 90 3D 00 00 12 01 000000 0B0000 1234567890AABBCC DDEEFF 00 --> 9100 (success)
尝试写50个字节:
<-- 90 3D 00 00 39 01 000000 320000 1234567890AABBCC DDEE1234567890AA BBCCDDEE12345678 90AABBCCDDEE1234 567890AABBCCDDEE 1234567890AABBCC DDEE 00 --> 917E (length error)
答案 0 :(得分:3)
错误表明您的命令太长。您可能使用DESFire EV1,它仅支持最多55个字节的包装APDU长度。因此,WriteData命令的最大数据长度在打包到封装的纯模式下的单个APDU时是
55 - APDU Header - APDU Lc - File ID - Offset - Length - APDU Le = 55 - 4 - 1 - 1 - 3 - 3 - 1 = 42 bytes.
由于APDU包装,这略小于WriteData命令本身的限制。请注意,您仍然可以通过在多个DESFire帧之间拆分数据(使用0xAF状态和命令代码)在一个WriteData命令中发送(更多)更多数据。
DESFire EV1数据表中提到了55个字节。 vikky的实际测试显示,这可能是60字节(最大数据长度为47字节)。