RS485 и RS232, сходство и различия

Я широко использовал связь UART RS232 между микроконтроллерами. Теперь мне нужно связать мой микроконтроллер STM32F407 по шине RS485 с устройствами. Я мало что понял о RS485, но не совсем понял некоторые моменты. Пожалуйста, поправьте меня, если я ошибаюсь в своем понимании:

  1. С точки зрения прошивки MCU оба одинаковы, поскольку мы используем одни и те же контакты для RS232 или RS485.

  2. Основное различие заключается в их уровнях напряжения сигнала и двухточечном (RS232) или многоточечном (RS485).

Общие схемы кардинально отличаются, потому что программное обеспечение должно знать, когда говорить.

Ответы (2)

В основном правильно. Для определенных конфигураций полудуплексного RS485 с обнаружением коллизий требуется сигнал включения драйвера и изменения программного обеспечения для обнаружения коллизий, которые RS232 никогда не понадобятся. В RS485 также может быть аппаратно или программно реализована адресация, которой никогда не будет в RS232.

Но для двухточечной связи вы можете использовать один и тот же код как для RS232, так и для полнодуплексного RS485.

RS232 ориентирован на байты, а как насчет RS485... ориентирован на биты или байты?
С RS-485 немного больше гибкости, так как вы можете иметь multi-master и multi-drop, но все равно все восходит к тому, что позволяет модуль UART в MCU, а не сам RS-485. UART может позволить вам отправлять 7, 8 или 9 битов между каждым стоповым и начальным битами, где дополнительный бит может быть либо битом четности, либо битом флага адреса, а полезная нагрузка может быть 7 битами или 8 битами. Вам нужно будет прочитать руководство для устройства RS-485, с которым вы взаимодействуете, чтобы увидеть подробности его протокола (что вам все равно придется сделать, чтобы узнать, какие сообщения оно отправляет и получает).
Помните, что RS-232 также может иметь бит четности в качестве 9-го бита. Так что не совсем точно сказать, что он ориентирован на байты. Это сводится к UART за приемопередатчиком RS-232 и RS-485. RS-232 и RS-485 — это просто физический, электрический уровень. Например, UART выдает стартовые и стоповые биты. Существует множество четырехъядерных энкодеров, которые выводят свои импульсы через RS-485 так же, как поток импульсов без стартовых или стоповых битов.
Полнодуплексный RS485 известен как RS422, поэтому на самом деле не существует такого понятия, как «полнодуплексный RS485».

RS232 использует несбалансированные сигналы. RS485 имеет сбалансированные сигналы, что радикально повышает помехозащищенность.

Вы правы, что несколько устройств могут использовать одни и те же провода RS485. Конечно, только один из них может передавать одновременно, но все они могут передавать по очереди. RS232 не имеет такой возможности, у каждого провода есть отдельный передатчик. RS485 нуждается в каком-то сложном программном обеспечении для поддержания правопорядка, если на одной шине есть несколько возможных передатчиков. Это общая сетевая проблема, и у нее есть несколько общих решений.

RS232 определяет, как представляются передаваемые биты и символы (= синхронизация) и квитирование для управления потоком, RS485 определяет только уровни битового напряжения, можно использовать как сложные тайминги, как он хочет.

ОШИБКИ: в комментариях утверждается, что общий формат данных асинхронной связи с начальными и стоповыми битами не является частью спецификации RS232. Пользователь Sam Gibson проверил это по текущему стандарту, так что это факт, и я был неправ.

RS485 не определяет тайминги ни больше, ни меньше, чем RS-232... UART определяет это,
RS232 имеет формат данных и определения квитирования. Может быть, время - плохой термин для этого.
Квитирование связи или программное управление потоком — вот термины, которые вам нужны. Но они по-прежнему определяются стандартом UART и не имеют ничего общего с RS485 или RS232, которые являются аппаратными стандартами. Такое же квитирование можно использовать для полнодуплексного RS485.
К сожалению, у меня нет стандартов, потому что они защищены авторским правом и являются дорогостоящим коммерческим материалом. Считаете ли вы, что такие раздаточные материалы — это дерьмо, аналог.com/media /en/technical-documentation/…
Возможно, вы правы из-за эволюции RS-232 и использования вездесущей терминологии. Но, вероятно, лучше всего рассматривать RS-232 как аппаратное обеспечение, а UART — как программное обеспечение, поскольку он часто используется с различными электрическими интерфейсами.
Никто не запрещает подключать UART по другим сигналам, кроме RS232. У музыкантов есть свои MIDI, например. Но есть ли у вас какие-либо факты, говорящие о том, что на каком-то этапе своей жизни RS232 вообще не комментировал такие вещи, как длина слова или стартовые, стоповые и биты четности?
@ user287001 - Привет, к вашему сведению, у меня есть копия RS-232-F (последняя версия - теперь называется ANSI/TIA/EIA-232-F). Он действительно не определяет формат данных как формат запуска/данных/остановки (т.е. встроенные часы), который мы используем с UART. На самом деле этого сказать нельзя, потому что RS-232 также (теперь редко!) используется для передачи данных между устройствами с синхронными потоками данных. Часы, необходимые для этих синхронных данных, находятся на контактах 15, 17 (и иногда на 24) стандартного 25-контактного разъема. Данные (все еще на контактах 2 и 3) не имеют стартовых или стоповых битов. Да, это означает ссылку, которую вы нашли на Analog.com (продолжение)
(продолжение) ... неверно, потому что предполагается, что RS-232 используется для асинхронных данных, и поэтому он показывает этот формат данных. Конечно, сейчас это наиболее распространенное использование, как мы знаем. Но это не меняет того факта, что использовались данные синхронизации по RS-232 (давным-давно я выполнял декодирование протокола как часть устранения неполадок таких соединений, поэтому я знаю, что это часть стандарта RS-232). Просто теперь асинхронность настолько распространена, что для многих людей (и в этом документе Analog.com) формат RS-232 = UART (т.е. запуск/данные/стоп), но строго это не так, и стандарт RS-232 не говорит что. Надеюсь, это поможет!
@SamGibson Казалось бы, убеждения и общепринятые практики - плохая замена знаниям. Спасибо! Я скоро исправлю свой текст.
@ user287001 - Рад, что смог помочь :-) Я подозреваю, что синхронизация данных по RS-232 сейчас настолько редка, что многие люди ее не видели. (Я не использовал его более 20 лет, но кое-что из задействованного оборудования IBM, возможно , все еще где-то используется...) Вот что происходит со стандартом, впервые определенным в 1960-х годах, который использовался для всех видов устройств, которые сейчас устарели, но этот стандарт все еще используется! Все меньше и меньше остается в живых людей, работавших на этих устаревших устройствах, так что знания потихоньку теряются...
Это действительно поднимает вопрос о том, где определяются старт-стоповые биты, потому что я только что знал, что RS-232 указывает только аппаратное обеспечение, но до сих пор понятия не имею, где указан логический уровень.