我在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
(此处确定)android.nfc.tech.Ndef
答案 0 :(得分:4)
将MIFARE DESFire EV1准备为NFC论坛类型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”)。
选择新创建的应用程序。
创建一个新的标准数据文件,即容量容器文件,大小为15个字节。您需要将ISO 7816-4文件ID设置为E103
。确保通过设置Com.Set允许普通通信。字节到0x00。设置“访问权限”字段,以便稍后在初始化期间修改文件内容。
创建另一个新的标准数据文件,即NDEF数据文件。如果您仅将标记用作NDEF标记,则通常会使用所有剩余的可用空间。将ISO 7816-4文件ID设置为E104
。确保通过设置Com.Set允许普通通信。字节到0x00。将访问权限字段设置为0xE000(对于只读标记)或0xEEE0(对于应允许通过Ndef
标记技术进行读写访问的标记。
选择功能容器文件并将功能容器数据写入其中:
000F 20 003A 0034 04 06 E104 xxxx 00 yy
其中xxxx
是NDEF数据文件的大小,yy
如果文件可以自由写入则为0x00,如果文件是只读的则为0xFF。
选择NDEF消息文件并将前2个字节写为0x0000(以表示该文件为空)。
请注意,在DESFire(EV1)卡上创建NDEF标记应用程序结构要求您使用MIFARE DESFire的本机或包装本机命令集。由于某些版本的Android会导致本机命令出现已知问题,因此最好使用包装的本机命令。您可以在DESFire产品数据表中找到有关DESFire命令集的详细信息(仅在NXP的NDA下可用)。