Справжні 9-бітні дані послідовного порту?


10

У мене є вже наполовину повний проект автомата, що працює на UTC Atmel, який я хочу перенести на Pi.

Для того, щоб спілкуватися з периферійними пристроями, такими як акцептор монет, він повинен підтримувати мульти-дроп-шину, яка має інтерфейс послідовного порту з 9-ти бітовими даними (плюс біт запуску, зупинки та парності).

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

Хтось знає, чи / де я можу придбати справжній 9-бітовий послідовний порт для Pi (бонусні бали, якщо він може якось працювати з нулем Pi).

Чи, можливо, є капелюх? Або я міг би легко (у мене є хлопець, не маючи знань з ч / з), використовуючи іншу плату для обробки 9-ти бітових даних UART і керування ними від Pi?


1
На GPIO є послідовний інтерфейс - на зображеннях Raspbian і т.д. він встановлений для забезпечення виводу з Pi, тому вам доведеться відключити це спочатку, але у вас все одно виникне проблема з бітами не в стандартному діапазоні. Ця публікація на форумах може також допомогти.
Вільф

1
Чи можете ви додати апарат до проекту? Щит з UART не буде надто важким для виготовлення одного з них і дасть вам саме те, що вам потрібно, хоча він може використовувати більше вводу / виводу, ніж це варто. Дійсно низькопроцесорний процесор PIC, ймовірно, може бути швидко запрограмований на переклад між 8 та 9 бітовим серіалом, не затрачуючи занадто багато коштів або не будучи надмірно великою кількістю роботи для вас.
Майкл Коне

Ви знаєте, де я можу його придбати?
Мавг каже, що повернемо Моніку

Відповіді:


7

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

Якщо я добре пам'ятаю, будь-яка швидкість 19,2 кбіт / с або повільніше була досить стабільною.

Які біти за секунду вам потрібні?

Читання ( C , Python ) трохи легше, ніж письмове ( C , Python ).


1
Ви впевнені на 100 *? Коли я вперше почав розробляти, мене попередили від таких "хак" і сказали, що будуть проблеми з термінами. Чи знаєте ви, чи хтось спробував це з торговим автоматом? en.wikipedia.org/wiki/Multidrop_bus і coin-acceptor.com.cn/Upload/EditorFiles/technicalfile / ... (вибачте, я не можу дати номер , як розріз через Я за брандмауером компанії)
Mawg каже Моніка відновив

3
Єдиний досвід, який я маю - це використання бібліотеки між Pi та ноутбуком із 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 під час їх внутрішнього завантаження і можуть пошкодити ваш шар послідовного зв'язку. Отже, вам краще скористатися абстракцією. Оптрони добре, але все-таки я не хотів би t рекомендуємо обробляти послідовний зв'язок MDB за допомогою Pi Zero. Кращим способом є використання підходу середнього рівня за допомогою AVR.

Замість того, щоб використовувати Uart on Pi Zero для зв'язку з MDB, я використовував Atmega328 AVR для обробки MDB, опитування і т.д. Усі електронні схеми, джерела та зображення Pi Zero Armbian, код Python для вендингових операцій доступні тут:

http://eliverse.com/content/vendiverse/

Ви можете ознайомитись на сторінці wiki для отримання детальної інформації про керування двигунами, датчиками доставки виробів, кулерами та символами РК-дисплеїв. Це повний проект контролера торгових автоматів, який використовується декількома виробниками торгових автоматів.


Це фантастична відповідь, тим більше, що це перша відповідь. Раніше я мав успіх у платі Atmel із справжнім 9-бітним UART і сподівався заощадити гроші за допомогою Raspberry Pi, але ваше рішення настільки всеосяжне, що я був би дурнем не використовувати його. На жаль, я є лише програмним забезпеченням, тому для прототипу я б наголосив на необхідному рішенні без пайки. Чи можете ви порекомендувати дошку COTS?
Мауг каже, що повернемо Моніку

На цій сторінці вашого веб-сайту написано: "Якщо ви виконали кроки щодо створення плати VMC Vendiverse або якщо ви отримали плату VMC Vendiverse". Чи можу я придбати його у вас? Скільки це коштувало б? Крім того, якщо ви рекомендуєте будь-яку конкретну периферійну мережу, ви можете додати її на свій сайт? Дякую
Мауг каже, що повернемо Моніку

Схоже, мої електронні листи застрягають у вашому спамі. Ви можете зв’язатися зі мною? Ви маєте мою електронну адресу, і я все ще перебуваю в Бремені
Мауг каже, що повертаю Моніку

Зараз схоже, що сторінка мертва, а проект відмовився :-(
Мауг каже, що повернути Моніку

2

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

Усі джерела, доступні на git.

Ви можете легко адаптувати його для свого пристрою. Сподіваюся, вам сподобається.


1

Усі серійні дані за визначенням - 1 біт. Саме інтерфейси читають і записують ці дані, як домовитись про те, як вони інтерпретують біти до значущих даних і від яких.
Якщо ви хочете 9 біт даних, і біт парності, і стоп, і початковий біт. Тоді вам належить перетворити ваші дані у цей формат та інтерпретувати дані, які ви прочитали у такому форматі. Модуль pigpio, згаданий в іншій відповіді, дасть вам необхідне апаратне з'єднання, або ви можете написати своє. Якщо ви розробляєте пітон, я пропоную розглянути модуль 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 ядра.


Без виправлення або принаймні посилання та більш повних деталей це не є відповіддю, не є навіть корисним коментарем - крім того, що йдеться, це теоретично можливо.
Стів Робільярд

Це все ще залишає більше запитань, ніж відповідей: Як я впроваджую MDB, як застосувати патч ядра, чи буде це працювати на всіх Pi чи лише на деяких з них? Що ще може зламати це? Як я можу скасувати це, якщо потрібно? Чи безпечний цей пластир? Пам’ятайте, ви знаєте це, тому що ви реалізували його, ОП - не.
Стів Робіллард

1
Я визнав вашу відповідь, оскільки ви визнаєте, що ваша відповідь може бути кращою. Сподіваюся, ви скористаєтесь можливістю вдосконалити її.
Стів Робільярд

Що ще потрібно додати? Впровадження MDB? Я не отримав дозволу на відкриття вихідного коду від свого роботодавця.
edo1

Дивіться мій попередній коментар і пам’ятайте, що кінцевий користувач не знає всього, що ви робите.
Стів Робіллард

1

Ви не можете НАДІЙНЕ підключення RPi послідовними безпосередньо до шини MDB з - за 9-бітний формат і строгі тайминги MDB. Повідомлення між периферійними периферійними пристроями та RPI потрібно перетворювати на ходу та в режимі реального часу. Перевірте це посилання, це допоможе: Зроби сам перетворювач MDB-UART


0

Прийнята відповідь, яка використовувала процесор Atmel з правдивими 9-бітовими даними URT, що спілкуються з Pi, схоже, була або покинута, або прийнята комерційно.

Тому я збираюся з 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/

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.