0

所以我有一些来自 NXP 的 NTAG216 标签。它们有 888 字节的内存。如果它们仅与我的 Android 应用程序一起使用,手机会将它们识别为 888 字节。但是在我使用 Raspberry Pi 使用 libnfc 向他们写一些消息后,手机将它们识别为 238 字节长(手机和 Pi 都使用 NDEF 格式并且只写入标签的用户内存)。Pi可以读回它的消息并且可以使用整个888字节的内存,不像电话:/,如果它小于238字节,电话只能读取消息......(我使用的是兼容写入模式NTAG216 与 Pi)

有谁知道出了什么问题?

4

1 回答 1

0

所以我找到了这个问题的一些解释。并创造了某种解决方案。

问题是android的NFC库中的函数总是创建一个NDEF短消息,消息长度存储在一个字节中。这意味着 ndef 部分的最大长度仅为 256 字节。为什么 NXP-s OWN 程序发现这个标签只是 238 字节......好吧,因为它内部肯定有一些错误,更好的 android 在处理 NFC 时有一些严重的问题,因为使用微软 Lumia 这个标签发现为 888 字节长而没有任何问题。

最后,解决方案是使用高级 NFC 类并将其逐字节写入。它将更好地理解整个 NFC 的工作原理。有了这个,你可以创建自己的消息协议,比这个 NDEF 更好。对我来说,解决方案是在内存末尾使用额外的四个字节。有了这个,我可以处理比这个标签可以存储的更长的消息(2^32)。如果标签中存在 Ndef,我还会在这四个字节中指出,因为在这种情况下,我必须剪切消息的前 7 个字节。是的,您可能会发现我已经手动创建了消息的 ndef 部分(为了兼容性,我需要消息的某些部分可以被任何应用程序读取)。我只写短消息,因为 android 和 Lumia 的长消息不同(Lumia 无法读取 android 写的内容,反之亦然)。

因此,如果您想将整个内存与 android 一起使用并使用 nfc 高级功能,请享受编程的美好时光 :)。我希望在 Windows Phone 操作系统中会更容易。

于 2015-09-21T09:34:05.697 回答