问题描述
我正在开发一个 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 应用程序显示的图像:
你知道我在哪里可以找到 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