将MIFARE DESFire EV1配置为NDEF的NFC论坛类型4标签

时间:2016-12-20 19:19:16

标签: android tags nfc mifare ndef

我在Android中使用NFC开始学习。我可以轻松地以NDEF格式读写。

我的问题是 MIFARE DESFire EV1 ,我有一些工厂卡,我知道他们不符合 NFC论坛类型4标签规范,因此,不接受以NDEF格式读取或写入(在出厂配置时)。

我可以通过android.nfc.tech.NfcAandroid.nfc.tech.IsoDep访问代码。

到目前为止,我了解到我需要使用IsoDep.transceive()方法来传递能够构建符合NFC Forum Type 4标签的命令。

但我遇到了很多麻烦。我使用TagWriter,它可以完美地完成服务。每次我使用NDEF数据集时,它会自动执行一个例程,使该卡成为NFC论坛类型4标签,因此也就是NDEF标签。

但是,我找不到任何简单的例子来自己做这个程序。即使在阅读了规范文档NFCForum-TS-Type-4-Tag_2.0之后,我仍然非常迷失。

是否有任何实际示例来执行TagWriter应用程序的过程?

  • 识别NfcA / IsoDep(此处确定)
  • 使卡符合NFC论坛类型4标签规范
  • 开始将代码识别为android.nfc.tech.Ndef
  • 启用NDEF的读写

1 个答案:

答案 0 :(得分:4)

将MIFARE DESFire EV1准备为NFC论坛类型4标签(V2.0)的过程不是平台独立NFC论坛规范的一部分。相反,此过程由芯片制造商(NXP)在其应用说明AN11004: MIFARE DESFire as Type 4 Tag中定义。程序如下:

  1. 如果Android已经检测到Ndef代码技术,您就完成了。由于Android尝试检测NDEF标记应用程序和NDEF数据文件中包含的NDEF消息,因此找到Ndef标记技术意味着标记已经为NDEF准备(即它已经配置为NFC论坛类型4标记)。

  2. 否则,您将检查标签是否真的是DESFire EV1标签。您可以根据AN10833: MIFARE Type Identification Procedure中描述的类型识别过程并基于从DESFire标签获取的版本信息来执行此操作。

  3. 一旦你知道标签是DESFire EV1标签(并且你有足够的权限访问主应用程序以便对标签进行必要的修改,这可能需要和认证步骤),你会先创建NDEF标记应用程序。这是一个DESFire应用程序,在创建过程中将ISO 7816-4 DF名称(= AID)设置为D2760000850101。您为DESFire AID选择的值,ISO文件ID对于正确的T4T操作并不重要(请注意,对于EV1之前的DESFire生成,这是不同的)。关键设置取决于您的使用场景。在应用程序创建期间,您需要设置的唯一其他重要参数是允许应用程序中文件的ISO 7816-4文件标识符(密钥设置2字节中的第5位设置为“1”)。

  4. 选择新创建的应用程序。

  5. 创建一个新的标准数据文件,即容量容器文件,大小为15个字节。您需要将ISO 7816-4文件ID设置为E103。确保通过设置Com.Set允许普通通信。字节到0x00。设置“访问权限”字段,以便稍后在初始化期间修改文件内容。

  6. 创建另一个新的标准数据文件,即NDEF数据文件。如果您仅将标记用作NDEF标记,则通常会使用所有剩余的可用空间。将ISO 7816-4文件ID设置为E104。确保通过设置Com.Set允许普通通信。字节到0x00。将访问权限字段设置为0xE000(对于只读标记)或0xEEE0(对于应允许通过Ndef标记技术进行读写访问的标记。

  7. 选择功能容器文件并将功能容器数据写入其中:

    000F  20  003A  0034  04 06 E104 xxxx 00 yy
    

    其中xxxx是NDEF数据文件的大小,yy如果文件可以自由写入则为0x00,如果文件是只读的则为0xFF。

  8. 选择NDEF消息文件并将前2个字节写为0x0000(以表示该文件为空)。

  9. 请注意,在DESFire(EV1)卡上创建NDEF标记应用程序结构要求您使用MIFARE DESFire的本机或包装本机命令集。由于某些版本的Android会导致本机命令出现已知问题,因此最好使用包装的本机命令。您可以在DESFire产品数据表中找到有关DESFire命令集的详细信息(仅在NXP的NDA下可用)。