7 votos

¿Qué es el control de flujo RTS y CTS?

Hace poco pedí dos dongles Bluetooth para mis Arduinos para que puedan comunicarse a larga distancia. El dongles que pedí tienen un pin etiquetado como CTS-I y un pin etiquetado como RTS-0. He buscado un poco en Google y he encontrado que tienen algo que ver con el "control de flujo", ¿qué es eso?

Tengo los Arduinos comunicándose correctamente sin estos pines en uso. ¿Para qué sirven estos dos pines? ¿Debería querer usarlos? ¿Cómo puedo utilizarlos?

8voto

Alex Andronov Puntos 178

El control de flujo es un término general para designar un medio por el cual una entidad que quiere enviar información a otra puede evitar enviarla más rápido de lo que el destinatario puede aceptar. Una de las primeras formas de control de flujo que todavía existe en el uso común se llama comúnmente xon/xoff; se utilizó en la comunicación entre teletipos, en situaciones en las que un teletipo estaba utilizando su lector de cinta de papel para enviar datos a otro teletipo. Aunque una impresora de teletipo normalmente podía seguir el ritmo de un lector de cinta de papel (ambos funcionaban a diez caracteres/segundo), eso dependía de cosas como un suministro adecuado de papel. Un operador que se diera cuenta de que era necesario reemplazar el papel de un teletipo que estaba recibiendo una transmisión podía teclear Control-S para enviar un carácter XOFF, que pediría al lector de cinta de papel del otro extremo que se detuviera. Una vez sustituido el papel, el operador podía teclear Control-Q para reiniciar el lector de cinta de papel. Estos caracteres se siguen utilizando hoy en día, aunque el otro extremo de la conexión suele ser un ordenador y no un lector de cintas.

El protocolo RTS/CTS es un método de handshaking que utiliza un hilo en cada dirección para que cada dispositivo indique al otro si está o no preparado para recibir datos en un momento dado. Un dispositivo envía por RTS y escucha por CTS; el otro hace lo contrario. Un dispositivo debe poner su cable de salida del apretón de manos en nivel bajo cuando esté listo para recibir datos, y en nivel alto cuando no lo esté. Un dispositivo que desee enviar datos no debe comenzar a enviar ningún byte mientras el cable de entrada de handshake esté bajo; si ve que el cable de handshake se pone alto, debe terminar de transmitir el byte actual y esperar a que el cable de handshake se ponga bajo antes de transmitir más.

Tenga en cuenta que mientras los dispositivos idealmente nunca deberían enviar más de un byte después de que su entrada de handshake se ponga alta (si la línea se pone alta justo cuando empiezan a transmitir un carácter, deben permitir que ese carácter se transmita completamente), muchos puertos serie de PC no cumplen con esto incluso cuando el handshaking está activado. Los puertos serie permiten que el software detecte el estado del cable de handshake entrante, y esperan que el software decida cuándo los datos deben ser puestos en cola para su transmisión. Desgraciadamente, la única manera de conseguir un buen rendimiento con un puerto serie es poner en cola los datos para su transmisión con un poco de antelación al momento en que realmente se van a enviar, y muchos puertos serie de PC siempre transmitirán cualquier dato en cola tan rápido como puedan sin tener en cuenta los hilos de handshake. En consecuencia, no es raro que los puertos serie del PC envíen una docena de caracteres incluso después de que se les haya pedido que esperen.

0voto

Todd Smith Puntos 145

RTS = Solicitud de envío. El dispositivo emisor está indicando al otro extremo que se prepare para recibir, y que active su línea CTS cuando esté listo.

CTS = Clear To Send. El extremo receptor está listo ("all clear") y le dice al extremo lejano que comience a enviar los caracteres.

Hace tiempo, las conexiones semidúplex eran habituales. Eran conexiones unidireccionales, y estas señales se utilizaban para "dar la vuelta a la línea", de manera que no intentabas enviar cuando te estaban enviando algo.

El handshaking por hardware, utilizado de forma inadecuada, era un problema clásico de "el ordenador se atasca", y daba tantos problemas que la mayoría de los implementadores simplemente renunciaban a utilizar este método de handshake. Por eso tuvo éxito.

Si se siguen enviando caracteres después de que el extremo lejano diga que se detenga, esto puede deberse al "FIFO" (First-In First-Out) del dispositivo. Este puede almacenar (buffer) varios caracteres para ser enviados, por lo que el ordenador no tiene que parar y comprobar después de cada carácter. Pero, como se ha dicho, ¡a veces es difícil conseguir que se detenga! De ahí la creación de los buffers de recepción...

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X