¿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? :)
Respuestas:
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).
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!
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.
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.