Правда 9-битный последовательный порт данных?

10

У меня есть существующий, наполовину завершенный проект торгового автомата, работающий на UTC Atmel, который я хочу перенести на Pi.

Чтобы общаться с периферийными устройствами, такими как монетоприемник, он должен поддерживать шину Multi-Drop, которая имеет 9-битный интерфейс последовательного порта данных (плюс старт, стоп и биты четности).

Я изучил трудный путь с платой Atmel, которая взламывает те, которые можно найти в сети, которые полагаются на использование бита четности в качестве 9-го бита данных, что может вызвать проблемы с синхронизацией - их трудно обнаружить и исправить (поэтому, пожалуйста, не сослать меня на это или подобное. Спасибо).

Кто-нибудь знает, если / где я могу купить настоящий 9-битный последовательный порт для Pi (бонусные баллы, если он может каким-то образом работать с нулем Pi).

Может быть, есть шляпа? Или я мог бы легко (у меня есть как / w парень, с небольшим знанием h / w) использовать другую плату для обработки 9-битового UART данных и управления этим с Pi?

Mawg говорит восстановить Монику
источник
1
На GPIO есть последовательный интерфейс - на изображениях Raspbian и т. Д. Он был настроен для обеспечения вывода от Pi, поэтому сначала нужно отключить его, но у вас все равно будет проблема с битами, не входящими в стандартный диапазон. Этот пост на форумах также может помочь.
Уилф
1
Можете ли вы добавить оборудование в проект? Щит с UART не будет слишком сложным, и он даст вам именно то, что вам нужно, хотя он может использовать больше операций ввода-вывода, чем стоит. PIC-процессор действительно низкого уровня, вероятно, можно было бы быстро запрограммировать на преобразование между 8 и 9-битным последовательным интерфейсом, не обходясь слишком дорого или излишне тяжело для вас.
Майкл Кохне
Ты знаешь, где я мог бы купить один?
Mawg говорит восстановить Монику

Ответы:

7

Моя библиотека pigpio поддерживает чтение и запись 9-битных последовательных данных. Он использует битовые удары, так что вы можете использовать любой доступный GPIO.

Если я правильно помню, любые скорости 19,2 кбит / с или ниже были довольно стабильными.

Какие биты в секунду вам нужны?

Читать ( C , Python ) немного проще, чем писать ( C , Python ).

Джоан
источник
1
Вы на 100 * уверены? Когда я впервые начал разрабатывать, меня предупреждали о таких «взломах» и говорили, что будут проблемы со временем. Вы знаете, если кто-нибудь пробовал это с автоматом? en.wikipedia.org/wiki/Multidrop_bus and coin-acceptor.com.cn/Upload/EditorFiles/technicalfile/… (извините, я не могу дать номер сектора, так как я нахожусь за брандмауэром компании)
Моуг говорит восстановить Монику
3
Единственный опыт, который у меня есть, - это использование библиотеки между Пи и ноутбуком с последовательным USB-ключом. Тесты, которые я провел, описаны в raspberrypi.stackexchange.com/questions/27488/… . Мое программное обеспечение использует только RX / TX и заземление, поэтому если вы делаете что-то необычное с другими последовательными сигналами, у вас могут быть проблемы.
Джоан
Звучит хорошо. : Позвольте мне проверить спецификации и вернуться к вам,
говорит Моуг, восстановите Монику
2
@Mawg: вы приняли это. Значит ли это, что предложенное решение сработало надежно?
Томас Уэллер
3

Мне был назначен проект для запуска торгового автомата с закусками, который использует протокол 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/

Вы можете проверить вики-страницу для получения дополнительной информации об управлении двигателями, датчиками доставки продукта, кулерами и символьными ЖК-дисплеями. Это полный проект контроллера торговых автоматов, который используется несколькими производителями торговых автоматов.

Eliverse
источник
Это фантастический ответ, тем более что это первый ответ. Ранее я имел успех с платой Atmel с истинным 9-разрядным UART и надеялся сэкономить деньги, используя Raspberry Pi, но ваше решение настолько всеобъемлющее, что я был бы дураком не использовать его. Увы, я только программист, поэтому для прототипа я бы предпочел решение, не требующее пайки. Можете ли вы порекомендовать плату COTS?
Mawg говорит восстановить Monica
На этой странице вашего веб-сайта написано: «Если вы выполнили шаги по созданию платы Vendiverse VMC или если вы приобрели плату Vendiverse VMC». Могу ли я купить один из вас? Сколько это будет стоить? Кроме того, если вы порекомендуете какую-либо конкретную периферию MDB, можете ли вы добавить это на свой сайт? Спасибо
Mawg говорит восстановить Monica
Похоже, мои письма застряли в вашем спаме. Вы можете связаться со мной? У вас есть мой адрес электронной почты, и я все еще в Бремене,
говорит Моуг, восстановите Монику
Теперь похоже, что страница мертва, а проект заброшен :-(
Моуг говорит восстановить Монику
2

Я также сделал полную демонстрацию для 9-битной эмуляции UART (основываясь на четности / нечетности). Вы можете найти его http://bohdan-danishevsky.blogspot.com/2016/10/9-bit-serial-communication-in-linux.html .

Все источники доступны на git.

Вы можете легко адаптировать его для вашего устройства. Надеюсь, вам понравится.

кошачий коготь
источник
1

Все серийные данные по определению 1 бит. Именно интерфейсы, считывающие и записывающие эти данные, договариваются о том, как они интерпретируют биты в значимые данные и из них.
Если вам нужно 9 бит данных, бит четности, стоп и стартовый бит. Затем вы должны конвертировать свои данные в этот формат и интерпретировать данные, которые вы читаете в этом формате. Модуль pigpio, упомянутый в другом ответе, предоставит вам необходимое аппаратное обеспечение или вы можете написать свой собственный. Если вы разрабатываете на python, я предлагаю взглянуть на модуль bitString.py Скотта Гриффитса как на библиотеку, которая позволяет довольно легко манипулировать битовыми данными.

Пол Смит
источник
5
Проблема с передачей последовательных данных заключается в синхронизации. Данные не являются самосинхронизирующимися, и единственный гарантированный переход уровня находится в битах остановки / запуска. Оба конца должны поддерживать сжатый, бесперебойный выбор времени, чтобы определить, где находятся биты. Вот почему выделенное оборудование обычно используется для передачи и получения данных. Есть немного времени отсрочки.
Джоан
1

Я определенно предпочитаю аппаратную UART, а не программную реализацию, как это делает pigpio.

Вы можете использовать бит четности для 9-битной связи. Есть одна маленькая проблема: текущее ядро ​​не имеет поддержки CMSPAR (четность пробела / метки).
Но вы можете переключить четную / нечетную четность, чтобы получить желаемое 9-е битное значение даже с текущим ядром, например:

unsigned char check_parity(unsigned char v)
{
    v ^= v >> 4;
    v &= 0xf;
    return (0x6996 >> ((v ^ (v >> 4)) & 0xf)) & 1;
}

/* send 9 bits - 8 bits of byte + 1 bit of parity */
send_byte_with_parity(unsigned char byte, unsigned char parity)
{
    if (check_parity(byte) == parity) {
        options.c_cflag &= ~PARODD;
    } else {
        options.c_cflag |= PARODD;
    }
    tcsetattr(fd, 0, &options);
    write(fd, &byte, 1);
}


Лучший подход IMHO - использовать небольшой патч ядра для поддержки CMSPAR:
http://marc.info/?l=linux-serial&m=145706834101241&w=2.
Он добавляет поддержку четности меток / пробелов, что позволяет сделать код немного проще.

PS Я реализовал MDB поверх последовательных с таким подходом. На Пи работает без нареканий.
PPS Patch был одобрен, и CMSPAR будет работать из коробки, начиная с ядра 4.6.

edo1
источник
Без патча или хотя бы ссылки и более полных деталей это не ответ, и даже не полезный комментарий - кроме того, что он говорит, что это теоретически возможно.
Стив Робиллард
В нем все еще остается больше вопросов, чем ответов: как реализовать MDB, как применить исправление ядра, будет ли это работать на всех Pi или только на некоторых из них? Что еще может это сломать? Как я могу отменить это при необходимости? Этот патч безопасен? Помните, что вы знаете это, потому что вы реализовали это, а ОП нет.
Стив Робиллард
1
Я восстановил ваш ответ, поскольку вы признаете, что ваш ответ мог бы быть лучше. Я надеюсь, что вы воспользуетесь возможностью улучшить его.
Стив Робиллард
Что еще нужно добавить? Реализация MDB? Я не получил разрешение на его использование от моего работодателя.
edo1
Смотрите мой предыдущий комментарий и помните, что конечный пользователь не знает всего, что вы делаете.
Стив Робиллард
1

Вы не можете НАДЕЖНОЕ подключение RPi последовательными непосредственно к шине MDB из - за 9-битный формат и строгие тайминги MDB. Сообщения между периферийным MDB и RPi должны быть преобразованы на лету и в режиме реального времени. Проверить эту ссылку поможет: DIY конвертер MDB-UART

иван иванов
источник
0

Принятый ответ, в котором использовался процессор 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/

Mawg говорит восстановить Монику
источник