Android:卡仿真 - 使用 PN532 nfc 模块读取 ndef 消息

Android: card emulation - read ndef message with PN532 nfc module

我有一个 LG D320n Android phone,elechouse 的 PN532 nfc 模块和 Stollmann 的 NFCPlayer,我可以用它正确读取 NFC 标签。

我从这里测试了一个样本:https://github.com/grundid/host-card-emulation-sample

当我将一个 Android 设备读取为标签并将另一个 Android 设备读取为 reader 时,它工作正常。但是我无法通过 NFCPlayer 读取 Android 设备作为带有 PN532 reader 的标签。我希望 reader 从作为标签的 Android 设备读取 NDEF 消息,但 NFCPlayer 甚至无法识别 Android 设备。我想我必须在 Android 方面写一些修改,但我不知道该怎么做。我认为我对 NFC 通信和 HCE 的工作原理了解不够,尽管我读到了: https://developer.android.com/guide/topics/connectivity/nfc/hce.html

如果有任何指南可以帮助我理解我在这里缺少什么,我将不胜感激。

grundid example app 应该被 NFCPlayer 发现为 "legacy tag"(标签 "R/W: Legacy"),因为它没有实现 NDEF 抽象层。在该选项卡上,您可以与仿真智能卡交换 PDU(在 HCE 的情况下为 APDU)。示例应用程序的有效 APDU 为

00 A4 04 00 07 F0010203040506 00

您可以将此 APDU 键入 PDU 字段并单击 "Exch. PDU" 按钮来发送。请注意,g运行did HCE 应用程序甚至没有实现 ISO/IEC 7816-4 响应 APDU。因此,您可能 运行 遇到一些非接触式智能卡读卡器的问题。

如果您希望 NFCPlayer 发现您的模拟智能卡作为包含 NDEF 消息的 NFC 论坛类型 4 标签(选项卡 "R/W: NDEF"),您需要实施 NFC 论坛类型 4 标签操作规范(如由 NFC Forum. This specification defines how data must be stored on an (emulated) ISO/IEC 14443-4 smartcard to be interpreted as NDEF tag. As a starting point you could use this NDEF on HCE example app 定义(尽管该代码的质量和可靠性值得怀疑)。此示例实现了用于存储 NDEF 数据的智能卡文件系统。