¿Cuál es la diferencia entre el control de flujo DTR / DSR y RTS / CTS?

82

¿Cuál es la diferencia entre el control de flujo de hardware DTR / DSR y RTS / CTS? ¿Cuándo se usa cada uno? ¿Por qué necesitamos más de un tipo de control de flujo de hardware? :)

Gili
fuente

Respuestas:

69
  • DTR - Terminal de datos listo
  • DSR - Conjunto de datos listo
  • RTS - Solicitud de envío
  • CTS - Borrar para enviar

Hay varias formas de hacer las cosas porque nunca hubo protocolos integrados en los estándares. Utiliza cualquier "estándar" ad-hoc que implemente su equipo.

Basándose solo en los nombres, RTS / CTS parece encajar de forma natural. Sin embargo, es al revés de las necesidades que se desarrollaron con el tiempo. Estas señales se crearon en un momento en que un terminal enviaba por lotes una pantalla llena de datos, pero el receptor podría no estar listo, de ahí la necesidad de control de flujo. Más tarde, el problema se revertiría, ya que el terminal no podía mantenerse al día con los datos provenientes del host, pero las señales RTS / CTS van en la dirección incorrecta: la interfaz no es ortogonal y no hay señales correspondientes que vayan en sentido contrario. Los fabricantes de equipos se adaptaron lo mejor que pudieron, incluido el uso de las señales DTR y DSR.

EDITAR

Para agregar un poco más de detalle, es una jerarquía de dos niveles por lo que "oficialmente" ambos deben suceder para que se produzca la comunicación. El comportamiento se define en el estándar original V.28 del CCITT (ahora ITU-T).

ingrese la descripción de la imagen aquí

El DCE es un módem que se conecta entre el terminal y la red telefónica. En la red telefónica había otro equipo que se separaba de la red de datos, por ejemplo. X.25.

El módem tiene tres estados: apagado, listo ( conjunto de datos listo es verdadero) y conectado ( detección de portador de datos )

El terminal no puede hacer nada hasta que el módem esté conectado.

Cuando el módem quiere enviar datos, genera RTS y el módem concede la solicitud con CTS. El módem reduce CTS cuando su búfer interno está lleno.

¡Qué nostálgico!

Mark Ransom
fuente
1
Bien resumido. Entonces surgió el control de flujo 'suave' xOn / xOff.
n8wrl
Nota: DTR / DSR se volvió menos común que RTS / CTS después de mediados de los 80. El kernal de Linux nunca admitió DTR / DSR: para cuando el kernal de Linux admitía DTR / DSR, la serie 232 se había vuelto obsoleta.
David
8
@david Estas señales no están restringidas a RS232, sino que también se utilizan en TTL UART. Y estos están lejos de ser obsoletos.
glglgl
Entonces, en términos de DTE (computadora) y DCE (módem), RTS / CTS asegura que el DCE (módem) no se abrume con datos y DTR / DSR asegura que el DTE (computadora) no se abrume con datos. ¿Es eso correcto?
skinnedKnuckles
@skinnedKnuckles eso es correcto a lo mejor de mi memoria. Han pasado demasiados años desde que tuve que preocuparme por estas cosas.
Mark Ransom
30

La diferencia entre ellos es que usan diferentes pines. En serio, eso es todo. La razón por la que ambos existen es que se suponía que RTS / CTS nunca fuera un mecanismo de control de flujo, originalmente; era para que los módems semidúplex coordinaran quién enviaba y quién recibía. RTS y CTS se utilizaron mal para el control de flujo con tanta frecuencia que se convirtieron en estándar.

caos
fuente
1
Me olvidé por completo del medio dúplex. Recuerdo vagamente haberlo visto en acción, en una línea combinada de impresora / lector de tarjetas. Gracias por esa respuesta.
Mark Ransom
Ahora superuser.com existe, y nos dice que en el momento de preguntar, el kernal de Linux no soportaba la señalización DTR / DSR. superuser.com/questions/345005/… . Lo que apunta a otra diferencia: la señalización DTR / DSR es menos común / no fue utilizada por módems inteligentes.
David
1

Una diferencia importante es que algunos UART (16550 en particular) dejarán de recibir caracteres inmediatamente si su anfitrión les indica que configuren DSR para que esté inactivo. Por el contrario, los caracteres se seguirán recibiendo si CTS está inactivo. Creo que la intención aquí es que DSR indique que el dispositivo ya no está escuchando, por lo que enviar más caracteres no tiene sentido, mientras que CTS indica que un búfer se está llenando; el último permite una cierta cantidad de "deslizamiento" en el que la línea de control de flujo cambia de estado entre el DTE que la toma y el siguiente carácter que se transmite. En dispositivos (relativamente) posteriores que admiten un FIFO de hardware, es posible que se transmitan varios caracteres después de que el DCE haya configurado CTS para que esté inactivo.

Rana
fuente