01 · Punto de partida
De dos dispositivos a muchos
Con dos dispositivos, la comunicación es sencilla: un cable, un emisor y un receptor. Pero un proyecto real rara vez se queda ahí. Una placa maneja un sensor de temperatura, una pantalla, una memoria y un reloj; una planta tiene decenas de medidores; una casa tiene cientos de dispositivos conectados al router. Con tantos participantes hay que resolver dos problemas que no existían antes.
- El problema del cableado. ¿Cómo se conectan? ¿Cada uno con cada otro, todos a un mismo cable o todos a un punto central? La respuesta es la topología.
- El problema del turno. Si dos dispositivos hablan a la vez por el mismo medio, las señales se mezclan y el mensaje se destruye. ¿Quién habla cuándo, y quién puede iniciar una conversación? La respuesta son los roles y el método de acceso al medio.
Es un problema conocido en programación: varios hilos que escriben en el mismo recurso sin coordinación producen datos corruptos, y por eso existen los semáforos, las colas y los protocolos de acceso. En un bus, el recurso compartido es el cable.
02 · Dos mapas distintos
Topología física y lógica
La topología física describe cómo están tendidos los cables: dónde llega cada uno y cómo se conectan. La topología lógica describe cómo circulan los datos: quién puede hablar con quién y por qué camino. Pueden diferir.
Un ejemplo clásico: una red Ethernet con un concentrador (hub) tiene cableado en estrella física, porque cada equipo tiene su propio cable hasta el centro, pero se comporta como un bus lógico, porque el concentrador repite cada señal por todos los puertos y todos comparten el medio. En cambio, con un conmutador (switch), la topología lógica también es una estrella: el centro entrega cada mensaje solo al puerto destinatario.
También ocurre con SPI. Físicamente, los reloj y datos forman un bus compartido por todos los esclavos, mientras que cada selección de chip es una línea punto a punto que sale del maestro hacia un esclavo. Para el programador, importa más la topología lógica (¿a quién le puedo escribir y cuándo?), pero para el soldador y el diseñador de placas importa la física (¿cuánto cable y qué impedancia?). En este tema usamos «topología» en ambos sentidos y aclaramos cuando difieren.
03 · El mapa
Punto a punto, bus, estrella, anillo y malla
Punto a punto
Dos dispositivos unidos por un enlace exclusivo. Es la más simple: no hay direcciones, ni turnos, ni conflictos. La UART entre un microcontrolador y una computadora, el RS-232 y un enlace de radio entre dos módulos son ejemplos. El problema aparece al crecer: conectar n dispositivos entre sí con enlaces punto a punto exige n(n − 1)/2 enlaces (una malla completa): 15 para 6 nodos y 496 para 32.
Bus
Todos los dispositivos comparten un mismo cable (el troncal) al que se conectan por derivaciones cortas. Es la topología de I²C, de RS-485, de CAN y de 1-Wire, y la de las líneas de reloj y datos de SPI. Ahorra cable y simplifica agregar nodos: basta con enganchar uno más. A cambio, exige reglas para compartir el medio y cuidar la calidad de la señal: cada nodo suma capacidad y carga, las derivaciones largas generan reflexiones y los extremos del bus necesitan una terminación (típicamente una resistencia de 120 Ω en RS-485 y CAN, que veremos en los temas 24 y 27). Y si el cable troncal se corta, el bus queda dividido en dos.
Estrella
Cada dispositivo tiene su propio enlace hacia un nodo central, que concentra o reenvía el tráfico. Es la topología de Ethernet con conmutador, de Wi-Fi (punto de acceso), de Bluetooth y BLE (un dispositivo central con varios periféricos) y de las redes LoRaWAN (puerta de enlace). La falla de un cable o de un nodo solo aísla a ese nodo, y la ubicación de los problemas es fácil. Su punto débil es el centro: si falla, la red entera cae, y su capacidad limita el número de nodos.
Anillo, árbol y malla
- Anillo. Cada nodo se une con el siguiente y el último con el primero; los mensajes circulan en un sentido y pasan por todos. Se usa en algunos buses industriales, y un SPI en cadena (daisy chain) lo reproduce: los datos salen del maestro, atraviesan cada dispositivo y vuelven al maestro.
- Árbol. Una jerarquía de estrellas: el USB conecta periféricos a hubs que a su vez cuelgan de otros. Cada nivel agrega retardo y comparte el ancho de banda de su rama.
- Malla (mesh). Los nodos se conectan con varios vecinos y los mensajes encuentran rutas alternativas. Zigbee, Thread y Bluetooth mesh la usan: si un nodo desaparece, los demás reencaminan. A cambio, el software de enrutamiento es complejo.
04 · Costos y fallos
Comparar topologías: cables y fallos
Para elegir una topología conviene preguntarse cuánto cable exige y qué pasa cuando algo falla. Con n nodos:
| Topología | Enlaces o cables con n nodos | Si falla un nodo | Si falla un cable | Escalabilidad |
|---|---|---|---|---|
| Punto a punto (red completa) | n(n − 1)/2 | Se pierde solo ese nodo | Se pierde solo ese enlace | Mala: crece con el cuadrado de n |
| Bus | 1 troncal + n derivaciones | Normalmente nada, salvo que bloquee la línea | El bus se parte en dos mitades | Buena hasta el límite de carga y longitud |
| Estrella | n | Se pierde solo ese nodo | Se pierde solo ese nodo | Buena; limitada por los puertos del centro. Si falla el centro, cae todo |
| Anillo | n | Corta el anillo, salvo que tenga derivación de emergencia | Corta el anillo | Media; el retardo crece con n |
| Malla | Entre n y n(n − 1)/2 | Se reencamina por otras rutas | Se reencamina por otras rutas | Alta, a costa de complejidad |
Dos advertencias sobre el bus. Primero, un nodo defectuoso puede ser peor que uno apagado: si su salida queda atascada en nivel bajo, mantiene la línea baja y inutiliza el bus entero. Es la falla clásica de I²C (un esclavo que se queda sosteniendo SDA), y por eso muchos diseños prevén una forma de reiniciar o aislar nodos. Segundo, el bus real tiene un límite de nodos: depende de la capacidad total (I²C admite 400 pF), de la carga eléctrica de cada receptor (RS-485 estándar admite 32 cargas unitarias) y de las direcciones disponibles.
05 · Quién inicia
Roles: quién inicia la conversación
La topología describe los cables; los roles describen el comportamiento de cada dispositivo en la conversación. Lo esencial es saber quién puede empezar a hablar:
| Modelo | Quién inicia | Cómo se comporta el otro | Ejemplos |
|---|---|---|---|
| Maestro–esclavo | Solo el maestro | El esclavo responde únicamente cuando se le pregunta | SPI, I²C, Modbus RTU, 1-Wire |
| Multimaestro | Cualquier nodo, previa arbitración | Todos pueden iniciar; solo uno transmite a la vez | CAN, I²C con varios maestros |
| Cliente–servidor | El cliente | El servidor espera pedidos y responde | HTTP, DNS, un servidor web en un ESP32 |
| Publicador–suscriptor | Cualquier cliente, hacia un intermediario (broker) | El broker reparte cada mensaje a los suscriptores interesados | MQTT |
| Central–periférico | El periférico anuncia; el central decide conectarse | Una vez conectados, el central marca el ritmo | Bluetooth LE |
| Pares (peer to peer) | Cualquiera, sin jerarquía | Cada nodo es a la vez emisor y receptor | ESP-NOW, redes mesh |
Observá que roles y topología son independientes: Modbus es maestro–esclavo sobre un bus RS-485; BLE es central–periférico sobre una estrella; CAN es multimaestro sobre un bus. Cambiar uno de los dos no obliga a cambiar el otro.
La limitación del esclavo
En un esquema maestro–esclavo, un esclavo nunca puede hablar por iniciativa propia. Si un sensor I²C detecta un evento urgente, no tiene forma de avisar sobre el bus. Hay dos soluciones. El maestro puede preguntar periódicamente si hay novedades, lo que se llama sondeo y es el tema de las secciones siguientes. O bien se agrega una línea de interrupción separada del esclavo al maestro, que el esclavo baja para decir «tengo algo»; el maestro entonces inicia la lectura. Muchos sensores I²C y SPI tienen un pin INT con esa finalidad.
En un modelo cliente–servidor, la situación es similar: el servidor espera. Para recibir avisos del servidor sin preguntar continuamente se usan otras técnicas (conexiones persistentes, WebSocket o el modelo de publicación y suscripción de MQTT), que veremos en el bloque de redes IP.
06 · Compartir el medio
Acceso al medio: quién habla cuándo
Si varios nodos comparten un medio, se necesita una regla que evite que hablen a la vez. Los métodos habituales son:
| Método | Cómo funciona | Tiempo de respuesta | Ejemplos |
|---|---|---|---|
| Selección por línea | El maestro activa una línea dedicada (CS) para elegir con quién habla | Inmediato y predecible | SPI |
| Sondeo (polling) | El maestro pregunta a cada esclavo en orden; solo habla quien es consultado | Predecible, pero crece con el número de esclavos | Modbus RTU, UART con direcciones |
| Arbitraje por prioridad | Los nodos transmiten a la vez; el de mayor prioridad gana sin perder datos | Acotado para los mensajes de alta prioridad | CAN, I²C multimaestro |
| Paso de testigo (token) | Solo habla quien posee un testigo que circula entre los nodos | Predecible: el máximo es una vuelta completa | Token Ring, algunos buses industriales |
| Acceso aleatorio con detección de colisión | Cada nodo escucha antes de hablar; si dos hablan, ambos se detienen y reintentan tras una espera aleatoria | Variable: empeora con la carga | Ethernet con concentrador (CSMA/CD), Wi-Fi (CSMA/CA) |
| División en el tiempo | Cada nodo recibe franjas de tiempo asignadas | Predecible | Bluetooth (franjas de 625 µs), redes celulares |
La diferencia importante es entre los métodos deterministas (selección, sondeo, arbitraje, testigo y franjas), donde se puede calcular de antemano cuánto tarda un mensaje, y los aleatorios (CSMA), donde solo hay promedios. Para un sistema de control con plazos estrictos, como el de un automóvil, se elige un método determinista; para una oficina con computadoras, el aleatorio es suficiente y más flexible.
07 · Un truco eléctrico
Arbitraje en un bus de colector abierto
El arbitraje es el método más elegante. Lo usan CAN e I²C multimaestro, y se apoya en lo que vimos en el tema anterior: en una línea de colector abierto, el nivel bajo domina. Si un nodo pone un 0 y otro un 1, la línea queda en 0 (es un Y cableado). Y como cada nodo lee la línea mientras transmite, puede descubrir que alguien más está hablando.
El procedimiento es el siguiente. Todos los nodos que quieren transmitir empiezan a la vez, enviando bit a bit su identificador (el más significativo primero) y comparando lo que envían con lo que ven en el bus:
- Si el nodo envía un 0, el bus quedará en 0 en cualquier caso: sigue.
- Si envía un 1 y el bus queda en 1, nadie más puso un 0 en ese bit: sigue.
- Si envía un 1 pero ve un 0, otro nodo tiene un identificador menor: perdió. Deja de transmitir y se pone a escuchar.
Al terminar el identificador solo queda un nodo, que continúa su mensaje sin que nada se haya corrompido. Gana el identificador numéricamente menor, que representa la máxima prioridad. Un ejemplo con tres nodos de 11 bits (A = 0x120, B = 0x0A5, C = 0x300):
| Bit | Nodo A (0x120) | Nodo B (0x0A5) | Nodo C (0x300) | Bus | Qué pasa |
|---|---|---|---|---|---|
| 10 | 0 | 0 | 0 | 0 | Todos siguen |
| 9 | 0 | 0 | 1 | 0 | C envió 1 y vio 0: C se retira |
| 8 | 1 | 0 | — | 0 | A envió 1 y vio 0: A se retira |
| 7 a 0 | — | sigue | — | identificador de B | B transmite su mensaje sin interrupción |
El resultado es que el mensaje de B no sufrió ninguna colisión destructiva. Este mecanismo se llama arbitraje no destructivo, y es lo que da a CAN su comportamiento determinista: el mensaje más prioritario siempre pasa de inmediato. Su condición es que dos nodos jamás usen el mismo identificador; si lo hicieran, no se darían cuenta de la coincidencia hasta que sus datos difirieran, y se produciría un error. Lo desarrollamos en los temas 27 y 28.
08 · Cálculo
Sondeo: el costo de preguntar a todos
En el sondeo, el maestro recorre a los esclavos uno por uno: pregunta, espera la respuesta y pasa al siguiente. Es simple y determinista, pero tiene un costo directo en tiempo. Si cada transacción (pregunta más respuesta) dura t y hay n esclavos, una vuelta completa tarda:
Con la cifra del tema 4 (una consulta Modbus a 9600 baudios tarda unos 25 ms) y 8 esclavos, el ciclo es de 200 ms: cada sensor se lee 5 veces por segundo y un cambio puede pasar hasta 200 ms sin ser notado. Con 32 esclavos, el ciclo sube a 800 ms y cada uno se lee solo 1,25 veces por segundo.
Hay un segundo costo, más traicionero: los esclavos que no responden. Si el maestro espera un tiempo límite (timeout) de 100 ms cada vez que consulta a un esclavo desconectado, ese tiempo se suma al ciclo. Con 8 esclavos y 2 caídos, el ciclo pasa de 200 ms a 6 × 25 + 2 × 100 = 350 ms: dos dispositivos averiados retrasan a todos los demás un 75 %. Por eso conviene elegir un timeout apenas mayor que el tiempo de respuesta normal y, si un esclavo falla repetidamente, consultarlo con menor frecuencia.
Cuando el sondeo se vuelve lento, las salidas son: acelerar el enlace, hacer transacciones más cortas (pedir varios datos juntos en una consulta), dividir los esclavos en varios buses con su propio maestro, o pasar a un método basado en eventos, en el que el que tiene novedades avisa (interrupción o arbitraje).
09 · Con el microcontrolador
Un maestro que sondea y un esclavo que contesta
Veamos el sondeo en código sobre un bus RS-485 (que estudiaremos en el tema 24). El maestro envía una petición dirigida a una dirección, suelta el bus y espera con un tiempo límite. El ejemplo usa Serial1 (Mega, ESP32) para dejar libre el puerto de depuración.
const byte PIN_DE = 4; // dirección del transceptor RS-485
const byte N_ESCLAVOS = 4;
const unsigned long TIMEOUT_MS = 40; // algo mayor que la respuesta normal
bool consultar(byte direccion, int &valor) {
digitalWrite(PIN_DE, HIGH); // el maestro toma el bus
Serial1.write(0x7E); // marca de inicio
Serial1.write(direccion); // a quién va dirigida
Serial1.flush();
digitalWrite(PIN_DE, LOW); // lo suelta: ahora habla el esclavo
unsigned long t0 = millis();
while (Serial1.available() < 3) {
if (millis() - t0 > TIMEOUT_MS) return false; // el esclavo no respondió
}
byte quien = Serial1.read();
byte alto = Serial1.read();
byte bajo = Serial1.read();
if (quien != direccion) return false; // respuesta de otro: la descartamos
valor = (alto << 8) | bajo;
return true;
}
void loop() {
for (byte dir = 1; dir <= N_ESCLAVOS; dir++) { // una vuelta de sondeo
int v;
if (consultar(dir, v)) {
// procesar la lectura del esclavo "dir"
}
}
}
Y el esclavo, que escucha todo lo que pasa por el bus y solo contesta cuando la petición lleva su dirección:
const byte MI_DIRECCION = 2;
const byte PIN_DE = 4;
void loop() {
if (Serial1.available() >= 2) {
byte inicio = Serial1.read();
byte destino = Serial1.read();
if (inicio == 0x7E && destino == MI_DIRECCION) { // ¿me hablan a mí?
int lectura = analogRead(A0);
digitalWrite(PIN_DE, HIGH); // recién ahora toma el bus
Serial1.write(MI_DIRECCION);
Serial1.write(lectura >> 8);
Serial1.write(lectura & 0xFF);
Serial1.flush();
digitalWrite(PIN_DE, LOW); // lo libera enseguida
}
}
}
La disciplina clave del esclavo es no hablar nunca sin que se le pregunte y liberar el bus apenas termina; si un esclavo se quedara con el transmisor activo, bloquearía a los demás. Este esquema carece de detección de errores, de reintentos y de un formato robusto: el protocolo Modbus, que veremos en el tema 25, resuelve todo eso sobre la misma idea.
10 · Analogía con programación
Simular el arbitraje y el ciclo de sondeo
En Python, el arbitraje de un bus de colector abierto es un bucle sobre los bits: en cada posición, el bus vale el mínimo de los bits enviados (un 0 siempre domina) y los nodos que enviaron un 1 pero ven un 0 se retiran. Con esa función verificamos la prioridad y detectamos identificadores repetidos; luego calculamos el ciclo de un sondeo.
Python en tu navegador. Los bloques son editables: cambiá los valores y presioná «Ejecutar Python». La primera vez tarda unos segundos en cargar.
def arbitrar(ids, nombres, bits=11):
"""Arbitraje por Y cableado: el 0 (dominante) gana. Devuelve los nodos que siguen en pie."""
activos = list(range(len(ids)))
for pos in range(bits - 1, -1, -1):
enviado = {n: (ids[n] >> pos) & 1 for n in activos}
bus = min(enviado.values()) # un solo 0 en la línea basta
for n in activos:
if enviado[n] != bus:
print(f" bit {pos:2d}: {nombres[n]} envió 1, vio 0 y se retira")
activos = [n for n in activos if enviado[n] == bus]
return activos
ids = [0x120, 0x0A5, 0x300]
nombres = ["A", "B", "C"]
print("Tres nodos compiten:", [f"{i:011b}" for i in ids])
ganador = arbitrar(ids, nombres)
print("Gana el nodo", nombres[ganador[0]], f"con el identificador 0x{ids[ganador[0]]:03X}")
print()
print("Dos nodos con el MISMO identificador:")
ganador = arbitrar([0x0A5, 0x0A5], ["X", "Y"])
print("Siguen en pie", len(ganador), "nodos: ¡error de diseño!" if len(ganador) > 1 else "nodo")
def ciclo_sondeo(n, t_ms, caidos=0, timeout_ms=100):
return (n - caidos) * t_ms + caidos * timeout_ms
print()
for n, caidos in ((8, 0), (32, 0), (8, 2)):
c = ciclo_sondeo(n, 25, caidos)
print(f"{n:2d} esclavos, {caidos} caídos: ciclo {c:4.0f} ms -> {1000 / c:.2f} lecturas/s por esclavo")
Resultado: con 0x120, 0x0A5 y 0x300, C se retira en el bit 9 y A en el bit 8; gana B (0x0A5), el menor identificador. Con dos nodos idénticos nadie se retira y el programa avisa del error. En el sondeo, 8 esclavos dan un ciclo de 200 ms (5 lecturas por segundo), 32 esclavos llevan el ciclo a 800 ms (1,25 por segundo), y dos esclavos caídos con 100 ms de timeout elevan el ciclo de los 8 a 350 ms. Probá con otros identificadores y buscá cuántos esclavos soporta un ciclo de 100 ms.
La simulación omite el relleno de bits, el tiempo físico del bit y la sincronización entre nodos, que en CAN real es la que hace posible que todos «lean el bus» en el mismo instante. Sirve para entender la lógica de prioridad, no la temporización eléctrica.
11 · Exploración interactiva
Arbitraje y sondeo
El laboratorio tiene dos herramientas. En la primera, hasta cuatro nodos compiten por un bus de colector abierto con identificadores de 11 bits: verás, bit a bit, qué envía cada nodo, qué valor toma el bus y quién se retira. En la segunda, calculás cuánto cuesta cablear n nodos en cada topología y cuánto tarda un maestro en sondear a todos sus esclavos.
1. Arbitraje de un bus de colector abierto (11 bits)
| Bit | A | B | C | D | Bus |
|---|
Elegí los identificadores y los nodos que transmiten.
2. Cables y ciclo de sondeo
Cambiá los valores: los resultados se calculan al instante.
En la primera herramienta, un nodo desactivado no participa. Si dos nodos activos tienen el mismo identificador, el arbitraje no puede separarlos y la herramienta lo señala. En la segunda, el ciclo es (esclavos que responden) × (tiempo de consulta) + (caídos) × (timeout).
Recorrido guiado
- Con los valores iniciales (A = 288, B = 165 y C = 768), los tres empiezan igual en el bit 10. En el bit 9, C envía 1 pero el bus queda en 0: C se retira. En el bit 8, A envía 1 y el bus queda en 0: A se retira. B sigue solo y gana con el identificador 165 (0x0A5).
- Activá el nodo D (identificador 100). Ahora el que se retira en el bit 7 es B: D es el menor y gana, aunque B ya había superado a A y C. La prioridad la define solo el número.
- Poné el identificador de D en 0. Un identificador cero tiene todos los bits dominantes: nunca pierde un arbitraje. Es la máxima prioridad posible.
- Igualá los identificadores de B y D (165 y 165) y mirá el aviso: dos nodos con el mismo identificador no se pueden distinguir y el bus acaba en un error.
- Desactivá A, C y D: B transmite solo y el arbitraje es trivial, sin ningún nodo retirado.
- En la segunda herramienta, con 8 esclavos y 25 ms por consulta, el ciclo es de 200 ms: cada esclavo se lee 5 veces por segundo. Subí a 32 esclavos: 800 ms y 1,25 lecturas por segundo.
- Con 8 esclavos, poné 2 caídos y un timeout de 100 ms: el ciclo sube a 350 ms. Bajá el timeout a 40 ms: queda en 230 ms. Un timeout ajustado limita el daño de los esclavos averiados.
- Mirá la cantidad de cables con 32 nodos: el bus necesita 1 troncal con 32 derivaciones, la estrella 32 cables y la malla completa 496 enlaces.
Desafío: ¿cuántos esclavos entran en un ciclo de 100 ms?
Con 25 ms por consulta, un ciclo de 100 ms admite solo 4 esclavos (4 × 25 = 100 ms) si todos responden. Si querés 12 esclavos con un ciclo de 100 ms, cada transacción debe durar como máximo 100 / 12 ≈ 8,3 ms. Eso se logra, por ejemplo, subiendo la velocidad del bus de 9600 a 38 400 baudios, que divide los tiempos de línea aproximadamente por cuatro.
12 · Método de trabajo
Cómo elegir topología y roles
- Contá los dispositivos y su ubicación. Dos, una decena en una placa, o decenas distribuidos por una planta o una casa.
- Definí quién necesita hablar espontáneamente. Si solo el controlador pregunta, alcanza con maestro–esclavo; si cualquier nodo debe poder avisar de un evento, necesitás multimaestro, interrupciones o un modelo de eventos.
- Elegí la topología según la distancia y el cableado. Dentro de la placa, un bus. A lo largo de una planta, un bus diferencial (RS-485, CAN). En una red local, una estrella con conmutador. Para dispositivos sin cables o móviles, estrella o malla inalámbrica.
- Calculá el tiempo de respuesta necesario. Con sondeo, el ciclo crece con el número de esclavos; si el requisito es estricto, preferí un método con arbitraje o interrupciones.
- Pensá en las fallas. ¿Qué pasa si un nodo se cuelga con la línea baja? ¿Y si se corta un cable? Decidí si necesitás redundancia, aislamiento de nodos o reinicio remoto.
- Reservá direcciones o identificadores. Que no haya repetidos, que dejen espacio para crecer y que, en un bus con arbitraje, reflejen la prioridad de cada mensaje.
- Cuidá la parte eléctrica del bus. Terminación en los extremos, derivaciones cortas, pull-ups con el valor correcto y un límite en la cantidad de nodos.
Una regla útil para empezar: cuanto menos tráfico espontáneo y más nodos, mejor funciona el maestro–esclavo con sondeo; cuanto más eventos urgentes e independientes, más conviene un esquema con arbitraje o con publicación y suscripción.
13 · Comprensión
Confusiones frecuentes
«Un bus significa que todos los dispositivos pueden hablar cuando quieran»
Significa que comparten el medio, y justamente por eso hace falta una regla de turnos. Sin ella, dos dispositivos que hablen a la vez destruyen sus mensajes y, con salidas push-pull, hasta pueden dañar los drivers.
«En maestro–esclavo, el esclavo puede avisar si tiene un dato nuevo»
No puede iniciar la conversación. Solo responde cuando el maestro pregunta. Para avisar necesita un mecanismo extra, como una línea de interrupción, o que el maestro lo consulte con la frecuencia suficiente.
«Topología física y lógica son lo mismo»
No siempre. Un hub Ethernet es una estrella física y un bus lógico; SPI es un bus para reloj y datos, pero tiene líneas de selección punto a punto. Hay que mirar ambas para entender el comportamiento real.
«La estrella es más confiable que el bus»
Aísla las fallas de los nodos y de los cables, pero concentra el riesgo en el centro: si falla el conmutador o el punto de acceso, todos los nodos quedan incomunicados. La confiabilidad depende de qué fallas sean más probables.
«En el arbitraje, el mensaje perdedor se destruye»
Ninguno se destruye: el que pierde simplemente se retira a tiempo y reintenta cuando el bus queda libre; el que gana continúa sin pérdida. Por eso se llama arbitraje no destructivo, a diferencia de una colisión Ethernet, donde ambos mensajes se pierden.
«Con más esclavos solo se necesita más cable»
En un bus con sondeo, cada esclavo adicional también alarga el ciclo: suma una consulta a cada vuelta, así que todos los demás se leen con menos frecuencia. Con muchos esclavos hace falta dividirlos en varios buses o cambiar de método.
14 · Práctica guiada
Predecí antes de comprobar
1. Contar enlaces
Necesitás conectar 6 dispositivos. ¿Cuántos enlaces hacen falta si cada par tiene su cable propio? ¿Cuántos cables con una estrella? ¿Y con un bus?
Ver solución
Malla completa: 6 × 5 / 2 = 15 enlaces. Estrella: 6 cables hacia el nodo central (que además necesita 6 puertos). Bus: 1 cable troncal con 6 derivaciones cortas. Con 32 dispositivos la malla pasa a 496 enlaces, mientras que la estrella y el bus crecen de a uno por nodo.
2. Identificar topología y roles
Clasificá la topología y el modelo de roles de: una UART entre un microcontrolador y un módulo GPS, un bus I²C con un maestro y tres sensores, tres dispositivos Wi-Fi conectados a un router, una red CAN de un automóvil.
Ver solución
UART–GPS: punto a punto; el GPS emite sin que se lo pidan (casi símplex) y el micro puede configurarlo. I²C: bus, maestro–esclavo. Wi-Fi: estrella con el router como centro; cliente–servidor en las capas superiores. CAN: bus, multimaestro con arbitraje por prioridad.
3. Ciclo de sondeo
Un maestro sondea 12 esclavos con 30 ms por consulta. ¿Cuánto dura el ciclo y cuántas lecturas por segundo recibe cada esclavo? Si querés 10 lecturas por segundo por esclavo, ¿cuánto puede durar cada consulta?
Ver solución
Ciclo = 12 × 30 = 360 ms; cada esclavo se lee 1000 / 360 ≈ 2,8 veces por segundo. Para 10 lecturas por segundo hace falta un ciclo de 100 ms: 100 / 12 ≈ 8,3 ms por consulta como máximo. Habría que acelerar el bus, acortar los mensajes o repartir los esclavos entre dos buses.
4. Quién gana el arbitraje
Dos nodos CAN quieren transmitir a la vez, uno con el identificador 0x100 y otro con 0x0FF. ¿Cuál gana y en qué bit se define?
Ver solución
Gana 0x0FF (255), que es el menor. En 11 bits, 0x100 = 001 0000 0000 y 0x0FF = 000 1111 1111. Hasta el bit 9 son iguales (0); en el bit 8, 0x100 envía 1 y 0x0FF envía 0; el bus queda en 0 y 0x100 se retira. Fijate que los bits siguientes de 0x0FF son todos 1: da igual, la diferencia ya se resolvió en el primer bit distinto.
5. El esclavo con novedades
Un sensor I²C detecta una alarma que debe atenderse en menos de 10 ms. El maestro lo lee cada 200 ms. ¿Cómo lo resolverías?
Ver solución
Un esclavo I²C no puede iniciar la comunicación. La solución habitual es conectar la salida de interrupción (INT) del sensor a un pin del microcontrolador con interrupción externa: al producirse la alarma, el sensor baja ese pin y el maestro lee el bus de inmediato. La alternativa, sondear cada 10 ms, ocuparía el bus de forma continua para casi nunca encontrar nada.
6. Fallas en un bus y en una estrella
Una planta tiene 10 sensores conectados a un bus de 100 m, y otra tiene 10 sensores con un cable cada uno hacia un conmutador. A los 50 m del bus se corta el cable troncal. ¿Qué pasa en cada caso? ¿Y si en la estrella se corta uno de los cables?
Ver solución
Bus cortado: los nodos quedan divididos en dos grupos; los de cada lado siguen comunicándose entre sí, pero se pierde la comunicación entre lados (y, si el maestro está en un extremo, se pierden todos los del otro lado). Además, el tramo sin terminación puede generar reflexiones. Estrella con un cable cortado: solo se pierde ese sensor; los otros nueve siguen operando.
15 · Síntesis
Ideas para recordar
- La topología describe cómo se conectan los nodos (física) y cómo circulan los datos (lógica); los roles describen quién puede iniciar la conversación.
- Punto a punto es simple pero no escala (n(n − 1)/2 enlaces); el bus ahorra cable y comparte el medio; la estrella aísla fallas pero depende del centro; la malla ofrece rutas alternativas.
- En un bus, la calidad eléctrica importa: terminación en los extremos, derivaciones cortas, límite de nodos, y un nodo con la línea bloqueada puede inutilizarlo todo.
- En maestro–esclavo, solo el maestro inicia; el esclavo no puede avisar por su cuenta salvo con una línea de interrupción o mediante sondeo.
- Multimaestro, cliente–servidor, publicador–suscriptor y central–periférico son otros modelos de roles, independientes de la topología.
- El acceso al medio puede ser por selección, sondeo, arbitraje, testigo, franjas de tiempo o aleatorio con detección de colisiones; los primeros son deterministas.
- El arbitraje usa que el 0 domina en un bus de colector abierto: gana el identificador menor y el mensaje ganador no se pierde.
- El ciclo de sondeo es n × t: crece con los esclavos y se estira con los que no responden, por lo que el timeout debe ser ajustado.
¿Listo para el tema 7?
Antes de avanzar, calculá cuántos cables necesita una malla completa de 10 nodos, decidí cómo avisaría un sensor SPI de una alarma a un microcontrolador y mostrá con un ejemplo de tres identificadores de 4 bits cómo se resuelve un arbitraje. Si podés justificar las tres respuestas, tenés cerrado el bloque de fundamentos.
En el próximo tema empezamos con el primer bus del curso: la UART, y la trama asíncrona con la que dos dispositivos se comunican por solo dos cables.