На правах "записок" на "манжетах".
Имеется устройство, возможно, почти "безмозглое".
Задача: дойти до состояния, когда устройство можно использовать.
Тут попытка поставить вопросы и найти ответы, которые встретятся по ходу решения задачи: от вопроса подключения устройства до выбора API для работы с ним. В качестве подопытного — MF-RC522
Не так давно прилетел из Китая очень дешёвый считыватель RFID: RFID-RC522 (где-то проходит под именем MFRC522). На его примере можно как раз и посмотреть, какие возникнут вопросы и какие найдутся ответы. Не знаю, получится ли по ходу HOWTO-шка для этого девайся, там посмотрим.
Итак, устройство на руках. Здравый смысл подсказал несколько первых шагов
feedback is welcome, share your thoughts/experience/etc.
15.05 Добавил результат Self-test
Имеется устройство, возможно, почти "безмозглое".
Задача: дойти до состояния, когда устройство можно использовать.
Тут попытка поставить вопросы и найти ответы, которые встретятся по ходу решения задачи: от вопроса подключения устройства до выбора API для работы с ним. В качестве подопытного — MF-RC522
Не так давно прилетел из Китая очень дешёвый считыватель RFID: RFID-RC522 (где-то проходит под именем MFRC522). На его примере можно как раз и посмотреть, какие возникнут вопросы и какие найдутся ответы. Не знаю, получится ли по ходу HOWTO-шка для этого девайся, там посмотрим.
Итак, устройство на руках. Здравый смысл подсказал несколько первых шагов
- Осматриваем. Находим чип с надписями:
RC522
12 02
TXD6080
NXP- О! амэрикэн кампани! Вери гуд!
- Даташиттен доступен, быстро качаем.
- Гуглим.
- Быстро находится статья одного умельца. Там есть фотки и описаны несколько хороших грабель, будем иметь в виду
- Статья на известном cxem.net , содержит (сюрприз) схему. Но схема очень принципиальная, содержит только часть того, что на плате
- Впрочем нормальная схема платы тоже нашлась.
- Кстати, попутно прояснил для себя разницу между RFID и NFC. Знание — свет! :)
- Ок, вот плата. Как будем подключать?
- Уважаемый китайский производитель платы "прибил гвоздями" SPI, о чём честно предупредил при продаже
- Однако, даташит поведал, что на самом деле вариантов целых 3: UART (TTL), SPI, I2C
- Разница очевидна: SPI и I2C — хороши для сцепки с МК. Купленная плата позиционируется именно как "шилд" для Ардуино, поэтому и интерфейс установлен SPI.
- UART хорош для сцепки с PC, но тут, конечно, нельзя забывать, что это не совсем "обычный COM-порт", а UART TTL
- Несмотря на то, что производитель запаял ножки "I2C = 0" и "EA = 1", всегда можно что-то сделать, да? 😉 Один умный человек подсказал отрезать дорожку, что и было сделано для EA. Теперь, соединяя EA на питание, получаем интерфейс SPI, а на землю — UART.
- Мне ардуины не чужды, но считыватель я хотел использовать с компьютера. Поэтому МК был бы лишней прокладкой. Желаю UART!
- Ещё раз о подключении этой платки к компьютеру:
- отрезаем дорожку Vcc ←→ EA
- контактим EA ←→ GND
- подключаем UART TTL согласно даташиту
- Как убедиться, что плата работает (работает правильно?)
этот, якобы тривиальный, вопрос в некоторых случаях ставит в тупик. - Способ для богатых — осцилограф. Им, по определению, видно всё.
- Способ чуть попроще — логический анализатор.
- Способ "прямой", он же "бюджетный": смотреть на "выходе", возможно, подавая на "вход" тестовые команды
- для данной платы рецепт простой:
- переводим UART в режим 9600 8N1
- посылаем команду "выдай свою версию" и ловим ответ:
- cat /dev/ttyUSB0 > rc522.log &
- echo b7 | rax2 -s >> /dev/ttyUSB0
- как показал дальнейший процесс изучения считывателя, плата не во всех случаях работает правильно.
- Выбираем API,
- другими словами, какими программными средствами получить нужную функциональность от устройства?
- Как ни странно, бывает, что способ подключения накладывает свои рамки. Впрочем, с открытым кодом возможнсти расширить эти рамки возможно, возможно!
- Даташит поведает нам, что для нашего "подопытного" самым непосредственным "системным" способом работы является запись байтовых команд в шину (одну из перечисленных выше) и считывание данных из неё же.
- Из доступного:
- достаточно популярный проект miguelbalboa/rfid и пара других заточены для работы в Arduino и через SPI;
- из желаемого: nfc-tools/libnfc, в том числе mfoc — взломщик Mifare Classic. "Небольшая" проблемка состоит в том, что эта библиотека не поддерживает MF-RC522 и не собирается поддерживать RFID. Но появились пара ребят, которые захотели и кое-что закодили, чтобы запустить libnfc на этом чипе. Можно продолжать это благородное дело.
- Итак, есть библиотека, которая частично работает (автор патча утверждает, что nfc-anticol работает стопудово). Переходим к тестам. Пропущу длинные логи, в сухом остатке видим следующие интересные моменты:
$ LIBNFC_LOG_LEVEL=3 ./nfc-anticol 2>&1 | tee /tmp/nfc.log | histring error
...
debug libnfc.chip.rc522 RD 37: 12- вот это да! в даташите написано чёрным по белому:
MFRC522 version 1.0 software version is: 91h.
MFRC522 version 2.0 software version is: 92h. - А у нас тут "неопознанный енот"! 12h
- Смотрим дальше:
debug libnfc.driver.rc522_uart Upgrading baud rate to user-specified 115200 bps.
debug libnfc.bus.uart Serial port speed requested to be set to 115200 baud.
debug libnfc.bus.uart TX: 1f
debug libnfc.bus.uart RX: 00
debug libnfc.driver.rc522_uart rc522_uart_write ack does not match (sent 1F, received 00)
error libnfc.chip.rc522 Unable to write register 1F!- вот так.. порт на нормальные 115200 бод работать отказывается.
- Чтобы продолжать, придётся дальше работать на 9600:
name = "MFRC522"
connstring = "rc522_uart:/dev/ttyUSB0:9600"- Совершенно шокирующим оказался результат Self-test (раздел 16.1.1 даташита). На выходе - одни нули.
- Если идти ещё дальше, то получаются странные дела: при отсутвии RFID-карты около считывателя всё отрабатывает до сообщения: "Error: No tag available". А если приложить RFID-карту — ошибка при инициализации радио-части.
- Как показал эксперимент (вот она, настоящая физика!),
- чип явно нестандартный, либо работает сильно не так из-за неправильной платы. Полагаю, в данном случае второе — чисто гипотетическое предположение, которое, опять, один умный человек напомнил.
- практическое использование функций считывателя пока ещё не светит: надо выверять, что работает, а что — нет, двигаться по шагам, без хорошего обзора, сколько ещё впереди.
feedback is welcome, share your thoughts/experience/etc.
15.05 Добавил результат Self-test
Комментариев нет:
Отправить комментарий