У меня есть существующий, наполовину завершенный проект торгового автомата, работающий на UTC Atmel, который я хочу перенести на Pi.
Чтобы общаться с периферийными устройствами, такими как монетоприемник, он должен поддерживать шину Multi-Drop, которая имеет 9-битный интерфейс последовательного порта данных (плюс старт, стоп и биты четности).
Я изучил трудный путь с платой Atmel, которая взламывает те, которые можно найти в сети, которые полагаются на использование бита четности в качестве 9-го бита данных, что может вызвать проблемы с синхронизацией - их трудно обнаружить и исправить (поэтому, пожалуйста, не сослать меня на это или подобное. Спасибо).
Кто-нибудь знает, если / где я могу купить настоящий 9-битный последовательный порт для Pi (бонусные баллы, если он может каким-то образом работать с нулем Pi).
Может быть, есть шляпа? Или я мог бы легко (у меня есть как / w парень, с небольшим знанием h / w) использовать другую плату для обработки 9-битового UART данных и управления этим с Pi?
Ответы:
Моя библиотека pigpio поддерживает чтение и запись 9-битных последовательных данных. Он использует битовые удары, так что вы можете использовать любой доступный GPIO.
Если я правильно помню, любые скорости 19,2 кбит / с или ниже были довольно стабильными.
Какие биты в секунду вам нужны?
Читать ( C , Python ) немного проще, чем писать ( C , Python ).
источник
Мне был назначен проект для запуска торгового автомата с закусками, который использует протокол MDB для оплаты, и я завершил проект, используя Pi Zero (Orange).
Я пробовал 9-битные аппаратные последовательные и программные последовательные библиотеки и имел проблемы с синхронизацией на Pi Zero. 9-битная последовательная связь MDB стала болью. Протокол MDB говорит, что периферийные устройства должны иметь допуск% 5 для синхронизации последовательной связи, однако разные поставщики периферийных устройств имеют разные допуски, несовместимые с протоколом MDB. Когда вы думаете, что установили последовательную связь, но попробовали периферийное устройство оплаты другого поставщика, это просто не работает. Так что не полагайтесь на данные протокола MDB. Я устал от реализации контроллера MDB для поставщиков с ошибками. Также некоторые периферийные устройства могут отводить чрезмерное количество тока от выводов Uart во время процесса внутренней загрузки и могут повредить уровень последовательной связи. Итак, вам лучше использовать абстракцию. Оптопары в порядке, но я бы не стал Рекомендуется обрабатывать последовательную связь MDB с помощью Pi Zero. Лучше всего использовать подход среднего уровня с использованием AVR.
Вместо того, чтобы использовать Uart на Pi Zero для связи с MDB, я использовал Atmega328 AVR для обработки MDB, опроса и т. Д. Atmega328 контролирует периферийные устройства MDB с помощью библиотеки Software Serial и отправляет данные, читаемые человеком, в Pi Zero на аппаратном последовательном соединении. Вся схема электроники, источники и изображение Pi Zero Armbian, код Python для торговых операций доступны здесь:
http://eliverse.com/content/vendiverse/
Вы можете проверить вики-страницу для получения дополнительной информации об управлении двигателями, датчиками доставки продукта, кулерами и символьными ЖК-дисплеями. Это полный проект контроллера торговых автоматов, который используется несколькими производителями торговых автоматов.
источник
Я также сделал полную демонстрацию для 9-битной эмуляции UART (основываясь на четности / нечетности). Вы можете найти его http://bohdan-danishevsky.blogspot.com/2016/10/9-bit-serial-communication-in-linux.html .
Все источники доступны на git.
Вы можете легко адаптировать его для вашего устройства. Надеюсь, вам понравится.
источник
Все серийные данные по определению 1 бит. Именно интерфейсы, считывающие и записывающие эти данные, договариваются о том, как они интерпретируют биты в значимые данные и из них.
Если вам нужно 9 бит данных, бит четности, стоп и стартовый бит. Затем вы должны конвертировать свои данные в этот формат и интерпретировать данные, которые вы читаете в этом формате. Модуль pigpio, упомянутый в другом ответе, предоставит вам необходимое аппаратное обеспечение или вы можете написать свой собственный. Если вы разрабатываете на python, я предлагаю взглянуть на модуль bitString.py Скотта Гриффитса как на библиотеку, которая позволяет довольно легко манипулировать битовыми данными.
источник
Я определенно предпочитаю аппаратную UART, а не программную реализацию, как это делает pigpio.
Вы можете использовать бит четности для 9-битной связи. Есть одна маленькая проблема: текущее ядро не имеет поддержки CMSPAR (четность пробела / метки).
Но вы можете переключить четную / нечетную четность, чтобы получить желаемое 9-е битное значение даже с текущим ядром, например:
Лучший подход IMHO - использовать небольшой патч ядра для поддержки CMSPAR:
http://marc.info/?l=linux-serial&m=145706834101241&w=2.
Он добавляет поддержку четности меток / пробелов, что позволяет сделать код немного проще.
PS Я реализовал MDB поверх последовательных с таким подходом. На Пи работает без нареканий.
PPS Patch был одобрен, и CMSPAR будет работать из коробки, начиная с ядра 4.6.
источник
Вы не можете НАДЕЖНОЕ подключение RPi последовательными непосредственно к шине MDB из - за 9-битный формат и строгие тайминги MDB. Сообщения между периферийным MDB и RPi должны быть преобразованы на лету и в режиме реального времени. Проверить эту ссылку поможет: DIY конвертер MDB-UART
источник
Принятый ответ, в котором использовался процессор Atmel с истинным 9-разрядным URT-данными, обменивающимся данными с Пи, выглядит заброшенным или взятым в коммерческое распоряжение.
Итак, я иду с https://www.vendingtools.ro/en за Eur 70, и это будет сопрягать мой Pi с шиной данных MDB 9.
[Обновить]
Смотрите также
https://www.qibixx.com/en/products/mdb-interface/
https://blog.abrantix.com/webshop/product/mdb-to-raspberry-pi/
источник