Телефон неправильно распознает тег NFC после записи с помощью Raspberry

У меня есть тег NTAG216 от NXP. У них 888 байтов памяти. Если они используются только с моим Android-приложением, телефон распознает их как 888 байт. Но после того, как я напишу им сообщение с помощью Raspberry Pi, используя libnfc, телефон распознает их как 238 байт (и телефон, и Pi используют формат NDEF и записывают только пользовательскую память тега). Pi может считывать свои сообщения назад и может использовать все 888 байт памяти, в отличие от телефона:/, телефон может читать сообщение, только если оно короче 238 байт... (Я использую режим записи совместимости NTAG216 с пи)

Кто-нибудь имеет представление, что не так?

1 ответ

Итак, я нашел какое-то объяснение этой проблемы. И создал какое-то решение.

Проблема в том, что функция в библиотеке NFC андроида всегда создает короткое сообщение NDEF, а длина сообщения сохраняется в одном байте. Это означает, что максимальная длина составляет всего 256 байт с частью ndef. Почему СОБСТВЕННАЯ программа NXP обнаруживает этот тег как 238 байт... Ну, поскольку в нем определенно есть некоторые ошибки, у Android лучше есть серьезная проблема с обработкой NFC, потому что в Microsoft Lumia эти теги имеют длину 888 байт без каких-либо проблема.

Наконец, решение - использовать расширенные классы NFC и записывать их от байта к байту. Это даст лучшее понимание того, как работает весь этот NFC. С этим вы можете создать свой собственный протокол сообщений немного лучше, чем этот NDEF. Для меня решением было использовать дополнительные четыре байта в конце памяти. При этом я могу адресовать гораздо более длинные сообщения (2^32), чем могут хранить эти теги. В этих четырех байтах я также указываю, присутствует ли в теге Ndef, потому что в этом случае мне приходится вырезать первые 7 байтов сообщения. И да, как вы, возможно, узнали, я создал часть сообщения ndef вручную (для совместимости мне нужна некоторая часть сообщения, которая будет читаема любым приложением). Я пишу только короткие сообщения, потому что длинные сообщения андроида и Lumia разные (Lumia не может прочитать то, что написал андроид, и наоборот).

Так что хорошо проводите время с программированием, если вы хотите использовать всю память с Android и использовать NFC Advanced:). Я надеюсь, что это будет проще в ОС Windows Phone.

Другие вопросы по тегам