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

USB- UART замедлить передачу?

Добрый день. Возникла необходимость замедлить передачу данных из переходника USB- UART  Для общения с древней периферией без FIFO в приемном UART. Как известно, переходники USB "лепят" байты в пакете с минимальным задержками между ними. Приемная часть от такого захлебывается. Передавть по одному байту на 1 мс на одну транзакцию USB получается совсем томозно. Возникла идея использовать hardware flow control для введения задержек между байтами. Вот нашел такую схему

Но тут одновибратор, формирующий задержку имхо переусложнен. Есть подобные схемы на 555 таймере для переключения направления RS485.

А теперь вопрос- некторые схемы USB UART не успевают задержать передачу до начала второго байта. Кто -нибудь изучал требования к CTS сигналу для надежной отсечки по одному байту?

UART-cts delay.png

RS485 delay dir 555.png

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


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

Лучшие результаты достигал на Exar'овских (MaxLinear) конвертерах, ЕМНИП. FTDI - похуже. Поищу записи.

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


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

FTDI вроде высылает еще один байт после пропадания RTS ( наверно обсуждают управляющий сигнал, а не вход CTS)

https://community.silabs.com/s/article/x-reference-using-or-bypassing-flow-control-with-uart-communication?language=en_US

а у prolific PL2303HX Rev. D вроде этого бага нет. Пока что ищу подобную же инфу для CH340 и CP2102 - пусть уж будет все в одном месте.

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


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

21 час назад, khach сказал:

А теперь вопрос- некторые схемы USB UART не успевают задержать передачу до начала второго байта. Кто -нибудь изучал требования к CTS сигналу для надежной отсечки по одному байту?

В ПК если использовать типовые UART не бывает отсечки 1 байта по CTS. Совсем!!!
Классические 16550-compatible UART выдают все содержимое FIFO а у современных это 64...128 байт, USB переходники могут творить все что угодно.

 

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


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

Нет никаких проблем по быстрому слепить переходник UART<->UART на любом удобном МК. В котором один из UART-ов будет передавать с паузами. На это времени нужно  даже меньше, чем на написание постов здесь.

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


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

57 минут назад, _3m сказал:

Классические 16550-compatible UART выдают все содержимое FIFO а у современных это 64...128 байт

Откуда это следует? Как раз наоборот при hard flow у классики. Другое дело что интерированные в чипсет 16550 подобные ведит себя тоже непонятно как.

16550.jpg

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


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

35 минут назад, khach сказал:

Откуда это следует? Как раз наоборот при hard flow у классики. Другое дело что интерированные в чипсет 16550 подобные ведит себя тоже непонятно как.

Оттуда что древнее гавно 16550 аппаратно не обрабатывает сигналы flow control. Их проверяет драйвер и если сигнал готовности снят - перестает грузить fifo а передачу того что уже легло в fifo не остановить.
Электроника давно ушла вперед но с упорством баранов продолжают лепить "Industrial standart 16550-compatible UART" причем не только в ПК но и в разнообразные Arm-SOC и даже в некоторые МК, в части случаев даже прерывание TX Complete "забывают" завести. [beep-beep-beep!!!]

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


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

38 минут назад, _3m сказал:

Оттуда что древнее гавно 16550 аппаратно не обрабатывает сигналы flow control. Их проверяет драйвер и если сигнал готовности снят - перестает грузить fifo а передачу того что уже легло в fifo не остановить.

Насколько помню: В некоторых МК, в которых UART вроде как имеет аппаратный FC, это никак не влияет на передачу из TX-FIFO ранее туда уже загруженных данных. Т.е. - даже если выставлен внешний стоп CTS-ом, но в TX-FIFO уже имеются ранее загруженные данные, они продолжат передаваться до опустошения. Только драйвер (прошивка МК) может остановить передачу из TX-FIFO. Т.е. - нужна программная обработка для такого останова.

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


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

Я же привел цитату из даташита как можно более оригинального 16550 от ТИ. Они и стоят на профессиональных картах RS232-485 MOXA и прекрасно режут передачу по CTS. То что древний NS16550 не умел в аппаратный CTS так кто его видел тот NS в живую, я с трудом даташит на него нашел.   Неудобство там только одно- надо преобразовать обратно TXD в ТТЛ, потом запустить таймер-одновибратор задержки, потом обратно в +/- 12В СTS превратить.

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

Нет никаких проблем по быстрому слепить переходник UART<->UART на любом удобном МК.

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

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


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

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

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

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

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

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

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

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

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

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