如何使用 Android 解码 NFC 标签的 IC 类型?

问题描述

我正在开发一个 Android NFC 应用程序。

这个应用程序可以扫描一个 NFC 标签(这里我有一个 NXP NTAG 5 boost 标签,它是一个 NFC Forum Type 5 标签)。

从 UID 中,我已经知道如何使用 this document 解码 IC 制造商,这是第二个字节。

现在,我想像 NXP 的 TagInfo 应用程序那样解码 IC 类型,以确定扫描的标签是否更像是 NTAG 5 boost 或 NTAG I2C plus。

这是 NXP TagInfo 应用程序显示的图像:

enter image description here

你知道我在哪里可以找到 IC 类型寄存器以便我可以解码 UID 的这部分吗?

解决方法

只有制造商被编码到 UID 中,没有其他东西被编码到 UID 中。

该应用程序确定 IC 类型的方式有多种。

一些NFC芯片在底层协议中提供一些数据,例如用于NfcA的ATQA和SAK,用于识别Family of Tag类型和大小,这主要是在Mifare Classic系列芯片上。

最有可能的是,对于 NXP 芯片,您已经确定大多数 NXP 芯片都有一个 originality signature 命令,例如在 https://www.nxp.com/docs/en/data-sheet/NTA5332.pdf 部分 8.2.4.7 中,此签名用于检查 IC 类型。

不幸的是,如何解码和检查 originality signature 被保留在保密协议之后。当然,您展示的应用程序是由恩智浦编写的,因此他们可以访问解码此签名所需的数据并知道其中包含的内容。 (有一个提示,不同的芯片上使用不同的密钥,所以如果你知道这个过程以及密钥是如何映射到 IC 的,这就会告诉你 IC 类型)。

,

其实答案更简单.. 首先,您需要了解有不同的 NFC 协议,Android 支持例如 TagTechnologies NFC-A、NFC-B、NFC-V 和 ISO-DEP。 NTAG 2xx 包括NTAG I2C 属于 NFC-A 类别,而 NTAG5 IC 属于 NFC-V 技术。 在顶部,例如NTAG 21x IC 支持 Get_Version 命令 (60h),它将返回主要和次要产品版本以及内存大小。 见例如https://www.nxp.com/docs/en/data-sheet/NTAG213_215_216.pdf 中的表 28 和 https://www.nxp.com/docs/en/data-sheet/NT3H2111_2211.pdf

中的表 21