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

How to check maximum available memory in NTAG216?

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

The next 36 pages are the user read/write area.

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

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

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

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

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

仔细阅读that documentation。它告诉您“前 4 页用于 OTP、制造商数据和锁定位 ”。而“接下来的36页是用户read/write区。”因此,这意味着用户内存的页面编号为4到40(= 4 + 36 ).但是,文档中也明确指出,这仅适用于MIFARE Ultralight CMF0ICU2),这是一种完全不同的标签类型。

如何确定标签是否真的是 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
            }
        }
    }
}