Online Store

MIFARE Classic 和 MIFARE Plus IC 存储器 NDEF 数据映射方法

MIFARE 应用程序目录 #

MIFARE Classic 和 MIFARE Plus IC 的内存数据映射 NDEF 方法使用 MIFARE 应用程序目录结构 (MAD)。

MIFARE 应用程序目录 (MAD) 标识存储在每个内存扇区中的信息属于哪个应用程序。

已指定两个 MIFARE 应用程序目录:

      1. MIFARE 应用程序目录 1 (MAD1):MAD1 可用于任何符合 MIFARE Classic 的产品。 MAD1 位于 MAD 扇区(扇区 00h),如果 MAD1 用于内存大小大于 1KB 的产品,则 MAD1 只能使用和寻址 1KB 内存。 因此,剩余内存不用于 NDEF 存储,并保持空闲状态。
      2. MIFARE 应用程序目录 2 (MAD2):MAD1 可用于内存大小大于 1KB 的任何符合 MIFARE Classic 的产品。 MAD2 不适用于内存大小小于或等于 1KB 的产品。 MAD2 位于 MAD 扇区(扇区 00h 和 10h)

对于每个应用程序,MAD 关联一个唯一的应用程序标识符 (AID)。 应用程序标识符 (AID) 存储在 MAD 扇区 00h 内。

AID 长度为两个字节,分为 2 个字段,每个字段一个字节:

  1. 标识应用程序所属集群的函数集群代码(1 字节),以及
  2. 标识群集内应用程序的应用程序代码(1 个字节)。 有关 MAD1 和 MAD2 的更多信息。

MAD 扇区的通用字节 (GPB) 应设置为等于 1b 的 DA 位(DA 位是 GPB 的 MAD 可用位)。

所有当前未使用的扇区都应使用标记颁发者定义的密钥进行写保护,以防止意外重新定义访问条件和密钥。 建议对所有自由扇区使用不同的键。 这使得将来可以将某些扇区释放给新的服务提供商,而无需释放所有免费扇区。

MAD 扇区访问 #

存储 MAD1 和 MAD2 的内存扇区(请参阅 [MAD])使用密钥 A 和密钥 B 进行保护。 根据 [MAD] 内存扇区有:

        • MAD1:MAD 扇区为 00h(扇区 0),并且
        • MAD2:MAD 扇区为 00h 和 10h(扇区 0 和扇区 16)。

任何人都应被允许阅读MAD扇区。 这是通过使用 1 中所述的公钥 A 实现的(另 [MAD]请参阅)。

选项卡le 1. 公钥 MAD 扇区的值

字节 0 字节 1 字节 2 字节 3 字节 4 字节 5
A0h A1小时 A2小时 A3小时 A4小时 A5小时

MAD 扇区的访问位设置为:

        • 2 中所述,如果 MAD 扇区已授予读写访问权限,或
        • 3 中所述,如果 MAD 扇区已授予只读访问权限(另 [MF1K, MF4K, MFPLUS]请参阅)。

在这种情况下,术语“授予读写访问权限”意味着对于先前已使用密钥 B 进行身份验证的 MAD 扇区,可以读取和写入除扇区尾部块之外的所有扇区块(有关更多详细信息,请参阅 2)。

相反,术语“授予只读访问权限”意味着对于先前已使用表 1 的公钥 A 或密钥 B 进行身份验证的 MAD 扇区,可以仅读取除扇区尾部块之外的所有扇区块(有关更多详细信息,请参阅表 5)。

使用键 A 始终只能读取 MAD 扇区的块。 授予读/写访问权限或只读访问权限时,扇区尾部具有特定的访问配置(请参阅表 2 3)。

MAD 扇区应通过密钥 B(例如由标签颁发者定义)进行写保护,或使用访问位将 MIFARE Classic 和 MIFARE Plus 标签设置为只读。

表2. 授予读取和写入访问权限的 MAD 扇区的访问位设置

MAD1 或 MAD2 的扇区 0 和 MAD2 的扇区 16 的访问位设置
访问位 言论
C1 0 C20 C30 100bi 块 0 使用密钥 A 或密钥 B 读取,并使用密钥 B 写入
C1 1 C21 C31 100乙 块 1 使用密钥 A 或密钥 B 读取,并使用密钥 B 写入
C1 2 C22 C32 100乙 块 2 使用密钥 A 或密钥 B 读取,并使用密钥 B 写入
C1 3 C23 C33 011b 扇区拖车块:

  • 密钥 A 用密钥 B 写入,从不读取,
  • 访问位使用密钥 A 或密钥 B 读取,并使用密钥 B 写入,
  • 密钥 B 使用密钥 B 写入,从不读取。
i. 扇区 0(制造商块) 访问 C10 C20 C3 0 的建议

表3。 授予只读访问权限的 MAD 扇区的访问位设置

MAD1 或 MAD2 的扇区 0 和 MAD2 的扇区 16 的访问位设置
访问位 言论
C1 0 C20 C30 010乙 使用密钥 A 或密钥 B 读取块 0
C1 1 C21 C31 010乙 使用密钥 A 或密钥 B 读取块 1
C1 2 C22 C32 010乙 使用密钥 A 或密钥 B 读取块 2
C1 3 C23 C33 110乙 扇区拖车块:

  • 密钥 A 永远不会被写入和读取,
  • 访问位使用密钥 A 或密钥 B 读取,但永远不会写入,
  • 密钥 B 永远不会写入和读取。
i. 扇区 0(制造商块) 访问 C10 C20 C3 0 的建议

TLV块 #

TLV 块由一到三个字段组成:

T(标签字段或T字段)应标识TLV块的类型(见表9),并应由编码从00h到FFh的数字的单个字节组成。 标记值 01h、02h、04h 到 FCh 和 FFh 保留供将来使用。

L(长度字段或 L 字段)应提供值字段的大小(以字节为单位)。 它有两种不同的格式,由一个或三个字节组成。 阅读器设备应理解所有双长度字段格式。 图5显示了两种不同长度的场结构。 但是,根据标记字段值,长度字段可能不存在。

  • 单字节格式:单字节格式应编码 00h 和 FEh 字节之间的值字段长度。 如果值介于 00h 和 FEh 之间,则此字节应解释为基数。 如果它包含 FFh,则值应解释为指定长度字段由多个字节组成的标志。
  • 三个连续字节格式:此格式应编码 00FFh 和 FFFEh 字节之间的值字段长度。 假定第一个字节是一个等于 FFh 的标志,表示另外两个字节长度应被解释为一个字。 如果该值介于 00FFh 和 FFFEh 之间,则该单词应解释为基数。 值 FFFFh 保留供将来使用 (RFU)。

V(值字段或 V 字段)如果长度字段等于 00h 或没有长度字段,则不应有值字段,即 TLV 块为空。 如果存在长度字段并指示值字段 N 的长度大于零 (N>0),则值字段应由 N 个连续字节组成。

表 4 列出了本文档指定的 TLV 块,这些块将在以下各节中描述。

表 4. 定义的 TLV 

TLV 区块名称 标记字段值 简短说明
空 TLV 00h 它可能用于填充内存区域,阅读器设备应忽略这一点
NDEF 消息 TLV 03小时 它包含 NDEF 消息
专有TLV 外出 标记专有信息
终结者 TLV 费赫 数据区域中的最后一个 TLV 块

读取器设备应按照以下规则以特定顺序在数据区域内写入TLV块:

  • TLV 块应从具有最小地址的 NFC 扇区(包含 NDEF 数据的扇区)的块 0 的字节 0 开始写入。
  • TLB 块可以跨两个或多个 NFC 扇区进行记忆。
  • 如果存在,终结者TLV是MIFARE Classic和MIFARE Plus标签上的最后一个TLV块。

NULL TLV 和 Terminator TLV 是唯一长度为 1 字节的 TLV 块(例如,仅由 Tag 字段组成,见下文)。

读取器设备应忽略并跳过那些使用保留标记字段值的TLV块(见上文)。 要跳过具有保留标记字段值的TLV块,读取器设备应读取长度字段以了解值字段的长度。

仅由标签字段组成的TLV模块的未来定义与本应用笔记不向后兼容。

NDEF 消息 TLV #

至少有一个NDEF消息TLV应始终存在于MIFARE经典和MIFARE Plus标签中。 NDEF 消息 TLV 将 NDEF 消息存储在“值”字段中。 读取器设备应能够读取和处理通过 NDEF 检测程序找到的 NDEF 消息 TLV(也称为强制 NDEF 消息 TLV 或第一个 NDEF 消息 TLV);无论如何,可能存在进一步的NDEF消息TLV块。 下面显示了NDEF消息TLV的3个TLV字段的编码:

T 应等于 03h(见表 4)。

L 应等于存储的 NDEF 消息的大小(以字节为单位)。

V 应存储 NDEF 消息。

空的 NDEF 消息 TLV 应定义为 L 字段等于 00h 且没有 V 字段的 NDEF 消息 TLV(即 V 字段中不存在 NDEF 消息,请参阅 [NDEF])。

非空 NDEF 消息 TLV 可能包含空或非空的 NDEF 消息。

专有TLV #

专有TLV包含专有信息。 MIFARE Classic 和 MIFARE Plus 标签应包含零个、一个或多个专有 TLV。 读取器设备可能会忽略此 TLV 块中包含的数据。 下面显示了专有TLV的3个TLV字段的编码:

T 应等于 FDh(见表 4)。

L 应等于淡水河谷字段中专有数据的大小(以字节为单位)。

V 应包含任何专有数据。

空 TLV #

空 TLV 可用于填充数据区域。 MIFARE Classic 和 MIFARE Plus 标签可能包含零个、一个或多个空 TLV。 读取器设备应忽略此 TLV 块。 空 TLV 应由 1 字节标签字段组成。 下面显示了空 TLV 的标记字段的编码:

T 应等于 00h(见表 4)。

L 不得出席。

V 不应在场。

终结者 TLV #

终结者TLV可能存在于MIFARE Classic和MIFARE Plus标签中,阅读器设备应能够读取/处理它。 终结者 TLV 是数据存储器区域中的最后一个 TLV 块。 终结者 TLV 应由 1 字节标签字段组成。 在终结者TLV的标签字段的编码下方显示:

T 应等于 FEh(见表 4)。

L 不得出席。

V 不应在场。