Mifare 1K 分两块写入数据
Mifare 1K writing data in two blocks
你好,我正在使用 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
命令一次只会写入一个块。
的第 12.3 节
所以RF将前16个字节的写命令发送到第一个块,RF将第二个16个字节的写命令发送到下一个块。
你好,我正在使用 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
命令一次只会写入一个块。
所以RF将前16个字节的写命令发送到第一个块,RF将第二个16个字节的写命令发送到下一个块。