Te sugerimos que revises esta respuesta en un entorno controlado antes de pasarlo a producción, saludos.
Solución:
Un bus CAN es multimaestro y automáticamente libre de arbitraje. El punto es que no necesita un solo maestro o controlador principal para encargarse de todo. Cada mensaje que se envía tiene una prioridad, y los mensajes de mayor prioridad superan a los de menor prioridad (un mensaje de menor prioridad esperará hasta que no se envíe un mensaje de alta prioridad). Entonces no hay esclavos. Es un poco similar a una red de igual a igual, en el sentido de que está descentralizada. La razón por la que se hace esto es para reducir los puntos de falla. Si un solo controlador principal fallara, también fallaría toda la red. Si no hay un controlador central, un solo componente puede fallar y el resto del sistema seguirá funcionando.
Para su red, debe asignar prioridades a cada comando enviado según lo que sea más importante. El artículo de Wikipedia es bastante bueno.
CAN es un protocolo de bajo nivel, en algún lugar alrededor de la capa de enlace de datos del modelo OSI (capa 2). Por lo tanto, solo se ocupa de transferir tramas de datos genéricas. CAN no especifica una topología de red, ni cómo se transmiten los datos, ni la naturaleza de los datos, etc., etc.
Entonces, CAN no es un protocolo maestro/esclavo por la misma razón que UART no lo es.
Además de los marcos de protocolo CAN estándar, necesita capas más altas que definan la comunicación. Los más comunes para CAN son:
- CANopen (más común, genérico)
- DeviceNet (genérico, utilizado principalmente en la industria de la automatización)
- J1939 (camiones, tractores, vehículos pesados)
Estos funcionan de maneras completamente diferentes.
CANopen, por ejemplo, no define un maestro en lo que respecta al tráfico de datos. La comunicación de datos entre nodos en el bus es solo una preocupación de los nodos involucrados: no hay un maestro que dirija el tráfico de datos y cada nodo puede configurarse para hablar/escuchar a cualquier otro nodo.
Pero CANopen sí define un maestro “administrador de red”, que está a cargo de supervisar los nodos en el bus: asegurarse de que se inicien correctamente y permanezcan vivos y funcionales, etc.
CAN solo tiene maestros. Un nodo transmite a la vez: si hay varios nodos transmitiendo aproximadamente al mismo tiempo, colisionarán y el nodo que transmita la ID más baja ganará el arbitraje. Los otros nodos escucharán el mensaje del nodo ganador y luego, después de un tiempo de espera, volverán a intentar sus propias transmisiones.
Y, por supuesto, no hay nada que le impida construir algún tipo de protocolo maestro/esclavo además del movimiento de mensajes de bajo nivel que CAN le proporciona.
Puedes añadir valor a nuestro contenido participando con tu experiencia en las crónicas.