Jump to content

    
r2axz

Полноценный адаптер USB-Serial с 3 UART портами на STM32 Blue Pill

Recommended Posts

Попозже протестирую но только на w10. Теоретически могу сделать тестовую прошивку под 429disco для тестов другими опервционками

Кстати, использую vid  0xFFFF - от этого никаких проблем не получал

Ps: de ua1arn

 

Edited by GenaSPB

Share this post


Link to post
Share on other sites
10 minutes ago, GenaSPB said:

Попозже протестирую но только на w10. Теоретически могу сделать тестовую прошивку под 429disco для тестов другими опервционками

Кстати, использую vid  0xFFFF - от этого никаких проблем не получал

Ps: de ua1arn

 

 

Спасибо! Да, я понимаю, что можно было использовать любой VID. Но раз https://pid.codes дают, то чего бы не взять... Кроме того, у меня в дистрибутиве есть подписанный INF-файл для Win XP, 7, 8, мне хотелось подписывать "свой" VID/PID, просто по эстетическим соображениям. Но это чистой воды загон, да еще и денег стоило.

Share this post


Link to post
Share on other sites
58 minutes ago, r2axz said:

Я могу ошибаться, но PL2303 не работает с CDC Class drivers, а требует своих драйверов. Почему потребовалось эмулировать именно его?

Потому что это — полноценный преобразователь USB-serial, а стандартный CDC идет еще и как модем (но мне подсказали, что в дескрипторах писать, чтобы modemd не захватывал устройство, в "семипортовом" я так и сделал; но все равно мне больше нравится /dev/ttyUSBx, чем /dev/ttyACMx ☺).

1 hour ago, r2axz said:

есть стандарт USB CDC,

Я "смотрел в книгу и видел фигу": не нашел вообще в стандарте, что должно по interrupt передаваться, поэтому и в реализации CDC я просто игнорирую эту точку (хоть в дескрипторе она и есть — но ведь все равно она IN, так что компьютер по ней ничего не пришлет).

1 hour ago, r2axz said:

Но я согласен, раз не нужны уведомления, ваш способ вполне имеет право на жизнь.

Так в том-то и дело, что никто не парится реализацией преобразователей USB-serial, их же как грязи! Другое дело — как в вашем случае, когда можно добавить "виртуальные интерфейсы" для каких-либо целей (типа настройки и управления). Я как-то на коленке сниффер RS-232 делал, вот, как раз такую штуку очень даже удобно будет использовать: Rx одного USART будет слушать Rx, а Rx другого — слушать Tx. Но здесь уже надо будет внутри устройства это дело объединять, чтобы в один CDC всю информацию засылать...

1 hour ago, r2axz said:

Если честно, то сомневаюсь в возможности получения PID для коммерческого устройства у STM в 2020 году. 

Вот это, кстати, — одна из причин, по которой эмулировать PL2303 может быть выгодно: во-первых, нет проблем с VID/PID; во-вторых, "из коробки" работает почти на всех дистрибутивах (ну, в генте или слаке нужно будет модуль ядра собрать, но это — дело пары минут).

Можно, конечно, сделать "классический CDC" и использовать какие-нибудь незанятые VID/PID, но где гарантия, что через N лет их не займут? И в этом случае получится конфликт: udev создаст на чужую железку в вашей системе симлинк на /dev/ttyACMx, но фактически это будет какая-нибудь 3D-видеокамера…

Share this post


Link to post
Share on other sites
2 hours ago, Eddy_Em said:

Потому что это — полноценный преобразователь USB-serial, а стандартный CDC идет еще и как модем (но мне подсказали, что в дескрипторах писать, чтобы modemd не захватывал устройство, в "семипортовом" я так и сделал; но все равно мне больше нравится /dev/ttyUSBx, чем /dev/ttyACMx ☺).

Да, понимаю, эстетика далеко не самая последняя вещь в нашем деле.

2 hours ago, Eddy_Em said:

Я "смотрел в книгу и видел фигу": не нашел вообще в стандарте, что должно по interrupt передаваться, поэтому и в реализации CDC я просто игнорирую эту точку (хоть в дескрипторе она и есть — но ведь все равно она IN, так что компьютер по ней ничего не пришлет).

Вот по этому адресу https://www.usb.org/document-library/class-definitions-communication-devices-12 есть архив, внутри архива есть файл PSTN120.pdf. В нем на странице 30 есть список Abstract Control Model Notifications и в них входит SerialState, который в свою очередь описан на странице 32. И вот его я как раз и использую для уведомлений о переполнении, ошибке четности, DSR и DCD.

3 hours ago, Eddy_Em said:

Так в том-то и дело, что никто не парится реализацией преобразователей USB-serial, их же как грязи! Другое дело — как в вашем случае, когда можно добавить "виртуальные интерфейсы" для каких-либо целей (типа настройки и управления). Я как-то на коленке сниффер RS-232 делал, вот, как раз такую штуку очень даже удобно будет использовать: Rx одного USART будет слушать Rx, а Rx другого — слушать Tx. Но здесь уже надо будет внутри устройства это дело объединять, чтобы в один CDC всю информацию засылать...

Их и правда разных как грязи, но как только мне понадобились управляющие сигналы + композитное устройство + настройка инверсии, типов выходов, полярности + цена меньше пачки сигарет, то оказалось что и нет таких... Поэтому я и взялся за проект. Считаю, что сделал полезную вещь.

3 hours ago, Eddy_Em said:

Вот это, кстати, — одна из причин, по которой эмулировать PL2303 может быть выгодно: во-первых, нет проблем с VID/PID; во-вторых, "из коробки" работает почти на всех дистрибутивах (ну, в генте или слаке нужно будет модуль ядра собрать, но это — дело пары минут).

Можно, конечно, сделать "классический CDC" и использовать какие-нибудь незанятые VID/PID, но где гарантия, что через N лет их не займут? И в этом случае получится конфликт: udev создаст на чужую железку в вашей системе симлинк на /dev/ttyACMx, но фактически это будет какая-нибудь 3D-видеокамера…

Я не хотел использовать чужие VID/PID. Опасность того, что Prolific может мне "предьявить" за использование их VID для меня недопустима. Тем более, что GitHub серьезно относится к нарушениям такого рода. Вот поэтому я и взял PID у pid.codes. Если внутри usb implementers forum не случится революция, то я в безопасности. А если случится, то у меня точно будет время подумать.

Вам спасибо за пояснения! Это интересно.

Share this post


Link to post
Share on other sites
1 час назад, GenaSPB сказал:

А есть готовая программа для показа состояния RI например под винды?

Некоторые терминалки это умеют. Например "PComm Terminal Emulator" от MOXA.

Share this post


Link to post
Share on other sites
5 hours ago, GenaSPB said:

А есть готовая программа для показа состояния RI например под винды?

Вот, кстати, RI у меня не реализован, если вдруг что. Надо будет добавить.

Я использовал Termite, там есть plugin для отображения состояния управляющих линий. Плагин идет сразу с программой, его надо просто включить в настройках.

Edited by r2axz

Share this post


Link to post
Share on other sites

Сделал эксперементальную версию поддержки RS-485 и обновил статью на Хабре: https://habr.com/ru/post/530060/ Там написано про ограничения и где взять прошивку (отдельный пулл-реквест пока: https://github.com/r2axz/bluepill-serial-monster/pull/14) Нужны тесты на реальных применениях.

Share this post


Link to post
Share on other sites
On 11/27/2020 at 4:58 PM, Eddy_Em said:

Можно, конечно, сделать "классический CDC" и использовать какие-нибудь незанятые VID/PID, но где гарантия, что через N лет их не займут? И в этом случае получится конфликт: udev создаст на чужую железку в вашей системе симлинк на /dev/ttyACMx, но фактически это будет какая-нибудь 3D-видеокамера…

ЕМНИП, в правилах udev помимо VID & PID можно еще и класс устройства в явном виде указывать

Share this post


Link to post
Share on other sites

Зарелизил поддержку RS-485.

Сигнал TXA (TX Active) служит для управления микросхемами трансиверов RS-485 (DE, /RE). TXA активен во время передачи данных и переключается в неактивное состояние не более чем за 1 мкс после завершения передачи. Это соответствует спецификациям RS-485 на скоростях до 460 кБод не менее чем с двукратным запасом по времени переключения.
Возможно применение и на более высоких скоростях.

Статья на Habr: https://habr.com/ru/post/530060/

Проект на GitHub: https://github.com/r2axz/bluepill-serial-monster

Share this post


Link to post
Share on other sites
17 hours ago, Eddy_Em said:

Прерывание на TXC?

Да, в обработчике завершения передачи DMA разрешаем USART TC, а в обработчике прерывания от USART сбрасываем пин GPIO. Все как в AN3070.

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.