Mifare 1K 分两块写入数据

问题描述

你好,我正在使用 APDU 命令来写入和读取 RFID 卡。我可以从块 num 2 中读取并写入 16 个字节的数据。但我在写更长的数据时遇到问题,所以我怎么能管理我试图写在两个块中,但它不起作用。 这是我在编写操作中实现代码的方式

// write...
//


if (nres == SM_SUCCESS)// &&
//bAPDURes )
{
nlenrcv = sizeof(btRcv);
nlencmd = 0;

btCmd[nlencmd++] = 0xFF;                // CLA
btCmd[nlencmd++] = 0xD6;                // INS
btCmd[nlencmd++] = 0x00;                // P1,mifare Block Number MSB,for mifare it is always 0x00
btCmd[nlencmd++] = 0x04;                // P2,mifare Block Number LSB
btCmd[nlencmd++] = 32;              // Lc,Data Length
memcpy(btCmd + nlencmd,btWrite,32);
nlencmd += 32;

nres = m_Smart.rftransmit(DEV_INTERNALRF,nlencmd,btCmd,(DWORD*)&nlenrcv,btRcv);

解决方法

您需要单独发送每个块。 Mifare Classic Write 命令一次只会写入一个块。

请参阅 Card's Data sheet

的第 12.3 节

因此 RFTransmit 将前 16 个字节的写入命令发送到第一个块,RFTransmit 将后 16 个字节的写入命令发送到下一个块。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...