01 · Punto de partida
¿Cuándo hay que mirar la línea?
En el tema anterior elegimos enviar los bits por una sola línea, uno detrás de otro. Pero una línea que lleva ceros y unos sucesivos no tiene separaciones visibles: si el emisor manda 1 1 1 0 0, lo que ve el receptor es un nivel alto durante tres bits y uno bajo durante dos. ¿Cuántos bits hubo? Solo se sabe si se conoce cuánto dura cada bit y en qué instante empieza.
Es un problema de muestreo que ya conocés desde la programación: leer un valor en el momento correcto. Si lo leés demasiado pronto o tarde, obtenés el dato anterior o el siguiente. En la comunicación, el receptor necesita un reloj propio que marque los instantes de lectura, alineado con el del emisor. Las formas de lograrlo definen dos familias de enlaces:
- En la comunicación síncrona, el emisor y el receptor comparten la misma referencia de tiempo: o un cable de reloj, o un reloj que el receptor recupera de los propios datos.
- En la comunicación asíncrona, no hay reloj compartido: cada extremo tiene el suyo, se acuerda la velocidad de antemano y se marca el comienzo de cada palabra para volver a alinear los relojes.
02 · Un reloj para los dos
Comunicación síncrona: un reloj compartido
En un enlace síncrono con línea de reloj, uno de los extremos (el maestro) genera una señal de reloj y la envía por un cable aparte. Cada flanco de esa señal es una orden de «mirá ahora». El receptor no necesita saber nada sobre la velocidad: simplemente lee la línea de datos en cada flanco. Si el maestro acelera, baja o se detiene un instante, el receptor acompaña sin problemas.
Los buses síncronos con reloj dedicado más comunes son SPI (la línea SCLK) e I²C (la línea SCL). Sus ventajas son claras: velocidad variable, ningún error por diferencias de reloj entre chips y receptores muy simples (en SPI, el receptor es literalmente un registro de desplazamiento). Su costo es una línea adicional.
Tiempos de establecimiento y retención
El receptor no mira la línea de datos «en un punto», sino que el dato debe estar estable alrededor del flanco. Dos tiempos de la hoja de datos lo especifican:
- El tiempo de establecimiento (setup time, tsu) es cuánto antes del flanco debe estar estable el dato.
- El tiempo de retención (hold time, th) es cuánto después del flanco debe seguir estable.
Por eso los enlaces síncronos hacen que el dato cambie en un flanco del reloj y se lea en el contrario: queda medio ciclo de margen a cada lado. Con ese esquema, el reloj máximo queda limitado por los tiempos del componente. Un ejemplo: si el emisor tarda 10 ns en colocar el dato en la línea y el receptor exige un establecimiento de 20 ns, el medio ciclo debe durar al menos 30 ns, así que el ciclo completo debe ser de 60 ns como mínimo y la frecuencia máxima es de unos 16,7 MHz.
03 · Cada uno con su reloj
Comunicación asíncrona: inicio y parada
Para ahorrar el cable del reloj, ambos extremos usan relojes propios que se programan a la misma velocidad nominal (por ejemplo, 9600 baudios). Pero dos cristales nunca son idénticos y, si se dejan correr, se desfasan. La solución es corta y elegante: no mantener la sincronía mucho tiempo. El emisor se «resincroniza» al comienzo de cada palabra y el receptor solo necesita mantenerse alineado durante unos pocos bits.
Para eso la palabra se encierra entre dos marcas:
- La línea, en reposo, permanece en nivel alto (1).
- El bit de inicio (start) baja la línea a 0 durante un bit. Ese flanco de bajada es la señal para que el receptor ponga en marcha su contador.
- Siguen los bits de datos, habitualmente 8, con el bit menos significativo primero.
- El bit de parada (stop) devuelve la línea a 1 y garantiza que el próximo bit de inicio producirá un flanco.
El receptor, al detectar el flanco de bajada, espera medio bit para colocarse en el centro del bit de inicio (y confirmar que sigue en 0, para descartar picos de ruido). A partir de ahí muestrea la línea cada un bit completo, siempre en el centro de cada intervalo: el punto más alejado de ambos flancos, donde es menos probable equivocarse. Después del bit de parada, vuelve a esperar un nuevo flanco.
Este es el modelo de la UART (tema 7), de RS-232 y de RS-485 sobre UART, y también de 1-Wire, que se basa en tiempos acordados sin reloj. El nombre «asíncrono» no significa que no haya tiempos: el receptor mide el tiempo con precisión, solo que con su propio reloj.
El precio: sobrecarga
En cada byte de 8 bits, la UART agrega 2 bits de control. La eficiencia es:
A 9600 baudios la velocidad bruta es de 9600 bits por segundo, pero los datos útiles son solo 960 bytes por segundo. Con paridad y dos bits de parada (formato 8E2) cada byte ocupa 12 bits y la eficiencia baja a 66,7 %. En un enlace síncrono con reloj, los 8 bits ocupan 8 ciclos: no hay desperdicio por cada byte, aunque cada transferencia tiene su propia cabecera.
04 · Cálculo
Cuánto puede desviarse el reloj
La resincronización en cada byte funciona porque el receptor solo necesita mantener el ritmo durante diez bits. ¿Cuánto error de reloj admite? Supongamos que el receptor corre más rápido o más lento que el emisor en una fracción e. El receptor muestrea el bit número k (contando el inicio como bit 0) en el instante (k + 0,5) × (1 + e), medido en bits del emisor. Mientras ese instante caiga dentro de su bit, es decir, entre k y k + 1, la lectura es correcta.
El peor caso es el último bit, el de parada, con k = 9. Allí se cumple la condición solo si la desviación acumulada es menor que medio bit:
Esa es la tolerancia teórica entre los dos relojes. En la práctica se pide mucho menos, alrededor de ±2 %, para dejar margen a los flancos lentos, al ruido y a la imprecisión al detectar el inicio. Y recordá que el error que cuenta es la diferencia entre ambos relojes: si el emisor tiene +2 % y el receptor −2 %, el error relativo es de casi 4 %.
| Fuente de reloj | Error típico | ¿Sirve para UART? |
|---|---|---|
| Cristal de cuarzo | ±20 ppm (0,002 %) | Sí, con enorme margen |
| Resonador cerámico | ±0,5 % | Sí |
| Oscilador RC interno calibrado | ±1 % a ±2 % | Sí, con cuidado de combinar dos unidades |
| Oscilador RC interno sin calibrar | ±10 % o más | No sin calibrar: puede superar el límite |
Una sutileza adicional: la velocidad que se programa en el divisor del periférico también introduce un error. Un microcontrolador a 16 MHz no puede generar exactamente 115 200 baudios (con el divisor entero de un AVR obtiene 111 111 baudios en modo normal, un error de −3,5 %, o 117 647 con el modo de doble velocidad, un error de +2,1 %); por eso a veces se elige un cristal de 18,432 MHz u otras frecuencias «redondas» para las UART. Lo analizamos en los temas 4 y 8.
05 · Reloj sin cable
Relojes escondidos en los datos
Entre los dos extremos hay una tercera opción: enviar solo datos, pero codificarlos de tal manera que la señal contenga el reloj. El receptor lo recupera observando los cambios de nivel con un circuito llamado PLL (lazo de enganche de fase), que ajusta su propio reloj a la cadencia de las transiciones. Es la técnica de USB, Ethernet, SATA y PCIe, y se llama comunicación síncrona con reloj embebido (embedded clock) o autosincronizada.
Para que la recuperación funcione, la señal debe cambiar con frecuencia. Hay dos estrategias:
- Codificación con transición garantizada. La codificación Manchester (usada en el Ethernet de 10 Mbps) coloca una transición en el centro de cada bit, de manera que el valor del bit se lee según su sentido (de bajo a alto, o al revés, según la convención). Siempre hay cambios, a costa de duplicar el ancho de banda necesario.
- Relleno de bits (bit stuffing). Si hay una larga cadena de bits iguales, no habría transiciones y el reloj se perdería. El emisor inserta un bit de valor contrario cada cierto número de bits iguales, y el receptor lo descarta. CAN rellena un bit opuesto cada cinco bits iguales seguidos; USB inserta un 0 después de seis unos consecutivos. Otras codificaciones, como 8b/10b (SATA, PCIe antiguo, Gigabit Ethernet óptico), traducen cada byte a 10 bits elegidos para asegurar transiciones.
Una variante híbrida es la de CAN: no existe un cable de reloj y cada nodo tiene el suyo, como en un enlace asíncrono, pero los nodos se resincronizan con cada flanco que ven en el bus, no solo al inicio de la trama. Así, el relleno de bits garantiza que haya flancos con la frecuencia suficiente.
06 · Tres niveles
Sincronizar bits, palabras y tramas
La sincronización tiene más de un nivel. Conocer el instante de cada bit no es suficiente: además hay que saber dónde empieza cada byte y cada mensaje.
| Nivel | Pregunta | Asíncrono (UART) | Síncrono (SPI, I²C) |
|---|---|---|---|
| Bit | ¿Cuándo leo cada bit? | Contando tiempo desde el flanco de inicio | En cada flanco del reloj |
| Palabra (byte) | ¿Cuál es el primer bit del byte? | El bit de inicio lo marca en cada byte | Contando ocho flancos desde el comienzo de la transferencia |
| Trama (mensaje) | ¿Dónde empieza y termina el mensaje? | No lo resuelve: lo define el protocolo de aplicación (delimitadores, longitud, pausas) | Selección de chip (SPI) o condiciones START y STOP (I²C) |
En un enlace asíncrono, por lo tanto, el primer bit de cada byte es obvio, pero el principio de cada mensaje no. Si arrancás a escuchar en medio de una transmisión, los bits de inicio te alinean enseguida y los bytes salen bien, pero no sabés en qué parte del mensaje estás. Por eso los protocolos de texto usan un fin de línea (\n) y los binarios, un byte delimitador, como veremos en el tema 41.
07 · Panorama
Comparación y ejemplos
Síncrona con línea de reloj
Una línea extra transporta el reloj del maestro. Es simple, rápida y no exige relojes precisos en el esclavo, pero hay que cablear una línea más y la distancia es corta. SPI e I²C son los ejemplos del curso.
Asíncrona
Sin cable de reloj: ambos extremos acuerdan la velocidad y marcan cada palabra con inicio y parada. Es sencilla de cablear, pero desperdicia el 20 % de los bits y exige relojes con poca desviación. Ejemplos: UART, RS-232, RS-485 sobre UART.
| Enlace | ¿Cómo marca el tiempo? | Línea de reloj | Se estudia en |
|---|---|---|---|
| UART, RS-232, RS-485 (con UART) | Velocidad acordada y bits de inicio y parada | No | Temas 7 a 11, 22 a 26 |
| SPI | Reloj del maestro (SCLK) | Sí | Temas 12 a 15 |
| I²C | Reloj del maestro (SCL), que el esclavo puede retener | Sí | Temas 16 a 20 |
| 1-Wire | Intervalos de tiempo definidos por el maestro en un único cable | No | Tema 21 |
| CAN | Reloj propio de cada nodo, resincronizado con cada flanco | No | Temas 27 y 28 |
| Ethernet, USB | Reloj recuperado de los datos (Manchester, NRZI y relleno de bits) | No | Temas 29 a 33 |
| Wi-Fi, Bluetooth | Preámbulos y reloj recuperado de la señal de radio | No | Temas 34 a 40 |
Ninguna familia es mejor en general. La síncrona con reloj es la elección natural dentro de una placa; la asíncrona, para dos equipos con pocos cables; y la del reloj embebido, cuando la velocidad o la distancia exceden lo que permite un cable aparte.
08 · Con el microcontrolador
El mismo byte, de las dos maneras
La diferencia se aprecia con dos funciones que envían un byte «a mano» (bit-banging). En la síncrona, el programa genera él mismo el reloj; el receptor lee con cada pulso. No importa cuánto demoren las instrucciones, porque el tiempo lo marca el reloj:
const byte PIN_DATOS = 11;
const byte PIN_RELOJ = 12;
// Síncrona: el receptor muestrea en el flanco de subida del reloj
void enviarSincrono(byte dato) {
for (int i = 7; i >= 0; i--) { // MSB primero
digitalWrite(PIN_DATOS, (dato >> i) & 1); // el dato cambia con el reloj en bajo
digitalWrite(PIN_RELOJ, HIGH); // flanco: el receptor lee ahora
digitalWrite(PIN_RELOJ, LOW);
}
}
En la asíncrona no hay reloj: el emisor es responsable de mantener cada nivel durante exactamente un tiempo de bit (104 µs a 9600 baudios). El código es casi el mismo, pero ahora el tiempo importa en cada instrucción:
const byte PIN_TX = 3;
const unsigned int US_POR_BIT = 104; // 1 / 9600 baudios ≈ 104,2 µs
// Asíncrona: inicio, 8 bits de datos (LSB primero) y parada
void enviarAsincrono(byte dato) {
noInterrupts(); // una interrupción alargaría un bit
digitalWrite(PIN_TX, LOW); // bit de inicio
delayMicroseconds(US_POR_BIT);
for (byte i = 0; i < 8; i++) {
digitalWrite(PIN_TX, (dato >> i) & 1); // bit i del byte
delayMicroseconds(US_POR_BIT);
}
digitalWrite(PIN_TX, HIGH); // bit de parada (y reposo)
delayMicroseconds(US_POR_BIT);
interrupts();
}
Este segundo código tiene un defecto sutil: cada digitalWrite consume unos microsegundos que se suman al retardo, así que los bits duran algo más de 104 µs y la velocidad real queda unos puntos porcentuales por debajo de la nominal. Un diseño cuidadoso resta ese tiempo al retardo. En la práctica se usa el periférico UART de hardware, que cuenta los ciclos con precisión sin ocupar la CPU, o una biblioteca de UART por software que ya compensa estos retardos.
09 · Analogía con programación
Un receptor asíncrono con el reloj desviado
Con Python simulamos un receptor asíncrono. La trama de un byte (inicio, 8 bits de datos con el LSB primero y parada) se coloca en una línea ideal. El receptor detecta el inicio, y a partir de ahí muestrea cada bit en el instante (k + punto) × (1 + error): punto es la posición dentro del bit (0,5 = centro) y error es la desviación de su reloj respecto del del emisor. Después de la trama se asume otro byte enviado a continuación, así que la línea vuelve a bajar.
Python en tu navegador. Los bloques son editables: cambiá los valores y presioná «Ejecutar Python». La primera vez tarda unos segundos en cargar.
def trama_8n1(byte):
"""Inicio (0), 8 bits de datos con el LSB primero y parada (1)."""
return [0] + [(byte >> i) & 1 for i in range(8)] + [1]
def muestrear(byte, error, punto=0.5):
"""Bits que lee un receptor cuyo reloj tiene un error relativo (0,02 = 2 % más lento)."""
linea = trama_8n1(byte)
leidos = []
for k in range(10):
t = (k + punto) * (1 + error) # instante, en bits del emisor
n = int(t) # bit que está en la línea en ese instante
leidos.append(linea[n] if n < 10 else 0) # tras la trama llega otro inicio (0)
return leidos
def decodificar(leidos):
if leidos[0] != 0:
return "falso inicio"
if leidos[9] != 1:
return "error de trama (el bit de parada no es 1)"
valor = sum(leidos[1 + i] << i for i in range(8))
return f"byte recibido: 0x{valor:02X}"
for error in (-0.06, -0.05, 0.0, 0.05, 0.06):
print(f"reloj {error * 100:+.0f} % -> {decodificar(muestrear(0xA5, error))}")
print()
for punto in (0.5, 0.9):
print(f"muestreo al {punto * 100:.0f} % del bit, reloj +3 % -> {decodificar(muestrear(0x55, 0.03, punto))}")
Resultado: con el byte 0xA5, hasta ±5 % de error el receptor lee bien. Con +6 % ve un error de trama, porque el muestreo del bit de parada cae ya en el inicio del byte siguiente. Con −6 % ocurre lo peor: lee 0x25 sin ningún aviso, porque las últimas muestras caen en el bit anterior y, como el bit 7 del byte vale 1, el bit de parada parece correcto por casualidad. En la segunda prueba, muestrear al 50 % del bit tolera un +3 %, pero hacerlo al 90 % ya produce un error de trama. Probá con otros bytes y errores y buscá el límite exacto con 0,5 y con 0,9.
El modelo ignora el ruido y los flancos lentos, así que el límite real es menor. Aun así muestra por qué la UART debe muestrear en el centro del bit: es el punto con mayor margen para ambos lados.
10 · Exploración interactiva
Un receptor con el reloj desviado
Este laboratorio aplica el modelo del apartado anterior. Elegí un byte, la velocidad del enlace, el error de reloj del receptor y el punto del bit en que muestrea. Vas a ver la trama que se transmite, los bits que lee el receptor (los que difieren aparecen resaltados) y el veredicto: correcto, error de trama detectado o un valor equivocado que pasa sin que el receptor se entere.
Receptor asíncrono 8N1
Mové el deslizador de error o cambiá el byte: los resultados se calculan al instante.
El resultado se calcula para un byte seguido inmediatamente por otro (sin pausa entre caracteres). El «desvío al muestrear la parada» indica cuánto se aparta el instante de lectura del último bit respecto de su centro nominal; mientras no cruce el borde del bit, la lectura es correcta.
Recorrido guiado
- Con los valores iniciales (0xA5 = 165, error 0 %, muestreo al centro), todo se lee bien. Mirá la fila «Bit»:
Ies el inicio, 0 a 7 los datos yPla parada. A 9600 baudios, cada bit dura 104,2 µs y salen 960 bytes útiles por segundo. - Subí el error de a poco. Hasta ±5 % el receptor lee todo bien, y el límite exacto que indica el panel es ±5,3 % con muestreo central.
- A +6 %, aparece el error de trama: el bit de parada se lee como 0 porque el muestreo ya cae en el inicio del byte siguiente.
- A −6 %, con el byte 165, el veredicto es «valor erróneo sin aviso»: el receptor entrega 37 (0x25) y ni siquiera detecta que algo falló. Probá con 85 (0x55) a −6 %: este sí produce error de trama. Que el fallo se vea o no depende de los datos; por eso conviene tener paridad o CRC.
- Volvé a 0 % y cambiá el punto de muestreo a 90 %. La tolerancia positiva se reduce a poco más de 1 %. Poné +3 % y fallará, aunque con el muestreo al centro funcionaba bien.
- Con muestreo al 10 %, el límite positivo mejora (9,9 %) pero el negativo cae a 1,1 %. Solo el centro equilibra ambos lados.
- Cambiá la velocidad a 115 200 baudios: la duración del bit baja a 8,7 µs, pero la tolerancia en porcentaje es la misma. Subir la velocidad no hace más exigente al reloj; lo que cambia es el error absoluto en nanosegundos.
Desafío: el límite con muestreo al 70 %
Las fórmulas generales para el muestreo en la posición p del bit son: límite positivo = 10 / (9 + p) − 1 y límite negativo = 1 − 9 / (9 + p). Con p = 0,7 resulta +3,1 % y −7,2 %. Como el muestreo ya está corrido hacia el final del bit, el lado que se pierde es el de los relojes lentos del receptor (error positivo), que se pasan antes al bit siguiente. Verificalo en el laboratorio con p = 90 % y explicalo con tus palabras.
11 · Método de trabajo
Cómo elegir y configurar
- Mirá qué ofrece el componente. Casi siempre la hoja de datos decide: un sensor I²C o SPI es síncrono, un módulo GPS o Bluetooth serie, asíncrono.
- Si es síncrono, identificá quién genera el reloj (el maestro) y con qué flanco se muestrea. SPI lo define con los modos CPOL y CPHA (tema 13); en I²C está fijado por el protocolo.
- Respetá setup y hold. Compará la frecuencia de reloj con el límite que impone la hoja de datos; si se supera, los datos se leen mal de forma intermitente.
- Si es asíncrono, acordá la configuración completa: velocidad, bits de datos, paridad y bits de parada. Una diferencia en cualquiera produce basura o errores de trama.
- Verificá el error de reloj. Calculá la velocidad real que produce tu divisor y sumá los errores de ambos extremos. Si hay un oscilador RC, calibralo o usá un cristal.
- Definí cómo se delimitan los mensajes. En un enlace asíncrono, el protocolo de aplicación debe marcar el comienzo y el fin de cada mensaje.
- Medí con un analizador lógico. Para un enlace asíncrono, medí la duración de un bit y comprobá que coincide con la teórica; para uno síncrono, verificá que el dato esté estable en cada flanco de muestreo.
La falla más común es una velocidad distinta en los dos lados: al medir un bit en el analizador se ve enseguida. La segunda, una línea que queda sin definir (sin pull-up o sin pull-down) y produce flancos falsos que el receptor interpreta como bits de inicio.
12 · Comprensión
Confusiones frecuentes
«Asíncrono significa que los datos pueden llegar en cualquier momento, sin tiempos»
Los bytes pueden empezar en cualquier momento (hay pausas arbitrarias entre ellos), pero dentro de cada byte los bits tienen una duración fija y precisa. En comunicaciones, «asíncrono» significa «sin reloj compartido», no «sin tiempos».
«Síncrono siempre necesita un cable de reloj»
No: USB, Ethernet o PCIe son síncronos y no tienen cable de reloj. El receptor lo recupera de los datos gracias a una codificación que garantiza transiciones. Lo que define la comunicación síncrona es que el receptor sincroniza su reloj con el del emisor de forma continua.
«Si la velocidad nominal coincide, la comunicación asíncrona no puede fallar»
Los dos relojes pueden coincidir en el valor programado y diferir en el real. Un oscilador RC interno con ±10 % o un divisor que no puede generar la velocidad exacta producen errores que superan el límite del 5 %. Siempre hay que calcular el error efectivo.
«El error de trama indica que hubo un error de datos»
Solo indica que el bit de parada no llegó en 1. Un desajuste de reloj puede entregar un valor equivocado sin error de trama, como vimos con 0xA5 a −6 %. La ausencia de error de trama no demuestra que los datos sean correctos.
«Más velocidad requiere relojes más precisos en la comunicación asíncrona»
La tolerancia relativa (alrededor del 5 % en teoría) no cambia con la velocidad. Lo que sí cambia con ella son los efectos físicos: a mayor velocidad, los flancos lentos y el ruido consumen una parte mayor del tiempo de bit.
«Los buses síncronos no necesitan configurar nada de tiempos»
No hace falta acordar una velocidad, pero sí respetar el flanco de muestreo, los tiempos de establecimiento y retención, y la frecuencia máxima que soporta cada dispositivo de la cadena.
13 · Práctica guiada
Predecí antes de comprobar
1. Eficiencia de una UART
Calculá cuántos bytes de datos útiles por segundo transporta un enlace a 9600 baudios con formato 8N1 y con formato 8E2 (8 datos, paridad par y 2 bits de parada).
Ver solución
8N1: 1 + 8 + 1 = 10 bits por byte → 9600 / 10 = 960 bytes/s (80 %). 8E2: 1 + 8 + 1 + 2 = 12 bits → 9600 / 12 = 800 bytes/s (66,7 %).
2. Tiempo de bit
¿Cuánto dura un bit a 9600 y a 115 200 baudios? ¿A qué distancia del flanco de inicio debe leerse el primer bit de datos?
Ver solución
9600 baudios: 1 / 9600 ≈ 104,2 µs; 115 200 baudios: ≈ 8,68 µs. El primer bit de datos se lee a 1,5 tiempos de bit del flanco de inicio: 156 µs y 13 µs respectivamente (medio bit para llegar al centro del inicio, más un bit hasta el centro del primer dato).
3. ¿Se entienden?
Un transmisor tiene un error de reloj de +3 % y el receptor de −3 %. ¿Cuál es el error relativo y comunican bien en 8N1 con muestreo central? ¿Y si cada uno tiene ±1 %?
Ver solución
Con +3 % y −3 % el error relativo es casi 6 %, por encima del límite de 5,26 %: la comunicación falla. Con +1 % y −1 % queda cerca del 2 %, dentro del margen práctico: funciona.
4. Velocidad máxima de un bus síncrono
Un esclavo SPI requiere 25 ns de establecimiento, y el dato tarda 5 ns en estar disponible tras el flanco que lo cambia. El dato cambia en un flanco y se lee en el siguiente (medio ciclo después). ¿Cuál es la frecuencia máxima de reloj?
Ver solución
El medio ciclo debe ser al menos 25 + 5 = 30 ns, así que el ciclo completo es de al menos 60 ns y f ≤ 1 / 60 ns ≈ 16,7 MHz. Con menos margen no se garantiza que el dato esté estable cuando el esclavo lo lee.
5. Decodificar una línea
Una línea en reposo (1) cae a 0 y presenta, en intervalos de un bit, la secuencia 0 1 0 1 0 1 0 1 0 1 antes de volver al reposo. ¿Qué byte se transmitió en 8N1?
Ver solución
El primer 0 es el inicio y el último 1 la parada. Los ocho bits de datos, LSB primero, son D0 a D7 = 1, 0, 1, 0, 1, 0, 1, 0, es decir, 1 + 4 + 16 + 64 = 85 = 0x55 (el carácter «U»). Algunos dispositivos usan este byte para medir la velocidad automáticamente, porque genera una transición en cada bit.
6. Clasificar
Clasificá estos enlaces según cómo se sincronizan: (a) con línea de reloj dedicada, (b) asíncrono con inicio y parada, (c) con reloj embebido en los datos: SPI, UART, USB, I²C, Ethernet, RS-232.
Ver solución
(a) SPI e I²C. (b) UART y RS-232 (que es una capa eléctrica para la UART). (c) USB y Ethernet. CAN y 1-Wire no entran en esta lista: CAN se resincroniza con los flancos de los datos (con relleno de bits) y 1-Wire usa intervalos de tiempo definidos por el maestro.
14 · Síntesis
Ideas para recordar
- Para convertir una línea en bits, el receptor necesita saber cuándo muestrearla: esa es la sincronización.
- En la comunicación síncrona con reloj, una línea adicional marca cuándo leer cada bit; el receptor no necesita ser preciso y respeta los tiempos de establecimiento y retención.
- En la asíncrona, cada extremo tiene su reloj y se acuerda la velocidad; cada palabra se enmarca con un bit de inicio y uno de parada, y se muestrea en el centro de cada bit.
- Un formato 8N1 usa 10 bits por byte: la eficiencia es del 80 % y a 9600 baudios hay 960 bytes útiles por segundo.
- La tolerancia teórica entre relojes en 8N1 es de ±5,26 % (0,5 / 9,5); en la práctica se limita a ±2 % y cuenta la diferencia entre ambos extremos.
- Un desajuste puede causar un error de trama o, peor, un valor equivocado sin aviso; muestrear fuera del centro reduce la tolerancia.
- Los enlaces rápidos (USB, Ethernet, SATA, PCIe) esconden el reloj en los datos con Manchester, relleno de bits o 8b/10b, y el receptor lo recupera con un PLL.
- La sincronización de bits no basta: el protocolo debe además delimitar palabras y mensajes.
¿Listo para el tema 4?
Antes de avanzar, dibujá de memoria la trama 8N1 del carácter «A» (0x41) marcando los instantes de muestreo, calculá el error de reloj máximo que tolera y explicá por qué un enlace síncrono con reloj no tiene este problema. Si podés justificar las tres respuestas, tenés clara la base de UART, SPI e I²C.
En el próximo tema estudiamos la velocidad, los baudios y el sentido de la comunicación: la diferencia entre bits por segundo y baudios, el ancho de banda y los modos símplex, half duplex y full duplex.