{"id":1851,"date":"2020-06-20T15:14:25","date_gmt":"2020-06-20T15:14:25","guid":{"rendered":"http:\/\/robots-argentina.com.ar\/didactica\/?p=1851"},"modified":"2020-11-27T01:01:06","modified_gmt":"2020-11-27T01:01:06","slug":"que-es-la-comunicacion-serie","status":"publish","type":"post","link":"https:\/\/robots-argentina.com.ar\/didactica\/que-es-la-comunicacion-serie\/","title":{"rendered":"\u00bfQu\u00e9 es la comunicaci\u00f3n serie?"},"content":{"rendered":"

La electr\u00f3nica integrada se conforma con circuitos interconectados (procesadores u otros circuitos integrados) para crear un sistema en el que est\u00e1n repartidas las funciones. Para que esos circuitos individuales intercambien su informaci\u00f3n, deben compartir un protocolo de comunicaci\u00f3n com\u00fan. Se han definido muchos protocolos de comunicaci\u00f3n para lograr este intercambio de datos y, esencialmente, cada uno puede ubicarse en una de dos categor\u00edas: 1.<\/strong> Paralelo o 2.<\/strong> Serie.<\/p>\n

Paralelo versus serie<\/strong><\/p>\n

Las interfaces paralelas transfieren m\u00faltiples bits simult\u00e1neamente. Por lo general, requieren barras (buses) de datos, que se transmiten a trav\u00e9s de ocho, diecis\u00e9is o m\u00e1s cables. Los datos se transfieren en amplios oleajes de 1s y 0s.
\n

\"\"<\/a>

Un bus de datos de 8 bits, controlado por un reloj,
que transmite un byte por cada pulso de reloj. Se utilizan 9 l\u00edneas
<\/p><\/div>
\nEn cambio, las interfaces serie<\/strong> transmiten sus datos un bit a la vez. Estas interfaces pueden operar con tan solo un cable, por lo general nunca m\u00e1s de cuatro.
\n

\"\"<\/a>

Ejemplo de una interfaz serie, transmitiendo un bit cada pulso de reloj. Solo se requieren 2 cables<\/p><\/div>
\nPiense en las dos interfaces como una fila de autom\u00f3viles: una interfaz paralela ser\u00eda una autopista de 8 carriles o m\u00e1s, mientras que una interfaz en serie es m\u00e1s parecida a una carretera de dos carriles. Durante un lapso determinado, la autopista tiene el potencial de llevar a m\u00e1s personas a destino, pero en muchos casos ese sistema sencillo de dos carriles responde a su prop\u00f3sito, y construirlo cuesta una fracci\u00f3n de los fondos.<\/p>\n

La comunicaci\u00f3n paralela ciertamente tiene sus beneficios. Es r\u00e1pida, directa y relativamente f\u00e1cil de implementar. Pero requiere muchas m\u00e1s l\u00edneas de entrada\/salida (E\/S). Si alguna vez ha tenido que traspasar un proyecto de un Arduino Mega a un Arduino UNO b\u00e1sico, sabe que las l\u00edneas de E\/S en un microprocesador pueden ser preciosas por lo limitadas. Por lo tanto, cada vez m\u00e1s optamos por la comunicaci\u00f3n en serie, sacrificando una velocidad potencial para ahorrar pines.<\/p>\n

Serie as\u00edncrono (asincr\u00f3nico)<\/strong><\/p>\n

A lo largo de los a\u00f1os, se han creado docenas de protocolos en serie para satisfacer las necesidades particulares de los sistemas integrados. USB<\/strong> (Universal Serial Bus = Bus Serie Universal) y Ethernet<\/strong> son dos de las interfaces serie de computaci\u00f3n m\u00e1s conocidas en la actualidad. Otras interfaces serie muy comunes son SPI<\/a><\/strong> (del ingl\u00e9s Serial Peripheral Interface<\/em>), I\u00b2C<\/strong> (del ingl\u00e9s Inter-Integrated Circuit) y el interfaz serie est\u00e1ndar TX<\/strong>\/RX<\/strong>, del que hablaremos aqu\u00ed. Estas interfaces serie pueden clasificarse en uno de dos grupos: sincr\u00f3nico o asincr\u00f3nico.<\/p>\n

Una interfaz serie sincr\u00f3nica siempre necesita tener una se\u00f1al de reloj junto a las l\u00edneas de datos, por lo que todos los dispositivos en un bus serie sincr\u00f3nico comparten un pulso com\u00fan de reloj. Esto hace que en una transferencia en serie m\u00e1s directa, a menudo m\u00e1s r\u00e1pida, tambi\u00e9n se requiera al menos un cable adicional entre los dispositivos de comunicaci\u00f3n. Entre los ejemplos de interfaces sincr\u00f3nicas est\u00e1n SPI<\/strong> e I\u00b2C<\/strong>.<\/p>\n

Asincr\u00f3nico significa que los datos se transfieren sin el respaldo de una se\u00f1al de reloj conectada entre sistemas. Este m\u00e9todo de transmisi\u00f3n es ideal para minimizar los cables necesarios, y en consecuencia la cantidad de pines de E\/S utilizados, pero implica que debemos poner un poco de esfuerzo adicional en transferir y recibir datos de manera confiable. El protocolo en serie que analizaremos es la forma m\u00e1s com\u00fan para las transferencias asincr\u00f3nicas. De hecho, es tan com\u00fan que cuando la mayor\u00eda de la gente dice \u00aben serie\u00bb, \u201co serial\u201d, est\u00e1n hablando sobre este protocolo.<\/p>\n

El protocolo serie sin reloj que analizaremos se usa ampliamente en electr\u00f3nica integrada. Si est\u00e1 buscando agregar un m\u00f3dulo serie GPS, Bluetooth, XBee, LCD, o muchos otros dispositivos externos a su proyecto, es probable que necesite un interfaz serie.<\/p>\n

Reglas de la comunicaci\u00f3n serie<\/strong><\/p>\n

El protocolo serie asincr\u00f3nico tiene una serie de reglas integradas: mecanismos que ayudan a garantizar transferencias de datos s\u00f3lidas y sin errores. Estos mecanismos, que obtenemos para evitar la se\u00f1al del reloj externo, son:<\/p>\n

   \u25a0 Bits de datos
\n   \u25a0 Bits de sincronizaci\u00f3n
\n   \u25a0 Bits de paridad
\n   \u25a0 Velocidad en baudios<\/p>\n

Teniendo en cuenta la variedad de estos mecanismos de se\u00f1alizaci\u00f3n, vemos que no hay una sola manera de enviar datos en serie. El protocolo es altamente configurable. La parte cr\u00edtica es asegurarse de que ambos dispositivos en una l\u00ednea serie est\u00e9n configurados para usar exactamente los mismos protocolos.<\/p>\n

Velocidad en baudios<\/strong><\/p>\n

La especificaci\u00f3n de velocidad de transmisi\u00f3n indica qu\u00e9 tan r\u00e1pido se env\u00edan los datos a trav\u00e9s de una l\u00ednea serie. Normalmente se expresa en unidades de bits por segundo (bps). Si se invierte la velocidad en baudios, se puede averiguar cu\u00e1nto tiempo se tarda en transmitir cada bit. Este valor determina durante cu\u00e1nto tiempo el transmisor mantiene en alto\/bajo una l\u00ednea serie, o a qu\u00e9 velocidad muestrea su l\u00ednea el dispositivo receptor.<\/p>\n

Las velocidades en baudios pueden ser casi cualquier valor dentro de lo que permite el hardware. El \u00fanico requisito es que ambos dispositivos funcionen a la misma velocidad. Una de las velocidades en baudios m\u00e1s comunes, especialmente para cosas simples donde la velocidad no es cr\u00edtica, es de 9600 bps. Otras velocidades en baudios \u00abest\u00e1ndar\u00bb son 1200, 2400, 4800, 19200, 38400, 57600 y 115200.<\/p>\n

Cuanto mayor sea la velocidad en baudios, m\u00e1s r\u00e1pido se env\u00edan\/reciben los datos, pero existen l\u00edmites para la velocidad a la que se pueden transferir los datos. Por lo general, no ver\u00e1 velocidades superiores a 115200, lo que es suficientemente r\u00e1pido para la mayor\u00eda de los microcontroladores. Aumente demasiado y comenzar\u00e1 a ver errores en el extremo receptor, ya que los pulsos de reloj y los per\u00edodos de muestreo no pueden mantenerse.<\/p>\n

Estructurando los datos<\/strong><\/p>\n

Cada bloque de datos (generalmente un byte) que se transmite se env\u00eda en realidad en un paquete de bits. Los paquetes se crean agregando bits de sincronizaci\u00f3n y paridad a nuestros datos.
\n
\"\"<\/a>
\nAlgunos s\u00edmbolos en la estructura del paquete tienen tama\u00f1os de bits que son configurables.<\/p>\n

Vamos a entrar en los detalles de cada una de estas partes de la estructura del paquete, o bloque.<\/p>\n

Bloque de datos<\/strong><\/p>\n

La verdadera sustancia de cada paquete serie es la informaci\u00f3n que lleva. Ambiguamente llamamos a este bloque de datos un \u201cbloque\u201d, porque su tama\u00f1o no est\u00e1 espec\u00edficamente establecido. En este est\u00e1ndar, la cantidad de datos en cada paquete se puede establecer en valores de 5 a 9 bits. Ciertamente, el tama\u00f1o de datos cl\u00e1sico es un byte de 8 bits, pero se usan otros tama\u00f1os. Un bloque de datos de 7 bits puede ser m\u00e1s eficiente que 8 si solo est\u00e1 transfiriendo caracteres ASCII<\/a><\/strong> de 7 bits.<\/p>\n

Despu\u00e9s de acordar la longitud para un caracter, ambos dispositivos serie tambi\u00e9n tienen que acordar el formato de sus datos. \u00bfSe env\u00edan los datos desde el bit m\u00e1s significativo (most significative bit = msb<\/strong>) al menos significativo, o viceversa? Si no se indica lo contrario, generalmente se puede asumir que los datos se transfieren enviando primero el bit menos significativo (least significative bit = lsb<\/strong>).<\/p>\n

Bits de sincronizaci\u00f3n<\/strong><\/p>\n

Los bits de sincronizaci\u00f3n son dos o tres bits especiales transferidos con cada porci\u00f3n de datos. Son el bit de inicio<\/strong> y el(los) bit(s) de parada<\/strong>. Tal como indica su nombre, estos bits marcan el principio y el final de un paquete. Siempre hay un \u00fanico bit de inicio, pero la cantidad de bits de parada se puede configurar en uno o dos (aunque normalmente se deja en uno).<\/p>\n

El bit de inicio siempre se indica mediante una l\u00ednea de datos inactiva que pasa de 1 a 0 (ALTO<\/strong> a BAJO<\/strong>). Los bits de parada volver\u00e1n al estado inactivo manteniendo la l\u00ednea en 1 (ALTO<\/strong>).<\/p>\n

Bits de paridad<\/strong><\/p>\n

La paridad es una forma de comprobaci\u00f3n de errores muy simple y de bajo nivel. Se presenta en dos variantes: impar o par. Para generar el bit de paridad, se suman todos los bits del byte de datos (5 a 9), y el resultado de la suma define si el bit es 1 o 0. Por ejemplo, suponiendo que la paridad se establece en par y se agrega a un byte de datos como 0b01011101<\/strong>, que tiene una cantidad impar de 1s (5), el bit de paridad quedar\u00eda en 1. Por el contrario, si el modo de paridad se configur\u00f3 en impar, el bit de paridad ser\u00eda 0.<\/p>\n

La paridad es opcional, y no se usa mucho. Puede ser \u00fatil para transmitir a trav\u00e9s de medios ruidosos, pero tambi\u00e9n ralentizar\u00e1 un poco la transferencia de datos y requiere que tanto el transmisor como el receptor implementen el manejo de errores (generalmente, si se detecta error, los datos recibidos con falla deben reenviarse).<\/p>\n

Un ejemplo<\/strong><\/p>\n

9600 8N1 – 9600<\/strong> baudios, 8<\/strong> bits de datos, sin<\/strong> paridad y 1<\/strong> bit de parada: es uno de los protocolos serie m\u00e1s utilizados. Entonces, \u00bfc\u00f3mo se ver\u00eda un paquete o dos de datos de 9600 8N1? <\/p>\n

Un dispositivo que transmita los caracteres ASCII ‘O’ y ‘K’ tendr\u00eda que crear dos paquetes de datos. El valor ASCII de O<\/strong> (en may\u00fasculas) es 79<\/strong>, que se divide en un valor binario de 8 bits de 01001111<\/strong>, mientras que el valor binario de K<\/strong> es 01001011<\/strong>. Todo lo que queda es agregar bits de sincronizaci\u00f3n.<\/p>\n

No se establece espec\u00edficamente, pero la norma m\u00e1s aceptada es que los datos se transfieren enviando primero el bit menos significativo. Observe c\u00f3mo se env\u00eda cada uno de los dos bytes a medida que se lee de derecha (bit 0<\/strong>) a izquierda (bit 7<\/strong>).
\n
\"\"<\/a>
\nDado que estamos transfiriendo a 9600 bps, el tiempo empleado en mantener cada uno de esos bits alto o bajo es 1\/9600 (bps) o 104 \u00b5s por bit.<\/p>\n

Por cada byte de datos transmitidos, en realidad como m\u00ednimo se env\u00edan 10 bits: un bit de inicio, 8 bits de datos y un bit de parada. Entonces, a 9600 bps, en realidad estamos enviando 9600 bits por segundo o 960 (9600\/10) bytes por segundo.<\/p>\n

Ahora que sabemos c\u00f3mo construir paquetes serie, podemos pasar a la secci\u00f3n de hardware. All\u00ed veremos c\u00f3mo esos 1s y 0s, y la velocidad de transmisi\u00f3n, se implementan a un nivel de se\u00f1al.<\/p>\n

Cableado y Hardware<\/strong><\/p>\n

Un bus serie consta de solo dos cables, uno para enviar datos y otro para recibir. Entonces, los dispositivos serie deben tener dos pines serie: el receptor: RX<\/strong> y el transmisor: TX<\/strong>.
\n
\"\"<\/a>
\nCableado en serie<\/strong><\/p>\n

Es importante tener en cuenta que esas etiquetas RX<\/strong> y TX<\/strong> son con respecto al dispositivo en s\u00ed. Entonces, el RX<\/strong> de un dispositivo debe ir al TX<\/strong> del otro y viceversa. Es extra\u00f1o si uno est\u00e1 acostumbrado a conectar Vcc<\/strong> con Vcc<\/strong>, GND<\/strong> con GND<\/strong>, MOSI<\/strong> con MOSI<\/strong>, etc., pero \u2014pens\u00e1ndolo\u2014 tiene sentido. El transmisor debe estar comunic\u00e1ndose con un receptor, no con otro transmisor.<\/p>\n

Una interfaz en serie en la que ambos dispositivos pueden enviar y recibir datos es d\u00faplex completo<\/strong> (full-duplex<\/strong>) o semid\u00faplex<\/strong>. Full-duplex significa que ambos dispositivos pueden enviar y recibir simult\u00e1neamente. La comunicaci\u00f3n semid\u00faplex<\/strong> significa que los dispositivos serie deben turnarse para enviar y recibir.<\/p>\n

Algunas conexiones serie pueden implementarse con una sola l\u00ednea entre un dispositivo de transmisi\u00f3n y un dispositivo de recepci\u00f3n. Por ejemplo, los LCD que tienen conexi\u00f3n serie son solo receptores, y realmente no tienen ning\u00fan tipo de informaci\u00f3n para devolver al dispositivo de control. Esto es lo que se conoce como comunicaci\u00f3n serie simplex<\/strong>. Todo lo que necesita es un solo cable desde la transmisi\u00f3n del dispositivo maestro a la l\u00ednea RX<\/strong> del que recibe.
\n