В чем разница между аппаратным управлением потоком DTR / DSR и RTS / CTS? Когда каждый из них используется? Зачем нам нужно более одного вида аппаратного управления потоком? :)
Ответы:
Есть несколько способов сделать что-то, потому что в стандарты никогда не были встроены протоколы. Вы используете любое специальное «стандартное» оборудование.
Судя по названиям, RTS / CTS кажется естественным. Однако это отсталость от потребностей, которые развивались с течением времени. Эти сигналы были созданы в то время, когда терминал пакетно отправлял экран, полный данных, но получатель мог быть не готов, отсюда и необходимость управления потоком. Позже проблема была бы обращена вспять, поскольку терминал не мог справляться с данными, поступающими от хоста, но сигналы RTS / CTS идут в неправильном направлении - интерфейс не ортогонален, и нет соответствующих сигналов, идущих в обратном направлении. Производители оборудования адаптировались как могли, в том числе с использованием сигналов DTR и DSR.
РЕДАКТИРОВАТЬ
Чтобы добавить немного больше деталей, это двухуровневая иерархия, поэтому «официально» оба должны происходить, чтобы коммуникация имела место. Поведение определено в исходном стандарте CCITT (теперь ITU-T) V.28.
DCE - это модем, соединяющий терминал и телефонную сеть. В телефонной сети был другой элемент оборудования, который отделялся от сети передачи данных, например. X.25.
Модем находится в трех состояниях: выключен, готов ( набор данных готов ) и подключен ( обнаружение носителя данных ).
Терминал ничего не может сделать, пока не будет подключен модем.
Когда модем хочет отправить данные, он поднимает RTS, и модем передает запрос с помощью CTS. Модем снижает CTS, когда его внутренний буфер заполнен.
Такая ностальгическая!
Разница между ними в том, что они используют разные булавки. Серьезно, вот и все. Причина, по которой они оба существуют, заключается в том, что изначально RTS / CTS никогда не предполагалось быть механизмом управления потоком; это было для полудуплексных модемов, чтобы координировать, кто отправляет, а кто принимает. RTS и CTS настолько часто использовались для управления потоком, что стали стандартом.
Важное отличие состоит в том, что некоторые UART (в частности, 16550) прекращают прием символов немедленно, если их хост дает им команду установить DSR в неактивное состояние. Напротив, символы все равно будут приниматься, если CTS неактивен. Я считаю, что здесь подразумевается, что DSR указывает, что устройство больше не слушает, и поэтому посылать любые дальнейшие символы бессмысленно, в то время как CTS указывает, что буфер заполняется; последний допускает определенную величину «скольжения», когда линия управления потоком изменяет состояние между выборкой DTE и следующим передаваемым символом. В (относительно) более поздних устройствах, которые поддерживают аппаратный FIFO, возможно, что некоторое количество символов может быть передано после того, как DCE установит CTS в неактивное состояние.