NFC - Android 设备无法读取从 ACR122U (PN532) 模拟的 Type 4 NDEF 标签内容
NFC - Android device can't read Type 4 NDEF tag content emulated from ACR122U (PN532)
我正在编写 C# 应用程序以在内部通过 ACR122U, which uses PN532 模拟 NFC 标签。我希望 Android 读取简单的 URI NDEF 标签。
我可以使用 NFC Forum Type 4 Tag protocol 与 Android 通信,Android 检测到标签,但无法读取 NDEF 文件 - 使用 NFC 工具应用进行了检查。
通信看起来像这样:
tgInitAsTarget:
> FF-00-00-00-27-D4-8C-05-04-00-12-34-56-20-01-FE-05-01-86-04-02-02-03-00-4B-02-4F-49-8A-00-FF-FF-01-01-66-6D-01-01-10-02-00-00-00-00
< D5-8D-08-E0-80-90-00
> FF-00-00-00-02-D4-86 // tgGetData
< D5-87-00-00-A4-04-00-07-D2-76-00-00-85-01-01-00-90-00 // NDEF Tag applcation select
> FF-00-00-00-04-D4-8E-90-00 // optional File Control Information not provided
< D5-87-00-00-A4-00-0C-02-E1-03-90-00 // Capability Container select
> FF-00-00-00-04-D4-8E-90-00 // OK
< D5-87-00-00-B0-00-00-0F-90-00 // ReadBinary data from CC file
> FF-00-00-00-13-D4-8E-00-0F-20-00-FF-00-FF-04-06-E1-04-00-14-00-00-90-00 // CC content as per protocol
< D5-87-00-00-A4-00-0C-02-E1-04-90-00 // NDEF Select command
> FF-00-00-00-04-D4-8E-90-00 // OK
< D5-87-00-00-B0-00-00-02-90-00 // ReadBinary NLEN field from NDEF file
> FF-00-00-00-06-D4-8E-00-12-90-00 // NDEF will have 18 (12h) bytes
< D5-87-00-00-B0-00-02-12-90-00 // ReadBinary NDEF file
> FF-00-00-00-16-D4-8E-00-10-D1-01-0C-55-01-67-6F-6F-67-6C-65-2E-63-6F-6D-2F-90-00 // NDEF content - Well known URI type: google.com/
一些有用的提示:
- FF-00-00-00 表示发送到 NFC 设备的伪 APDU,如果我们想模拟而不是与实际卡通信,每个 APDU 都需要以它开头
- D5-87-00是tgGetData命令输出的前缀,PN532每次成功响应都以此开头
- D4-8E 是 PN532 tgSetData 命令前缀。因此,在仿真模式下从应用程序发送的每个命令应如下所示:
FF-00-00-00-(length)-D4-8E-...-90-00
- 为了更好的可读性,我排除了 tgSetData 和 tgGetData 命令
看来我通信的最后一步一定是哪里做错了。 NDEF 文件格式是否正确?
确实是上一条消息的问题。
就在那之前 Android 从偏移量 02 请求 NDEF 内容:
< D5-87-00-00-B0-00-02-12-90-00
最后一条消息包括整个 NDEF 内容,包括前 2 个字节的大小:00-10。这必须删除:
FF-00-00-00-14-D4-8E-D1-01-0C-55-01-67-6F-6F-67-6C-65-2E-63-6F-6D-2F-90-00
这有效并且 Android 打开 google.com。
我正在编写 C# 应用程序以在内部通过 ACR122U, which uses PN532 模拟 NFC 标签。我希望 Android 读取简单的 URI NDEF 标签。
我可以使用 NFC Forum Type 4 Tag protocol 与 Android 通信,Android 检测到标签,但无法读取 NDEF 文件 - 使用 NFC 工具应用进行了检查。
通信看起来像这样:
tgInitAsTarget:
> FF-00-00-00-27-D4-8C-05-04-00-12-34-56-20-01-FE-05-01-86-04-02-02-03-00-4B-02-4F-49-8A-00-FF-FF-01-01-66-6D-01-01-10-02-00-00-00-00
< D5-8D-08-E0-80-90-00
> FF-00-00-00-02-D4-86 // tgGetData
< D5-87-00-00-A4-04-00-07-D2-76-00-00-85-01-01-00-90-00 // NDEF Tag applcation select
> FF-00-00-00-04-D4-8E-90-00 // optional File Control Information not provided
< D5-87-00-00-A4-00-0C-02-E1-03-90-00 // Capability Container select
> FF-00-00-00-04-D4-8E-90-00 // OK
< D5-87-00-00-B0-00-00-0F-90-00 // ReadBinary data from CC file
> FF-00-00-00-13-D4-8E-00-0F-20-00-FF-00-FF-04-06-E1-04-00-14-00-00-90-00 // CC content as per protocol
< D5-87-00-00-A4-00-0C-02-E1-04-90-00 // NDEF Select command
> FF-00-00-00-04-D4-8E-90-00 // OK
< D5-87-00-00-B0-00-00-02-90-00 // ReadBinary NLEN field from NDEF file
> FF-00-00-00-06-D4-8E-00-12-90-00 // NDEF will have 18 (12h) bytes
< D5-87-00-00-B0-00-02-12-90-00 // ReadBinary NDEF file
> FF-00-00-00-16-D4-8E-00-10-D1-01-0C-55-01-67-6F-6F-67-6C-65-2E-63-6F-6D-2F-90-00 // NDEF content - Well known URI type: google.com/
一些有用的提示:
- FF-00-00-00 表示发送到 NFC 设备的伪 APDU,如果我们想模拟而不是与实际卡通信,每个 APDU 都需要以它开头
- D5-87-00是tgGetData命令输出的前缀,PN532每次成功响应都以此开头
- D4-8E 是 PN532 tgSetData 命令前缀。因此,在仿真模式下从应用程序发送的每个命令应如下所示:
FF-00-00-00-(length)-D4-8E-...-90-00
- 为了更好的可读性,我排除了 tgSetData 和 tgGetData 命令
看来我通信的最后一步一定是哪里做错了。 NDEF 文件格式是否正确?
确实是上一条消息的问题。 就在那之前 Android 从偏移量 02 请求 NDEF 内容: < D5-87-00-00-B0-00-02-12-90-00
最后一条消息包括整个 NDEF 内容,包括前 2 个字节的大小:00-10。这必须删除:
FF-00-00-00-14-D4-8E-D1-01-0C-55-01-67-6F-6F-67-6C-65-2E-63-6F-6D-2F-90-00
这有效并且 Android 打开 google.com。