Online Store

NDEF 检测和访问 – MIFARE Classic 和 MIFARE Plus 标签

NDEF 检测和访问 #

本章介绍如何在MIFARE Classic和MIFARE Plus标签中存储和访问NDEF数据(例如NDEF消息)。

本应用笔记在MIFARE Classic和MIFARE Plus中管理的NDEF消息存储在NDEF消息TLV中,称为强制性NDEF消息TLV或第一个NDEF消息TLV。 强制性的 NDEF 消息 TLV 也是 NDEF 检测过程找到的 NDEF 消息 TLV(请参阅 第 1 节。4.1)。

NDEF 管理 #

要检测和访问MIFARE Classic和MIFARE Plus标签内的NDEF数据(例如NDEF消息),应将MAD与NFC扇区的GPB一起使用(见 第2.4节)。

MAD的应用程序标识符(AID)称为NFC AID,已被保留用于识别具有NDEF数据的扇区。 具有 NDEF 数据的扇区称为 NFC 扇区。 NFC AID 的两个字段设置如下:

函数簇代码等于 E1h,以标识具有 NDEF 数据的扇区簇,并且

应用代码等于03h,以标识与本应用笔记相关的NFC扇区。

一个或多个NFC扇区可能存在于MIFARE经典1k / 4k标签中。

如果存在多个 NFC 扇区,则 NFC 扇区应是连续的。 对于 MIFARE Classic 4k 或 4 KB 的 MIFARE Plus,它应被视为包括 MAD 扇区 16 在内的一系列 NFC 扇区。

连续 NFC 扇区的示例包括:

  • 从扇区 2 到扇区 3 的 NFC 扇区,以及
  • NFC 扇区从扇区 1 到扇区 39。 在这种情况下,MAD扇区16被包含,但仍如NFC扇区上述定义,被认为是连续的。

非连续 NFC 扇区的一个例子是:

  • 没有扇区 4 的扇区 3 和扇区 5 是 NFC 扇区。 在本例中,扇区 4 不是 NFC 扇区,因此剩余的两个 NFC 扇区不连续。

NDEF数据应从扇区编号最小的NFC扇区到最大的扇区开始写入。

每个NFC扇区的通用字节(GPB,请参阅第2.1节和第2.3节)提供有关用于将NDEF数据存储到MIFARE Classic和MIFARE Plus中的映射模型版本号的信息(请参阅第1节。 1.1) 和 NFC 扇区的写入访问权限。 GPB 应按 1 中的说明进行编码。

1. 通用 字节结构

MSB 位 7  位 6  位 5  位 4  位 3  位 2  位 1 LSB 位 0
映射版本号 访问条件
主版本号 次要版本号 读取访问条件 写入访问条件

GPB 的 4 个最低有效位 (lsb) 表示 NFC 扇区的访问条件:

  • 位 2-3 表示读取访问条件:
    • 值 00b 表示授予的读取访问权限,没有任何安全性。
    • 值 11b 表示根本没有授予读取访问权限。
    • 任何其他值都指示需要供应商安全操作来授予读取访问权限,即专有。
  • 位 0-1 表示写入访问条件:
    • 值 00b 表示授予的写入访问权限,没有任何安全性。
    • 值 11b 表示根本没有授予写入访问权限。
    • 任何其他值都指示需要供应商安全操作来授予写入访问权限,即专有。

4 个最高有效位 (msb) 表示映射版本号(请参阅 第 1 节。1.1):

  • 位 7-6(映射版本号字段的 2 msb)指示主版本号。
  • 位 5-4(映射版本号字段的 2 lsb)指示次要版本号。

在MIFARE Classic和MIFARE Plus标签中,包含强制性NDEF消息TLV的NFC扇区应设置为读取访问条件等于00h,写入访问条件等于00b或11b(请参阅 第1节)。3).

实现本应用笔记的读卡器设备应管理主版本号等于01b、次要版本号等于00b的MIFARE Classic和MIFARE Plus标签,即映射版本1.0。

版本处理 #

NFC 扇区的 GPB 包含 MIFARE Classic 1k/4k 或 MIFARE Plus 标签的应用映射模型的映射版本号。 映射版本号用两个数字表示:主版本号和次要版本号。

12 的 4 种情况说明了如何处理 MIFARE Classic 或 MIFARE Plus 标签(称为 MSVNo)以及在读取器设备中实现的版本号(称为 NFCDevVNo)。

12. 映射文档版本 处理

版本号案例 处理
1 主要的NFCDevVNo等于主要的MSVNo,并且

次要 NFCDevVNo 大于或等于次要 MSVNo

阅读器设备应访问 MIFARE Classic 或 MIFARE Plus 标签,并应使用已应用映射文档的所有功能到此 MIFARE Classic 或 MIFARE Plus 标签。
2 如果主要 NFCDevVNo 等于主要 MSVNo,并且

次要 NFCDevVNo 低于次要 MSVNo

可能并非可以访问MIFARE Classic或MIFARE Plus标签的所有功能。 阅读器设备应使用其所有功能,并应访问此MIFARE Classic或MIFARE Plus标签。
 

版本号案例 处理
3 如果主要 NFCDevVNo 小于主要 MSVNo 不兼容的数据格式。 读卡器设备无法理解 MIFARE Classic 或 MIFARE Plus 标签数据。 读卡器设备应拒绝此 MIFARE Classic 或 MIFARE Plus 标签。
4 如果主要的NFCDevVNo大于主要的MSVNo 除了主版本之外,Reader 设备还可以实现对此规范的以前版本的支持。 如果阅读器设备具有先前版本的支持,则应访问MIFARE Classic或MIFARE Plus标签。 相反,如果阅读器设备没有先前版本的支持,则应拒绝MIFARE Classic或MIFARE Plus标签。

NDEF 存储 #

NDEF 消息的数据格式在 中 [NDEF]定义。 NDEF 消息应使用一个或多个 NFC 扇区存储在 NDEF 消息 TLV 的值字段中(请参阅 第 2.6.1 节)。 NFC 扇区由 NFC AID 在 MAD 扇区中识别。

生命周期 #

MIFARE Classic 或 MIFARE Plus 标签的 NFC 扇区可能处于以下状态:初始化、读/写或只读。 NFC扇区在特定时刻只能处于一种状态。 状态应反映在NFC扇区的内容中。 状态与单个 NFC 扇区无关,而是与所有 NFC 扇区相关。 以下各节将介绍这些状态。

如果 MIFARE Classic 或 MIFARE Plus 标签仅包含 NFC 扇区,则 NFC 扇区的状态称为 MIFARE Classic 或 MIFARE Plus 标签的状态。 在下面的描述中,MIFARE Classic或MIFARE Plus标签的状态与NFC扇区的状态混淆(即等于)。

每个状态都有其称为转换或状态更改的有效操作。 状态转换仅与能够写入 MIFARE Classic 或 MIFARE Plus 标签的读取器设备相关。

通过比较强制 NDEF 消息 TLV 开始的 NFC 扇区的 GPB 和强制 NDEF 消息 TLV 的字段来识别不同的状态。 请注意,本应用笔记中未使用第2.5中描述的扇区拖车的访问位来识别特定状态。

如果根据本应用笔记,MIFARE Classic 或 MIFARE Plus 标签未处于有效状态,则所有 NFC 扇区中 MIFARE Classic 或 MIFARE Plus 标签的 NDEF 数据将被忽略。 原因可能是:

  • 非连续 NFC 扇区。
  • 标签内不存在 NFC 扇区,即 MAD 使用 NFC AID 指示任何扇区。
  • 总 TLV 块长度与数据区域的实际长度不匹配。
  • 无效的 TLV 阻止。

初始化状态 #

在以下情况下,MIFARE Classic 或 MIFARE Plus 标签应处于“已初始化”状态:

        • GPB 的设置如第 1 节所述。1,特别是位 0-1 等于 00b 且位 2-3 等于 00b(授予读写访问权限),
        • NFC 扇区包含一个 NDEF 消息 TLV(强制),并且
        • 必需的 NDEF 消息 TLV 的长度字段等于 00h。

在初始化状态下,NFC 设备可能会修改写入 NDEF 消息的强制性 NDEF 消息 TLV 的内容。 第10章的附录D、第0章的附件E和第12章的附件F分别显示了MIFARE Classic 1k,2 KB的MIFARE Plus和4 KB的MIFARE Classic 4k或MIFARE Plus的两个示例,它们都处于初始化状态。

读/写状态 #

在以下情况下,MIFARE Classic 或 MIFARE Plus 标签应以读/写状态检测到:

        • GPB 的设置如第 1 节所述。1,特别是位 0-1 等于 00b 且位 2-3 等于 00b(授予读写访问权限),
        • 强制性 NDEF 消息 TLV 存在于 NFC 扇区中,并且
        • 必需的 NDEF 消息 TLV 的长度字段不同于零。

读/写状态应通过初始化状态达到。 在此状态下,NFC 设备可能会修改写入 NDEF 消息的强制性 NDEF 消息 TLV 的内容。

只读状态 #

在以下情况下,MIFARE Classic 或 MIFARE Plus 标签应以只读状态检测到:

        • GPB 的设置如第 1 节所述。1,特别是位 0-1 等于 11b,位 2-3 等于 00b(不授予写入访问权限,仅授予读取访问权限),
        • 强制性 NDEF 消息 TLV 存在于 NFC 扇区中,并且
        • 必填 NDEF 消息 TLV 的长度字段应不同于零。

在只读状态下,所有 NFC 扇区都授予只读访问权限。 MIFARE Classic 或 MIFARE Plus 标签在剩余生命周期内保持只读状态。

命令序列说明 #

在本节中,描述了几个管理NDEF数据的过程,例如NFC扇区内的强制性NDEF消息TLV。 MIFARE Classic或MIFARE Plus标签状态之间的不同状态变化或转换也详细显示。

程序中涉及的每个扇区在读取或写入之前都应使用身份验证操作进行身份验证。 公钥 A 应根据扇区类型(即 MAD 扇区或 NFC 扇区)进行选择。

NDEF 检测程序 #

NDEF检测程序应用于检测MIFARE Classic或MIFARE Plus标签内的强制性NDEF消息(请参阅 [NDEF])。

NDEF 检测程序基于对以下各项的检查:

        • MAD部门,
        • NFC部门,以及
        • 包含 NDEF 消息的必需 NDEF 消息 TLV。

如前所述,NDEF 检测程序发现的 NDEF 消息 TLV 称为强制 NDEF 消息 TLV 或第一个 NDEF 消息 TLV。 当 MIFARE Classic 或 MIFARE Plus 处于读/写或只读状态时,此 NDEF 消息 TLV 包含 NDEF 消息。 在初始化状态下,NDEF 消息 TLV 为空。

NDEF graph(1) 身份验证或读取操作失败后,MIFARE Classic 或 MIFARE Plus 不再响应任何命令,需要重新激活并选择它才能继续执行 NDEF 检测程序。

要执行NDEF检测程序,读卡器设备(或NFC设备)应在MIFARE Classic或MIFARE Plus上执行以下操作(另见 图6):

  1. 检查 MAD 扇区是否存在。
  2. 验证并读取 MAD 扇区:扇区 0 表示 MAD1,扇区 0 表示 MAD2,使用读取操作读取。
  1. 如果在MAD内发现一个或多个与一个或多个相邻扇区相关的NFC AID相等的AID,则转到第4项。 否则,在 MIFARE Classic 或 MIFARE Plus 标签中未检测到 NFC AID,并且 MIFARE Classic 或 MIFARE Plus 标签未处于有效状态。
  2. 对于每个 NFC 扇区,从最小的扇区号到最高的扇区号开始执行以下操作:
    1. 使用 NFC 扇区的公钥 A 验证并读取 NFC 扇区的扇区尾部(请参阅 6)。
    2. 如果身份验证和读取操作成功,请检查 NFC 扇区的扇区尾部。 否则,如果身份验证或读取操作失败,则找到专有的NFC扇区(请参阅下面的NFC扇区说明),然后转到项目f。
    3. 如果 GPB 的第 4-7 位根据上面定义的规则描述了正确的版本号,则转到项目 d。否则,请停止该过程,因为 MIFARE 经典版或 MIFARE Plus 标签未处于有效状态。
    4. 如果 GPB 的读取访问条件字段(位 2-3)值等于 00b,并且 GPB 的写入访问条件(位 0-1)值等于 00b 或 11b,请使用 第 5.1.3 节中指定的读取操作读取相关 NFC 扇区的数据块,查找 NDEF 消息 TLV, 并转到项目 E。 否则,如果 GPB 的读取访问字段值不同于 00h,或者 GPB 的写入访问条件(位 0-1)值不同于 00b 和 11b,则找到专有的 NFC 扇区(请参阅下面的 NFC 扇区说明),然后转到项目 f。
    5. 如果找到 NDEF 消息 TLV,这是(即第一个)强制性 NDEF 消息 TLV,然后转到第 5 项。 否则,如果未找到 NDEF 消息 TLV,请转到项目 f。
    6. 如果可用,请检查下一个 NFC 扇区并转到项目 a。 否则,如果没有更多 NFC 扇区可用,请停止该过程,因为未找到 NDEF 消息 TLV。 MIFARE Classic 或 MIFARE Plus 標籤未處於有效狀態。
  3. 如果必需 NDEF 消息 TLV 的长度字段不同于零,则会在 MIFARE Classic 或 MIFARE Plus 标签中检测到 NDEF 消息(请参阅 [NDEF]),并且读取器设备可以使用 NDEF 读取过程或 NDEF 写入过程。 如果长度字段等于零,则在 MIFARE Classic 或 MIFARE Plus 标签中未检测到 NDEF 消息,并且读取器设备可以使用 NDEF 写入过程(标签可能处于初始化状态)。

NDEF 检测过程与有效的 NDEF 消息无关。 它从 NDEF 消息 TLV 的长度字段中读取 NDEF 消息长度,但不分析 NDEF 消息。

读卡器设备应忽略并跳过专有的NFC扇区。 专有的NFC扇区被定义为NFC扇区,即:NFC扇区的公钥A不可验证,或者GPB的读访问字段值与00b不同,或者GPB的写入访问条件(位0-1)值不同于00b和11b。

每次身份验证操作、读取操作或写入操作失败时,MIFARE Classic 或 MIFARE Plus 都会保持静默状态,不再响应任何操作。

命令。在这种情况下,要继续NDEF检测程序,需要重新激活并选择MIFARE Classic或MIFARE Plus。

NDEF 读取过程 #

读取器设备使用 NDEF 读取过程从必需的 NDEF 消息 TLV 读取 NDEF 消息。 在读取 NDEF 消息之前,应执行 NDEF 检测程序,并且 MIFARE Classic 或 MIFARE Plus 标签应处于有效状态。

使用 NDEF 读取过程,读取器设备应使用一个或多个读取操作从强制 NDEF 消息 TLV 读取整个 NDEF 消息。 要读取的 NDEF 消息的长度从必需的 NDEF 消息 TLV 的长度字段中提供。

如果强制性 NDEF 消息 TLV 存储在一个或多个 NFC 扇区中,则读取器设备应能够使用 NFC 扇区的公钥 A 验证所有这些扇区(请参阅 表 6)。 如果身份验证过程失败,MIFARE Classic 或 MIFARE Plus 标签将不处于有效状态。

NDEF 写入过程 #

读取器设备应使用 NDEF 写入程序在 MIFARE Classic 或 MIFARE Plus 标签内写入包含 NDEF 消息的强制性 NDEF 消息 TLV。

NDEF 写入过程使用读取和写入操作(请参阅第 5.1.3 节和第 5.1.4 节)。

要写入NDEF消息,MIFARE Classic或MIFARE Plus标签应处于初始化或读/写状态,即强制性NDEF消息TLV应已存在于MIFARE Classic或MIFARE Plus标签中。

NDEF write procedure

要执行 NDEF 写入过程,读取器设备应在 MIFARE Classic 或 MIFARE Plus 标签上执行以下操作:

  1. 使用 NDEF 检测过程(请参阅 第 1.4.1 节)查找必需的 NDEF 消息 TLV。 如果找到必需的 NDEF 消息 TLV,请转到第 2 项。 否则,如果未找到 NDEF 消息 TLV,请结束该过程。
  2. 如果 NDEF 消息 TLV 的可用内存大小等于或大于 NDEF 消息大小,则应使用以下一个或多个写入操作按以下顺序执行以下操作:
    1. 强制性 NDEF 消息 TLV 的长度字段应为一个字节长,其值应设置为 00h,
    2. 新的 NDEF 消息应写入必填 NDEF 消息 TLV 的值字段中,并且
    1. 必填 NDEF 消息 TLV 的长度字段应更新为 NDEF 消息的长度。

否则,如果 MIFARE Classic 或 MIFARE Plus 标签中没有足够的可用内存空间,则 NDEF 消息不得写入 MIFARE Classic 或 MIFARE Plus 标签中。

  1. 如果第 2 项成功完成,则读取器设备应使用写入操作将终结符 TLV 写入 NDEF 消息 TLV 之后的下一个字节。当强制性 NDEF 消息 TLV 在最后一个可用 NFC 扇区(即扇区编号最大的 NFC 扇区)的最后一个字节结束时,不得写入终结者 TLV。

关于操作项2。b,写入找到的NDEF消息TLV的值字段应为下一个操作项2所需的长度字段留下1或3个字节。c 用于存储 NDEF 消息的长度。

NDEF 写入过程不会更改必需的 NDEF 消息 TLV 的起始位置。

NDEF 写入过程可以在连续的 NFC 扇区(MAD 扇区 16 除外)上写入 NDEF 消息 TLV,以防使用 MIFARE Classic 4k 和 4 KB 的 MIFARE Plus。

必需 NDEF 消息 TLV 的可用内存大小是根据强制 NDEF 消息 TLV 的位置计算得出的,其总和为:

  • 包含强制 NDEF 消息 TLV 的 NFC 扇区的可用内存空间。 可用内存空间从强制 NFC 消息 TLV 的开头开始,到 NFC 扇区结束时结束,并且
  • 包含强制 NDEF 消息 TLV 的扇区之后的 NFC 扇区的整个内存空间。 以下 NFC 扇区的大小可能为 48 字节(3 个块)或 240 字节(15 个块)。 有关以下可用NFC扇区的信息应从MAD扇区中检索。

对于写入操作,当 NDEF 消息 TLV 在块中间开始时,首先需要读取未完全更新的块。

状态更改 #

本节介绍 MIFARE 经典版或 MIFARE Plus 标签可能的状态更改。 8显示了状态和它们之间的状态变化(也称为转换)。 在本应用笔记中,唯一指定的转换是从初始化到读/写。

读卡器设备可能会发出处于初始化状态、读/写状态甚至只读状态的 MIFARE Classic 或 MIFARE Plus 标签。life cycle transaction

初始化读/写的过渡 #

要执行从初始化到读/写的转换,读取器设备应执行以下操作:非空的NDEF消息TLV(长度字段不同于零)应使用NDEF写入过程替换以前的空NDEF消息TLV。 NDEF 消息 TLV 是使用 NDEF 检测过程检测到的强制性消息。

空的 NDEF 消息可用于替换非空的 NDEF 消息。