Какова минимальная задержка между двумя последовательными кадрами RS232?
Я работал над созданием UART на FPGA. Я могу успешно передавать и получать отдельные символы, напечатанные на PuTTY. Однако, когда я настраиваю свою FPGA на постоянную запись больших последовательностей "A", иногда я получаю последовательности "@" или некоторые другие символы, пока не сброслю FPGA несколько раз.
Я считаю, что UART на компьютере теряет различие между стартовым битом и нулем. Задержка между двумя "A" составляет ~ 30 мкс (измеряется с помощью логического анализатора), а скорость передачи составляет 115200 8N1.
Существует ли минимальная задержка между двумя последовательными кадрами RS232?
3 ответа
Помимо скорости и количества бит данных, я думаю, что оба конца должны согласовать количество начальных битов, стоповых битов и битов четности.
См. Асинхронная последовательная связь
Выше показано, как символы разделены, но довольно идеализированы времена нарастания и спада, я думаю, что область действия покажет нечто более похожее на следующее (обратите внимание на перевернутую ось метки / пробела по сравнению с предыдущей диаграммой).
Возможно, вам следует установить более низкую скорость, возможно, ваша ПЛИС не излучает правильно сформированный сигнал на более высоких скоростях.
Также RS232 является асинхронным, я полагаю, это означает, что приемник должен синхронизировать свою синхронизацию на основе начального и конечного битов.
- А является двоичным 01000001
- @ является двоичным 01000000
Разница заключается в точном времени. При неточной синхронизации приемник может считать шесть вместо пяти, в то время как утверждается +3...15 В.
Существует ли минимальная задержка между двумя последовательными кадрами RS232?
Нет, в EIA/RS232C такого требования нет (ни минимального, ни максимального).
Начальный бит следующего символа может сразу следовать за стоповым битом символа.
Обратите внимание, что линия находится в режиме ожидания в состоянии маркировки, которое соответствует уровню стоп-бита.
Интересно, что вы не упоминаете бит Stop в кадре символов.
Я считаю, что UART на компьютере теряет различие между стартовым битом и нулем. Задержка между двумя "А" составляет ~ 30 мкс (измеряется с помощью логического анализатора)
Вы используете неправильный инструмент для этой задачи! Вы должны использовать сферу. Вы не можете проанализировать проблему синхронизации, просмотрев сэмплированную и санированную передачу аналогового сигнала.
Разница между начальным битом и нулем заключается в синхронизации. Кадры символов передаются с асинхронной скоростью. Но биты кадра должны быть синхронизированы с указанной тактовой частотой.
Для скорости 115200 бод это будет 8,68 мксек для 1-битного времени. Для 8 битов данных плюс стартовый бит и стоповый бит время кадра составляет 86,8 мксек.
Ваш вопрос подразумевает, что вы не удосужились взглянуть на спецификацию EIA/RS232C для минимального времени нарастания / спада и когда сигнал обычно дискретизируется. Интересный способ реализации HW.
Возможно, вам также следует использовать частотомер, чтобы измерить генератор скорости передачи данных на каждом конце. Несовпадение в несколько процентов обычно можно терпеть. Несоответствие может вызвать симптомы, которые вы видите.
Почему получатель не сообщает об ошибках кадрирования? Вместо того, чтобы просто смотреть на вывод, может быть, вам нужно просмотреть статистику последовательного порта, т.е. /proc/tty/driver/...
Я подозреваю, что UART все еще очень похожи на оригинальные. Они использовали тактовую частоту 16xdata для "выборки" данных, по сравнению с более ранней аналоговой схемой, в которой использовался генератор, запускаемый фронтом. Используя выборочный подход, UART может довольно точно позиционировать свое время выборки в середине импульсов и даже делать несколько выборок, чтобы быть немного более устойчивым к шуму.
Ваше описание неясно, потому что вы говорите в недавнем комментарии об "обнаружении начального бита", но ранее вы подразумевали, что вы ПЕРЕДАЕТЕ, и, следовательно, вам нечего "обнаружить".