如何检查NTAG216中的最大可用内存?

时间:2016-01-18 07:42:27

标签: android tags nfc mifare fingerprinting

如何确定我可以在NTAG216中写入的最大页面?我找不到任何可以让我检查最大可用内存的方法in the documentation。另外根据文件:

  

接下来的36页是用户读/写区域。

这是否意味着我只能写到第36页?我尝试写到第50页,但没有任何错误。

我使用NFC工具来检查最大内存,但是一旦我从第4页开始写入字节,有关最大内存的数据就变得不可用了。

1 个答案:

答案 0 :(得分:3)

如何确定我可以在NTAG216中写入的最大页面?

如果您知道该标签是NXP NTAG 216 标签,那么您可以通过查看the datasheet来确定标签的大小。数据表告诉您NTAG216标签分为231页,其中第4到225页是用户存储器(即可以自由使用的存储器)。

根据文档," 接下来的36页是用户读/写区域。"这是否意味着我只能写到第36页?

仔细阅读that documentation。它告诉您" 前4页用于OTP,制造商数据和锁定位"。那个" 接下来的36页是用户读/写区域。"因此,这意味着用户存储器的页面编号为4到40(= 4 + 36)。但是,文档还明确指出,这仅适用于 MIFARE Ultralight C MF0ICU2 ),这是一种完全不同的标记类型。

如何确定标签实际上是否为NTAG216标签?

您可以使用GET_VERSION命令来检查这一点。如果GET_VERSION命令成功并指示NTAG216的特征版本信息,则可以假定该标记实际上是NTAG216标记。

byte[] GET_VERSION = new byte[] { (byte)0x60 };
byte[] result = nfca.transceive(GET_VERSION);
if ((result != null) && (result.length == 8)) {
    // GET_VERSION command successful
    if ((result[0] == 0) && (result[1] == (byte)0x04) && (result[2] == (byte)0x04)) {
        // tag is NTAG
        if ((result[3] == (byte)0x02) && (result[4] == (byte)0x01) && (result[5] == (byte)0x00) && (result[7] == (byte)0x03)) {
            if (result[6] == (byte)0x13) {
                // tag is NTAG216
            } else if (result[6] == (byte)0x11) {
                // tag is NTAG215
            } else if (result[6] == (byte)0x0F) {
                // tag is NTAG213
            }
        }
    }
}