Перейти к содержанию
    

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

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

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

Ps: de ua1arn

 

Изменено пользователем GenaSPB

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

10 minutes ago, GenaSPB said:

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

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

Ps: de ua1arn

 

 

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Если не подписывать толку уходить от 65535 нету... imho.

Изменено пользователем GenaSPB

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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-видеокамера…

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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 не случится революция, то я в безопасности. А если случится, то у меня точно будет время подумать.

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

1 час назад, GenaSPB сказал:

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

5 hours ago, GenaSPB said:

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

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

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

Изменено пользователем r2axz

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

48 minutes ago, r2axz said:

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

Добавил поддержу сигнала RI.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

On 11/27/2020 at 4:58 PM, Eddy_Em said:

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Зарелизил поддержку 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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

1 hour ago, r2axz said:

И теперь не более, чем за 0.6 мкс :)

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

17 hours ago, Eddy_Em said:

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...