将MIFARE DESFire EV1配置为NFC论坛类型4标签以支持NDEF。

4

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

我的问题出在MIFARE DESFire EV1上,我有一些工厂卡片,我知道它们不符合NFC Forum type 4 Tag规范,因此在其工厂配置下无法被读取或写入NDEF格式。

我可以通过android.nfc.tech.NfcAandroid.nfc.tech.IsoDep访问标签。

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

但是我遇到了很多麻烦。我正在使用TagWriter,它完美地完成了服务。每次使用NDEF数据集时,它会自动执行一个例程,使卡片成为NFC Forum Type 4标签,因此也是NDEF标签。

然而,我找不到任何简单的示例来执行这个过程。即使阅读了规范文档NFCForum-TS-Type-4-Tag_2.0,我仍然很迷茫。

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

  • 识别NfcA/IsoDep(在这里没问题)
  • 使卡片符合NFC Forum Type 4标签规范
  • 开始识别标签为android.nfc.tech.Ndef
  • 启用NDEF的读写
1个回答

7
准备MIFARE DESFire EV1作为NFC Forum Type 4 Tag (V2.0)的过程不是平台无关的NFC Forum规范的一部分。相反,这个过程是芯片制造商(NXP)在他们的应用笔记AN11004:MIFARE DESFire作为Type 4 Tag中定义的。该过程如下所述:
  1. 如果Android已经检测到了Ndef标签技术,那么你就完成了。因为Android会尝试检测NDEF标签应用程序和包含在NDEF数据文件中的NDEF消息,所以找到Ndef标签技术意味着该标签已经准备好使用NDEF(即它已经配置为NFC Forum Type 4标签)。

  2. 否则,您需要检查标签是否真的是DESFire EV1标签。您可以根据AN10833:MIFARE类型识别过程中描述的类型识别过程以及从DESFire标签获取的版本信息来进行检查。

  3. 一旦确定标签是DESFire EV1标签(并且您有足够的访问权限以对标签应用必要的修改,这可能需要进行身份验证步骤),您将首先创建NDEF标签应用程序。这是一个具有其ISO 7816-4 DF名称(= AID)设置为D2760000850101的DESFire应用程序。您选择的DESFire AID、ISO文件ID的值对于正确的T4T操作并不重要(请注意,这与DESFire的前EV1一代不同)。密钥设置取决于您的使用场景。在应用程序创建期间唯一需要设置的另一个重要参数是允许应用程序内部的文件使用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(以指示该文件为空)。

请注意,在DESFire(EV1)卡上创建NDEF标签应用程序结构需要您使用MIFARE DESFire的本机或包装本机命令集。由于某些Android版本会导致本机命令出现已知问题,因此最好使用包装本机命令。您可以在DESFire产品数据手册中找到有关DESFire命令集的详细信息(仅在与NXP签署保密协议后才能获取)。

你能否对字节顺序发表评论?根据文档AN11004,“根据NDEF规范,数据以网络字节顺序(大端)表示”,但是APDU命令使用LSB优先表示法。当发送APDU命令时,上述数据(项目7)不应该以相反的顺序发出吗?我非常有信心已经正确设置了应用程序,因为NXP应用程序(Android)确实在“Desfire应用程序”标题下识别“Type 4 Tag version 1”,但是如果我转到NDEF选项卡,则显示“未填充NDEF数据存储”。因此,我不知道我的问题是CC还是NDEF文件。谢谢。 - Paul
@Paul,您能详细说明您感兴趣的领域吗?您想了解哪些APDU命令?您是在谈论MIFARE DESFire命令吗?这些使用LSB优先符号(但只影响整数字段,而不是二进制数据)。CC中的字段顺序是正确的(应按照我上面答案中的方式写入CC文件)。 - Michael Roland

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接