Comunicación serial

<< Regresar

La electrónica integrada se basa en circuitos de interconexión (procesadores u otros circuitos integrados) para crear un sistema simbiótico. Para que esos circuitos individuales intercambien su información, deben compartir un protocolo de comunicación común. Se han definido cientos de protocolos de comunicación para lograr este intercambio de datos y, en general, cada uno puede separarse en una de dos categorías: paralelo o en serie.

Paralelo vs serial

Las interfaces paralelas transfieren múltiples bits al mismo tiempo. Por lo general, requieren buses de datos, que se transmiten a través de ocho, dieciséis o más cables. Los datos se transfieren en enormes olas de 1 y 0.

Generalización paralela

Un bus de datos de 8 bits, controlado por un reloj, que transmite un byte cada pulso de reloj. Se utilizan 9 cables.

Las interfaces seriales transmiten sus datos, un bit a la vez. Estas interfaces pueden operar con tan solo un cable, por lo general nunca más de cuatro.

Generalización serial

Ejemplo de una interfaz serial, transmitiendo un bit cada pulso de reloj. Solo se requieren 2 cables.

Piense en las dos interfaces como una corriente de automóviles: una interfaz paralela sería la mega-carretera de más de 8 carriles, mientras que una interfaz en serie es más una carretera rural de dos carriles. Durante un período de tiempo determinado, la mega-carretera potencialmente lleva a más personas a sus destinos, pero ese sistema rural de dos carriles responde a su propósito y cuesta una fracción de los fondos para construir.

La comunicación paralela ciertamente tiene sus beneficios. Es rápido, directo y relativamente fácil de implementar. Pero requiere muchas más líneas de entrada / salida (E / S). A menudo se opta por la comunicación en serie, sacrificando la velocidad potencial para la propiedad de los pines.

A lo largo de los años, se han creado docenas de protocolos en serie para satisfacer las necesidades particulares de los sistemas integrados. USB (bus serie universal) y Ethernet, son un par de las interfaces serie de computación más conocidas. Otras interfaces seriales muy comunes incluyen SPI, I2C y el estándar en serie del que estamos aquí para hablar hoy. Cada una de estas interfaces seriales puede clasificarse en uno de dos grupos: síncrono o asíncrono.

Una interfaz serie síncrona siempre empareja sus líneas de datos con una señal de reloj, por lo que todos los dispositivos en un bus serie síncrono comparten un reloj común. Esto hace que para una transferencia en serie más directa, a menudo más rápida, pero también requiere al menos un cable adicional entre los dispositivos de comunicación. Ejemplos de interfaces síncronas incluyen SPI y I2C.

Asíncrono significa que los datos se transfieren sin soporte desde una señal de reloj externa . Este método de transmisión es perfecto para minimizar los cables necesarios y los pines de E / S, pero sí significa que debemos poner un poco de esfuerzo adicional en transferir y recibir datos de manera confiable. El protocolo en serie que analizaremos en este artículo es la forma más común de transferencias asíncronas. De hecho, es tan común que cuando la mayoría de la gente dice «serial» están hablando de este protocolo.

El protocolo serial sin reloj que analizará se usa ampliamente en electrónica integrada. Si está buscando agregar un módulo GPS, Bluetooth, XBee, LCD seriales o muchos otros dispositivos externos a su proyecto, es probable que tenga que comprender el tema.

Reglas de serie

El protocolo serie asíncrono tiene una serie de reglas integradas: mecanismos que ayudan a garantizar transferencias de datos sólidas y sin errores. Estos mecanismos, que obtenemos para evitar la señal del reloj externo, son:

Bits de datos,
Bits de sincronización,
Bits de paridad,
y la tasa de baudios.

A través de la variedad de estos mecanismos de señalización, encontrará que no hay una única forma de enviar datos en serie. El protocolo es altamente configurable. La parte crítica es asegurarse de que ambos dispositivos en un bus serie estén configurados para usar exactamente los mismos protocolos .
Tasa de baudios

La velocidad en baudios especifica qué tan rápido se envían los datos a través de una línea serie. Generalmente se expresa en unidades de bits por segundo (bps). Si invierte la velocidad en baudios, puede averiguar cuánto tiempo se tarda en transmitir un solo bit. Este valor determina durante cuánto tiempo el transmisor mantiene una línea serie alta / baja o en qué período el dispositivo receptor muestrea su línea.

Las tasas de baudios pueden ser casi cualquier valor dentro de la razón. El único requisito es que ambos dispositivos funcionen a la misma velocidad. Una de las velocidades en baudios más comunes, especialmente para cosas simples donde la velocidad no es crítica, es de 9600 bps . Otros baudios “estándar” son 1200, 2400, 4800, 19200, 38400, 57600 y 115200.

Cuanto mayor sea la velocidad en baudios, más rápido se envían / ​​reciben los datos, pero hay límites en cuanto a qué tan rápido se pueden transferir los datos. Por lo general, no verá velocidades superiores a 115200, lo que es rápido para la mayoría de los microcontroladores. Aléjese demasiado y comenzará a ver los errores en el extremo receptor, ya que los relojes y los períodos de muestreo no pueden mantenerse al día.
Enmarcando los datos

Cada bloque (generalmente un byte) de datos transmitidos se envía en realidad en un paquete o trama de bits. Los cuadros se crean agregando bits de sincronización y paridad a nuestros datos.

Paquete de serie

Trozo de datos

Lo importante de cada paquete serial es la información que lleva. Ambiguamente llamamos a este bloque de datos una porción, porque su tamaño no está específicamente establecido. La cantidad de datos en cada paquete se puede establecer en cualquier cosa de 5 a 9 bits. Ciertamente, el tamaño de datos estándar es su byte básico de 8 bits, pero otros tamaños tienen sus usos. Una porción de datos de 7 bits puede ser más eficiente que 8, especialmente si solo está transfiriendo caracteres ASCII de 7 bits.

Después de acordar una longitud de carácter, ambos dispositivos seriales también tienen que acordar la integridad de sus datos. ¿Se envían los datos el bit más significativo (msb) al menor, o viceversa? Si no se indica lo contrario, generalmente puede suponer que los datos se transfieren primero al bit menos significativo (lsb) .

Bits de sincronización

Los bits de sincronización son dos o tres bits especiales transferidos con cada fragmento de datos. Son el bit de inicio y el (los) bit (s) de parada. Fieles a su nombre, estos bits marcan el principio y el final de un paquete. Siempre hay un solo bit de inicio, pero el número de bits de parada se puede configurar en uno o dos (aunque normalmente se deja en uno).

El bit de inicio siempre se indica mediante una línea de datos inactiva que va de 1 a 0, mientras que los bits de parada volverán al estado inactivo manteniendo la línea en 1.

Bits de paridad

La paridad es una forma de comprobación de errores muy simple y de bajo nivel. Se presenta en dos sabores: impar o par. Para producir el bit de paridad, se suman del 5-9 los bits del byte de datos, y la uniformidad de la suma decide si el bit se establece o no. Por ejemplo, suponiendo que la paridad se establece en par y se agrega a un byte de datos como 0b01011101 , que tiene un número impar de 1’s, el bit de paridad se establecería en 1. A la inversa, si el modo de paridad se configuró en impar, el bit de paridad sería 0.

La paridad es opcional, y no muy utilizada. Puede ser útil para transmitir a través de medios ruidosos, pero también ralentizará un poco su transferencia de datos y requiere que tanto el remitente como el receptor implementen el manejo de errores (generalmente, los datos recibidos que fallan deben reenviarse).
9600 8N1 (un ejemplo)

9600 8N1 – 9600 baudios, 8 bits de datos, sin paridad y 1 bit de parada: es uno de los protocolos serie más comúnmente utilizados. Entonces dos paquetes de datos de 9600 8N1 serian así:

Un dispositivo que transmita los caracteres ASCII ‘O’ y ‘K’ tendría que crear dos paquetes de datos. El valor ASCII de O (en mayúsculas) es 79, que se divide en un valor binario de 8 bits de 01001111 , mientras que el valor binario de K es 01001011 . Todo lo que queda es añadir bits de sincronización.

Dado 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 µs por bit.

Por cada byte de datos transmitidos, en realidad se envían 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.

Cableado y Hardware

Un bus serie consta de solo dos cables, uno para enviar datos y otro para recibir. Como tal, los dispositivos serie deben tener dos pines serie: el receptor, RX y el transmisor, TX .

Es importante tener en cuenta que esas etiquetas RX y TX son con respecto al dispositivo en sí. Entonces, el RX de un dispositivo debe ir al TX del otro y viceversa. Es extraño si estás acostumbrado a conectar VCC a VCC, GND a GND, MOSI a MOSI, etc., pero tiene sentido si lo piensas. El transmisor debe estar hablando con el receptor, no con otro transmisor.

Una interfaz en serie en la que ambos dispositivos pueden enviar y recibir datos es dúplex completo o semidúplex . Full-duplex significa que ambos dispositivos pueden enviar y recibir simultáneamente. La comunicación semidúplex significa que los dispositivos serie deben turnarse para enviar y recibir.

Algunos buses serie pueden salirse con una sola conexión entre un dispositivo de envío y un dispositivo de recepción. Por ejemplo, nuestros LCD habilitados en serie son todos oídos y realmente no tienen ningún tipo de información para retransmitir al dispositivo de control. Esto es lo que se conoce como comunicación serial simplex . Todo lo que necesita es un solo cable desde la transmisión del dispositivo maestro a la línea RX del oyente.

Implementación de hardware

Hay todo tipo de estándares para la señalización en serie. Veamos un par de las implementaciones de hardware más populares de serie: nivel lógico (TTL) y RS-232.

Señal TTL

Cuando los microcontroladores y otros circuitos integrados de bajo nivel se comunican en serie, generalmente lo hacen a un nivel TTL (lógica transistor-transistor). Las señales seriales TTL existen entre el rango de suministro de voltaje de un microcontrolador, generalmente de 0V a 3.3V o 5V. Una señal en el nivel VCC (3.3V, 5V, etc.) indica una línea inactiva, un bit de valor 1 o un bit de parada. Una señal de 0V (GND) representa un bit de inicio o un bit de datos de valor 0.

Señal RS-232

RS-232, que se puede encontrar en algunas de las computadoras y periféricos más antiguos, es como una serie TTL volteada en su cabeza. Las señales RS-232 generalmente oscilan entre -13V y 13V, aunque la especificación permite cualquier cosa entre +/- 3V y +/- 25V. En estas señales, un voltaje bajo (-5V, -13V, etc.) indica la línea inactiva, un bit de parada o un bit de datos de valor 1. Una señal RS-232 alta significa un bit de inicio o un 0 bit de datos de valor. Eso es lo contrario de la serie TTL.

Entre los dos estándares de señal en serie, TTL es mucho más fácil de implementar en circuitos integrados. Sin embargo, los niveles de baja tensión son más susceptibles a las pérdidas en las líneas de transmisión largas. RS-232, o estándares más complejos como RS-485, son más adecuados para transmisiones en serie de largo alcance.

Cuando conecte dos dispositivos serie juntos, es importante asegurarse de que los voltajes de su señal coincidan. No puede conectar directamente un dispositivo serie TTL con un bus RS-232.

UARTs

Para crear los paquetes en serie y controlar las líneas de hardware físico. Entra en el UART.

Un receptor / transmisor asíncrono universal (UART) es un bloque de circuitos responsable de implementar la comunicación en serie. Esencialmente, el UART actúa como un intermediario entre interfaces paralelas y seriales. En un extremo del UART hay un bus de ocho o más líneas de datos (más algunos pines de control), en el otro lado están los dos cables serie: RX y TX.

UART simplificado

Interfaz UART super simplificada. Paralelo en un extremo, serial en el otro.

Los UART existen como IC independientes, pero se encuentran más comúnmente dentro de los microcontroladores. Tendrá que consultar la hoja de datos de su microcontrolador para ver si tiene algún UART. Algunos no tienen ninguno, otros tienen uno, otros tienen muchos.

Como lo indican la R y la T en el acrónimo, los UART son responsables de enviar y recibir datos en serie. En el lado de transmisión, un UART debe crear el paquete de datos – agregando la sincronización y los bits de paridad – y enviar ese paquete fuera de la línea de TX con una sincronización precisa (de acuerdo con la velocidad de transmisión establecida). En el extremo de recepción, el UART tiene que muestrear la línea de RX a velocidades de acuerdo con la velocidad de transmisión esperada, seleccionar los bits de sincronización y escupir los datos.

UART interno

Diagrama de bloques UART interno (cortesía de la hoja de datos de Exar ST16C550)

Los UART más avanzados pueden lanzar sus datos recibidos en un búfer , donde pueden permanecer hasta que el microcontrolador llegue a buscarlos. Los UART generalmente publicarán sus datos almacenados en un búfer en una base de primero en entrar, primero en salir (FIFO). Los buffers pueden ser tan pequeños como unos pocos bits, o tan grandes como miles de bytes.
UARTs de software

Si un microcontrolador no tiene un UART (o no tiene suficiente), la interfaz en serie puede ser modificada en bits , directamente controlada por el procesador. El uso de bits es intensivo en el procesador y por lo general no es tan preciso como un UART.

Última actualización: noviembre 16, 2018

Deja un comentario