将 MIFARE DESFire EV1 配置为 NDEF 的 NFC Forum Type 4 标签
Configure MIFARE DESFire EV1 as NFC Forum Type 4 Tag for NDEF
我在 Android 开始使用 NFC 学习。我可以轻松地以 NDEF 格式读写。
我的问题是 MIFARE DESFire EV1,我有一些工厂卡,我知道它们不符合 NFC 论坛类型 4 标签 规范,因此不接受以 NDEF 格式读取或写入(在其出厂配置中)。
我可以通过 android.nfc.tech.NfcA
或 android.nfc.tech.IsoDep
访问标签。
到目前为止,我知道我需要使用 IsoDep.transceive()
方法来传递使我能够构建 NFC Forum Type 4 兼容标签的命令。
但是我遇到了很多麻烦。我正在使用 TagWriter,它可以完美地提供服务。每次我使用 NDEF 数据集时,它都会自动执行一个例程,使卡片成为 NFC 论坛类型 4 标签,并因此成为 NDEF 标签。
但是,我自己找不到任何简单的例子来完成这个过程。看了规范文档NFCForum-TS-Type-4-Tag_2.0,还是很迷茫
有没有实际的例子来完成TagWriter应用程序所做的过程?
- 认识
NfcA
/IsoDep
(这里ok)
- 使卡片符合 NFC Forum Type 4 标签规范
- 开始将标签识别为
android.nfc.tech.Ndef
- 开启NDEF读写
将 MIFARE DESFire EV1 准备为 NFC 论坛 Type 4 标签 (V2.0) 的过程不是平台独立 NFC 论坛规范的一部分。相反,此过程由芯片制造商 (NXP) 在其应用说明 AN11004: MIFARE DESFire as Type 4 Tag 中定义。程序大致如下:
如果 Android 已经检测到 Ndef
标记技术,您就完成了。由于 Android 尝试检测 NDEF 标签应用程序和 NDEF 数据文件中包含的 NDEF 消息,找到 Ndef
标签技术意味着标签已经为 NDEF 做好了准备(即它已经配置为 NFC论坛类型 4 标签)。
否则,您将检查标签是否真的是 DESFire EV1 标签。您可以根据 AN10833: MIFARE Type Identification Procedure 中描述的类型识别过程并根据从 DESFire 标签获得的版本信息来执行此操作。
一旦您知道标签是 DESFire EV1 标签(并且您有足够的权限访问主应用程序以便对标签应用必要的修改,这可能需要身份验证步骤) ,您将首先创建 NDEF 标签应用程序。这是一个 DESFire 应用程序,其 ISO 7816-4 DF 名称 (= AID) 在创建期间设置为 D2760000850101
。您为 DESFire AID、ISO 文件 ID 选择的值对于正确的 T4T 操作并不重要(请注意,这对于 EV1 之前的 DESFire 代是不同的)。关键设置取决于您的使用场景。在应用程序创建期间您需要设置的唯一其他重要参数是允许应用程序内的文件使用 ISO 7816-4 文件标识符(密钥设置 2 字节中的位 5 设置为“1”)。
Select新建的应用。
新建一个标准数据文件,即能力容器文件,大小为15字节。您需要将 ISO 7816-4 文件 ID 设置为 E103
。确保通过设置 Com.Set 允许普通通信。字节到 0x00。设置访问权限字段,以便您稍后可以在初始化期间修改文件内容。
创建另一个新的标准数据文件,NDEF 数据文件。如果您只将标签用作 NDEF 标签,您通常会使用所有剩余的可用 space。将 ISO 7816-4 文件 ID 设置为 E104
。确保通过设置 Com.Set 允许普通通信。字节到 0x00。将只读标签的访问权限字段设置为 0xE000,或将允许通过 Ndef
标签技术进行读写访问的标签设置为 0xEEE0。
Select能力容器文件,写入能力容器数据:
000F 20 003A 0034 04 06 E104 xxxx 00 yy
其中 xxxx
是 NDEF 数据文件的大小,如果文件可自由写入,yy
为 0x00,如果文件为只读,则为 0xFF。
Select NDEF报文文件,并将前2个字节写入0x0000(为了表示该文件为空)。
请注意,在 DESFire (EV1) 卡上创建 NDEF 标签应用程序结构需要您使用 MIFARE DESFire 的本机或包装本机命令集。由于 Android 的某些版本会导致本机命令出现已知问题,因此您最好使用包装本机命令。您可以在 DESFire 产品数据表中找到有关 DESFire 命令集的详细信息(仅在恩智浦的保密协议下提供)。
我在 Android 开始使用 NFC 学习。我可以轻松地以 NDEF 格式读写。
我的问题是 MIFARE DESFire EV1,我有一些工厂卡,我知道它们不符合 NFC 论坛类型 4 标签 规范,因此不接受以 NDEF 格式读取或写入(在其出厂配置中)。
我可以通过 android.nfc.tech.NfcA
或 android.nfc.tech.IsoDep
访问标签。
到目前为止,我知道我需要使用 IsoDep.transceive()
方法来传递使我能够构建 NFC Forum Type 4 兼容标签的命令。
但是我遇到了很多麻烦。我正在使用 TagWriter,它可以完美地提供服务。每次我使用 NDEF 数据集时,它都会自动执行一个例程,使卡片成为 NFC 论坛类型 4 标签,并因此成为 NDEF 标签。
但是,我自己找不到任何简单的例子来完成这个过程。看了规范文档NFCForum-TS-Type-4-Tag_2.0,还是很迷茫
有没有实际的例子来完成TagWriter应用程序所做的过程?
- 认识
NfcA
/IsoDep
(这里ok) - 使卡片符合 NFC Forum Type 4 标签规范
- 开始将标签识别为
android.nfc.tech.Ndef
- 开启NDEF读写
将 MIFARE DESFire EV1 准备为 NFC 论坛 Type 4 标签 (V2.0) 的过程不是平台独立 NFC 论坛规范的一部分。相反,此过程由芯片制造商 (NXP) 在其应用说明 AN11004: MIFARE DESFire as Type 4 Tag 中定义。程序大致如下:
如果 Android 已经检测到
Ndef
标记技术,您就完成了。由于 Android 尝试检测 NDEF 标签应用程序和 NDEF 数据文件中包含的 NDEF 消息,找到Ndef
标签技术意味着标签已经为 NDEF 做好了准备(即它已经配置为 NFC论坛类型 4 标签)。否则,您将检查标签是否真的是 DESFire EV1 标签。您可以根据 AN10833: MIFARE Type Identification Procedure 中描述的类型识别过程并根据从 DESFire 标签获得的版本信息来执行此操作。
一旦您知道标签是 DESFire EV1 标签(并且您有足够的权限访问主应用程序以便对标签应用必要的修改,这可能需要身份验证步骤) ,您将首先创建 NDEF 标签应用程序。这是一个 DESFire 应用程序,其 ISO 7816-4 DF 名称 (= AID) 在创建期间设置为
D2760000850101
。您为 DESFire AID、ISO 文件 ID 选择的值对于正确的 T4T 操作并不重要(请注意,这对于 EV1 之前的 DESFire 代是不同的)。关键设置取决于您的使用场景。在应用程序创建期间您需要设置的唯一其他重要参数是允许应用程序内的文件使用 ISO 7816-4 文件标识符(密钥设置 2 字节中的位 5 设置为“1”)。Select新建的应用。
新建一个标准数据文件,即能力容器文件,大小为15字节。您需要将 ISO 7816-4 文件 ID 设置为
E103
。确保通过设置 Com.Set 允许普通通信。字节到 0x00。设置访问权限字段,以便您稍后可以在初始化期间修改文件内容。创建另一个新的标准数据文件,NDEF 数据文件。如果您只将标签用作 NDEF 标签,您通常会使用所有剩余的可用 space。将 ISO 7816-4 文件 ID 设置为
E104
。确保通过设置 Com.Set 允许普通通信。字节到 0x00。将只读标签的访问权限字段设置为 0xE000,或将允许通过Ndef
标签技术进行读写访问的标签设置为 0xEEE0。Select能力容器文件,写入能力容器数据:
000F 20 003A 0034 04 06 E104 xxxx 00 yy
其中
xxxx
是 NDEF 数据文件的大小,如果文件可自由写入,yy
为 0x00,如果文件为只读,则为 0xFF。Select NDEF报文文件,并将前2个字节写入0x0000(为了表示该文件为空)。
请注意,在 DESFire (EV1) 卡上创建 NDEF 标签应用程序结构需要您使用 MIFARE DESFire 的本机或包装本机命令集。由于 Android 的某些版本会导致本机命令出现已知问题,因此您最好使用包装本机命令。您可以在 DESFire 产品数据表中找到有关 DESFire 命令集的详细信息(仅在恩智浦的保密协议下提供)。