0% encontró este documento útil (0 votos)
42 vistas15 páginas

Comunicación Serial Asincrónica UART

Este documento explica el protocolo UART (Universal Asynchronous Receiver-Transmitter), que es un estándar para la comunicación serial asincrónica entre dispositivos electrónicos. Describe las diferencias entre comunicación paralela y serial, y explica conceptos clave como tasas de baudios, marcos de datos, bits de sincronización y paridad.
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como DOCX, PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
42 vistas15 páginas

Comunicación Serial Asincrónica UART

Este documento explica el protocolo UART (Universal Asynchronous Receiver-Transmitter), que es un estándar para la comunicación serial asincrónica entre dispositivos electrónicos. Describe las diferencias entre comunicación paralela y serial, y explica conceptos clave como tasas de baudios, marcos de datos, bits de sincronización y paridad.
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como DOCX, PDF, TXT o lee en línea desde Scribd

UART

Comunicación serial Introducción La electrónica integrada se trata de


interconectar circuitos (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 se puede separar en una de dos categorías: paralelo
o en serie. Paralelo frente a serie Las interfaces paralelas transfieren varios bits al
mismo tiempo. Por lo general, requieren buses de datos. transmitiendo a través de
ocho, dieciséis o más cables. Los datos se transfieren en oleadas enormes y
estrepitosas de 1 y 0's.

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

Las interfaces seriales transmiten sus datos, un solo bit a la vez. Estas interfaces pueden operar en
tan solo

un cable, por lo general nunca más de cuatro.


Ejemplo de una interfaz en serie, que transmite un bit por cada pulso de reloj. ¡Solo se requieren 2
cables!

Piense en las dos interfaces como un flujo de automóviles: una interfaz paralela sería la
megacarretera de más de 8 carriles,

mientras que una interfaz en serie se parece más a una carretera rural de dos carriles. Durante un
período de tiempo determinado, la megacarretera potencialmente lleva a más personas a sus
destinos, pero esa vía rural de dos carriles cumple su propósito.

y cuesta una fracción de los fondos para construir.

La comunicación paralela ciertamente tiene sus beneficios. Es rápido, sencillo y relativamente fácil
de

implementar. Pero requiere muchas más líneas de entrada / salida (E / S). Si alguna vez ha tenido
que mover un proyecto

desde un Arduino Uno básico hasta un Mega, sabes que las líneas de E / S en un microprocesador
pueden ser preciosas

y pocos. Por lo tanto, a menudo optamos por la comunicación en serie, sacrificando la velocidad
potencial por el espacio de los pines.

Serie asincrónica

A lo largo de los años, se han elaborado decenas de protocolos en serie para satisfacer las
necesidades particulares de

sistemas. USB (bus serie universal) y Ethernet son algunos de los sistemas informáticos más
conocidos

interfaces seriales. Otras interfaces seriales muy comunes incluyen SPI, I2C y el estándar serial que
estamos

aquí para hablar de hoy. Cada una de estas interfaces seriales se puede clasificar en uno de dos
grupos:

sincrónico o asincrónico.

Una interfaz serial síncrona siempre empareja su (s) línea (s) de datos con una señal de reloj, por lo
que todos los dispositivos en un
El bus serie síncrono comparte un reloj común. Esto hace que sea más sencillo, a menudo más
rápido

transferencia en serie, pero también requiere al menos un cable adicional entre los dispositivos de
comunicación. Ejemplos de

las interfaces síncronas incluyen SPI e I2C.

Asíncrono significa que los datos se transfieren sin el apoyo de una señal de reloj externa. Esta

El método de transmisión es perfecto para minimizar los cables requeridos y los pines de E / S,
pero significa que

Necesito hacer un esfuerzo adicional para transferir y recibir datos de manera confiable. El
protocolo serial que seremos

discutiendo en este tutorial es la forma más común de transferencias asincrónicas. Es tan común,
de hecho,

que cuando la mayoría de la gente dice "serial", están hablando de este protocolo (algo que
probablemente notará

a lo largo de este tutorial).

El protocolo serial sin reloj que discutiremos en este tutorial se usa ampliamente en sistemas
integrados

electrónica. Si está buscando agregar un módulo GPS, Bluetooth, XBee, pantallas LCD en serie o
muchos otros

dispositivos externos a su proyecto, probablemente necesitará sacar algo de serial-fu.

Lectura sugerida

Este tutorial se basa en algunos conceptos de electrónica de nivel inferior, que incluyen:

• Cómo leer un esquema

• Analógico frente a digital

• Niveles lógicos

• Binario

• Hexadecimal

• ASCII

Si no está muy familiarizado con ninguno de esos conceptos, considere revisar esos enlaces.

Ahora bien, emprendamos un viaje en serie ...

Reglas de serial
El protocolo serial asincrónico tiene una serie de reglas integradas, mecanismos que ayudan a
garantizar

y transferencias de datos sin errores. Estos mecanismos, que obtenemos para evitar la señal de
reloj externo,

están:

• Bits de datos,

• Bits de sincronización,

• Bits de paridad,

• y velocidad en baudios.

A través de la variedad de estos mecanismos de señalización, encontrará que no existe una única
forma de enviar datos

en serie. El protocolo es altamente configurable. La parte fundamental es asegurarse de que


ambos dispositivos en un

El bus serie está configurado para utilizar 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 serial.
Por lo general, 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

poco. Este valor determina cuánto tiempo el transmisor mantiene una línea serial alta / baja o en
qué período

dispositivo receptor muestrea su línea.

Las velocidades en baudios pueden tener casi cualquier valor dentro de lo razonable. 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ítico, es 9600 bps. Otros baudios "estándar" son 1200, 2400, 4800, 19200, 38400, 57600 y
115200.

Cuanto más alta es la velocidad en baudios, más rápido se envían / reciben los datos, pero existen
límites en cuanto a la velocidad a la que se pueden enviar los datos.

transferido. Por lo general, no verá velocidades superiores a 115200; eso es rápido para la mayoría
de los microcontroladores. Obtener

demasiado alto, y comenzará a ver errores en el extremo receptor, ya que los relojes y los
períodos de muestreo simplemente no pueden
Mantenga.

Enmarcando los datos

Cada bloque (generalmente un byte) de datos transmitidos se envía en realidad en un paquete o


trama de bits. Los marcos son

creado agregando sincronización y bits de paridad a nuestros datos.

Un marco en serie. Algunos símbolos de la trama tienen tamaños de bits configurables.

Entremos en los detalles de cada una de estas piezas del marco.

Fragmento de datos

La verdadera esencia de cada paquete en serie son los datos que transporta. Llamamos
ambiguamente a este bloque de datos un

chunk, porque su tamaño no se indica específicamente. 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. Un fragmento de datos de 7 bits puede ser más eficiente que el de 8, especialmente si
solo está transfiriendo datos de 7 bits

Caracteres ASCII.

Después de acordar la longitud de un carácter, ambos dispositivos seriales también tienen que
estar de acuerdo con el endianness de su

datos. ¿Se envían los datos del bit más significativo (msb) al mínimo, o viceversa? Si no se indica lo
contrario, puede

Por lo general, se asume que los datos se transfieren primero con el 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.
Ellos son las

bit de inicio y bit (s) de parada. Fieles a su nombre, estos bits marcan el comienzo 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

transición de nuevo al estado inactivo manteniendo la línea en 1.

Bits de paridad

La paridad es una forma de verificación de errores de bajo nivel muy simple. Viene en dos sabores:
par o impar. Para

producir el bit de paridad, los 5-9 bits del byte de datos se suman y la uniformidad de la suma
decide

si el bit está establecido o no. Por ejemplo, suponiendo que la paridad se establece en par y se
agrega a un dato

byte como 0b01011101, que tiene un número impar de unos (5), el bit de paridad se establecería
en 1.

Por el contrario, si el modo de paridad se establece en impar, el bit de paridad sería 0.

La paridad es opcional y no se utiliza mucho. Puede ser útil para transmitir a través de medios
ruidosos,

pero también ralentizará un poco la transferencia de datos y requiere que tanto el remitente
como el receptor implementen

manejo de errores (por lo general, 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 sistemas
seriales más utilizados.

protocolos. Entonces, ¿cómo se verían uno o dos paquetes de datos 9600 8N1? ¡Pongamos un
ejemplo!

Un dispositivo que transmite los caracteres ASCII "O" y "K" tendría que crear dos paquetes de
datos. los

El valor ASCII de O (en mayúsculas) es 79, que se descompone en un valor binario de 8 bits de

01001111, mientras que el valor binario de K es 01001011. Todo lo que queda es agregar bits de
sincronización.

No se indica específicamente, pero se supone que los datos se transfieren primero con el bit
menos significativo. Date cuenta cómo

cada uno de los dos bytes se envía a medida que se lee de derecha a izquierda.
Dado que estamos transfiriendo a 9600 bps, el tiempo invertido 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

detener un poco. Entonces, a 9600 bps, en realidad estamos enviando 9600 bits por segundo o
960 (9600/10) bytes por

segundo.

Ahora que sabe cómo construir paquetes seriales, podemos pasar a la sección de hardware. Allí

¡Veremos cómo esos 1 y 0 y la velocidad en baudios se implementan en un nivel de señal!

Cableado y hardware

Un bus serie consta de solo dos cables: uno para enviar datos y otro para recibir. Como tal, serial

los dispositivos deben tener dos pines seriales: 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 a la TX del otro y viceversa. Es extraño si estás acostumbrado a ligar

VCC a VCC, GND a GND, MOSI a MOSI, etc., pero tiene sentido si lo piensa bien. los

El transmisor debe estar hablando con el receptor, no con otro transmisor.


Una interfaz en serie donde ambos dispositivos pueden enviar y recibir datos es full-duplex o half-
duplex.

Full-duplex significa que ambos dispositivos pueden enviar y recibir simultáneamente.


Comunicación semidúplex

significa que los dispositivos seriales deben turnarse para enviar y recibir.

Algunos buses seriales pueden salirse con la suya con una sola conexión entre un envío y una
recepción.

dispositivo. Por ejemplo, nuestras pantallas LCD habilitadas en serie son todo oídos y realmente no
tienen ningún dato para retransmitir

al dispositivo de control. Esto es lo que se conoce como comunicación serial simplex. Todo lo que
necesitas es un

un solo cable desde la transmisión del dispositivo maestro hasta la línea RX del oyente.

Implementación de hardware

Hemos cubierto la serie asincrónica desde un punto de vista conceptual. Sabemos qué cables
necesitamos. Pero como esta

comunicación serial realmente implementada a nivel de señal? En realidad, de diversas formas.


Hay todos

tipos de estándares para la señalización en serie. Veamos algunos de los hardware más populares

implementaciones de serie: nivel lógico (TTL) y RS-232.

Cuando los microcontroladores y otros circuitos integrados de bajo nivel se comunican en serie,
generalmente lo hacen en un TTL

(transistor-transistor lógica) nivel. Existen señales en serie TTL entre el suministro de voltaje de un
microcontrolador

rango - generalmente 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.

RS-232, que se puede encontrar en algunas de las computadoras y periféricos más antiguos, es
como serie TTL
volteado sobre su cabeza. Las señales RS-232 generalmente oscilan entre -13V y 13V, aunque la
especificación permite

cualquier cosa desde +/- 3V a +/- 25V. En estas señales, un voltaje bajo (-5V, -13V, etc.) indica que

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 valor 0

bit de datos. Eso es lo opuesto a la serie TTL.

Entre los dos estándares de señales en serie, TTL es mucho más fácil de implementar en circuitos
integrados.

Sin embargo, los niveles de voltaje bajo son más susceptibles a pérdidas a través de líneas de
transmisión largas. RS-232,

o estándares más complejos como RS-485, se adaptan mejor a transmisiones en serie de largo
alcance.

Cuando conecta dos dispositivos en serie juntos, es importante asegurarse de que sus voltajes de
señal

emparejar. No puede conectar directamente un dispositivo serie TTL con un bus RS-232. Tendrás
que cambiar

esas señales!

Continuando, exploraremos la herramienta que utilizan los microcontroladores para convertir sus
datos en un bus paralelo ay

desde una interfaz en serie. UARTs!

UART

La última pieza de este rompecabezas en serie es encontrar algo para crear los paquetes en serie y
controlar

esas líneas de hardware físico. Ingrese a la UART.


Un receptor / transmisor asíncrono universal (UART) es un bloque de circuitos responsable de

implementación de comunicación serial. Esencialmente, el UART actúa como intermediario entre


paralelo

e interfaces seriales. En un extremo de la UART hay un bus de unas ocho líneas de datos (más algo
de control

pines), en el otro están los dos cables seriales: RX y TX.

Interfaz UART súper simplificada. Paralelo en un extremo, serial en el otro.

Los UART existen como circuitos integrados independientes, pero se encuentran más
comúnmente dentro de microcontroladores. Vas a

tiene que revisar la hoja de datos de su microcontrolador para ver si tiene UART. Algunos no
tienen ninguno, algunos tienen

uno, algunos tienen muchos. Por ejemplo, el Arduino Uno, basado en el "viejo fiel" ATmega328,
tiene

solo un único UART, mientras que el Arduino Mega, construido sobre un ATmega2560, tiene la
friolera de cuatro UART.

Como dictan la R y la T en el acrónimo, los UART son responsables tanto del envío como de la
recepción en serie

datos. En el lado de la transmisión, un UART debe crear el paquete de datos, agregando bits de
sincronización y paridad, y

envíe ese paquete por la línea TX con una sincronización precisa (de acuerdo con la velocidad en
baudios establecida). En la recepción
Al final, el UART tiene que muestrear la línea RX a velocidades de acuerdo con la velocidad en
baudios esperada, seleccione la sincronización

bits y escupir los datos.

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

Los UART más avanzados pueden arrojar sus datos recibidos a un búfer, donde pueden
permanecer hasta que

microcontrolador viene a buscarlo. Los UART generalmente publicarán sus datos almacenados en
búfer en un primer en entrar, primero en salir

(FIFO) base. Los búferes pueden ser tan pequeños como unos pocos bits o tan grandes como miles
de bytes.

UART de software

Si un microcontrolador no tiene un UART (o no tiene suficiente), la interfaz serial puede ser


bitbanged, controlada directamente por el procesador. Este es el enfoque de las bibliotecas de
Arduino
Software Toma de serie. El bit-banging requiere un uso intensivo del procesador y, por lo general,
no es tan preciso como un UART, pero

funciona en caso de apuro!

Errores comunes

Eso es todo lo que hay en la comunicación en serie. Me gustaría dejarles algunos errores comunes.

que son fáciles de realizar para un ingeniero de cualquier nivel de experiencia:

RX a TX, TX a RX

Parece bastante simple, pero es un error que sé que he cometido más de un par de veces. Tanto
como quieras

sus etiquetas coincidan, asegúrese siempre de cruzar las líneas RX y TX entre los dispositivos
seriales.

FTDI Programación básica de un Pro Mini. ¡Tenga en cuenta que RX y TX están cruzados!

Al contrario de lo que advertiría el estimado Dr. Egon Spengler, cruce los arroyos.

Discrepancia en la tasa de baudios

Las velocidades en baudios son como los lenguajes de la comunicación en serie. Si dos dispositivos
no hablan al mismo tiempo

velocidad, los datos pueden malinterpretarse o perderse por completo. Si todo el dispositivo
receptor ve en su
la línea de recepción es basura, verifique que las velocidades en baudios coincidan

Datos transmitidos a 9600 bps, pero recibidos a 19200 bps. Discrepancia en baudios = basura.

Contención de autobuses

La comunicación en serie está diseñada para permitir que solo dos dispositivos se comuniquen a
través de un bus en serie. Si

más de un dispositivo está tratando de transmitir en la misma línea serial, podría encontrarse con
una contención de bus.

Dun dun dun….

Por ejemplo, si está conectando un módulo GPS a su Arduino, puede simplemente conectar el
módulo

TX alinea la línea RX de Arduino. Pero ese pin Arduino RX ya está conectado al pin TX del

Convertidor de USB a serie, que se utiliza siempre que programa el Arduino o utiliza el Monitor
serie.

Esto configura la situación potencial en la que tanto el módulo GPS como el chip FTDI están
tratando de transmitir en

la misma línea al mismo tiempo.


Dos transmisores que envían a un solo receptor establecen la posibilidad de contención de bus.

¡Dos dispositivos que intentan transmitir datos al mismo tiempo, en la misma línea, es malo! En el
"mejor", ninguno de los

los dispositivos podrán enviar sus datos. En el peor de los casos, las líneas de transmisión de
ambos dispositivos fallan (aunque es raro,

y generalmente protegido contra).

Puede ser seguro conectar varios dispositivos de recepción a un solo dispositivo de transmisión.
Realmente no está a la altura

especificación y probablemente mal visto por un ingeniero empedernido, pero funcionará. Por
ejemplo, si estás

conectando una pantalla LCD en serie a un Arduino, el enfoque más fácil puede ser conectar el
módulo LCD

Línea RX a la línea TX de Arduino. El TX de Arduino ya está conectado al programador USB

Línea RX, pero eso todavía deja solo un dispositivo en control de la línea de transmisión.
La distribución de una línea TX como esta puede ser peligrosa desde la perspectiva del firmware,
porque no se puede

Elija y elija qué dispositivo escucha qué transmisión. La pantalla LCD terminará recibiendo datos no
deseados.

para él, lo que podría ordenarle que entre en un estado desconocido.

En general, ¡un bus en serie, dos dispositivos en serie!

También podría gustarte