Transmisión de diferentes mensajes con la MISMA ID en un bus CAN

12

El arbitraje de CAN se realiza con ID, y cualquier nodo en el bus puede transmitir con cualquier ID (idealmente no debería, pero un nodo desagradable puede).

¿Qué sucede si dos nodos diferentes conectados en el mismo bus CAN transmiten mensajes con las mismas ID pero con diferentes bytes de datos?

Mi pensamiento: generará basura en el autobús. Quien tenga los bits dominantes solo se transmitirán.

Swanand
fuente
1
No estoy seguro de por qué lo hicieron de esta manera. Pensé que tendría más sentido que el arbitraje se aplicara a todo el mensaje.
Rocketmagnet

Respuestas:

12

Sección 6.1 de la especificación CAN :

BIT ERROR: una unidad que está enviando un bit en el bus también monitorea el bus. Se debe detectar un ERROR DE BIT en ese momento de bit, cuando el valor de bit que se supervisa es diferente del valor de bit que se envía. Una excepción es el envío de un bit 'recesivo' durante el flujo de bits rellenos del CAMPO DE ARBITRAJE o durante el SLOT ACK.

Entonces, el nodo que primero transmite un '1' cuando el otro transmite un '0' notará un error de bit y luego señalará un error como normal, al transmitir un indicador de error (ver Sección 3.1.3), como se describe formalmente en la Sección 6.2.

Informalmente, si ese nodo está activo por error (que debería ser el caso habitual) transmitirá un indicador de error de 6 bits dominantes, que todos los demás nodos también detectarán (como un error de relleno). Esto tiene el efecto de destruir ese mensaje por completo:

  • nadie lo recibirá
  • Ninguno de los transmisores pensará que ha transmitido nada con éxito.

Cada transmisor intentará retransmitir, dependiendo del momento preciso de las retransmisiones, uno puede comenzar lo suficiente antes que el otro para obtener el control de ganancia del bus. De lo contrario, la misma secuencia puede volver a ocurrir. (¡O otro mensaje de mayor prioridad puede retrasarlos a ambos por un tiempo!)


Respuesta extendida inspirada por la respuesta de @ clabbacchio a continuación.

Usted menciona "nodos desagradables", y clabbacchio hace el punto válido de que si dos nodos transmiten en diferentes momentos, cada receptor debe decidir qué hacer con sus múltiples recepciones.

Esto fue demostrado por un hack el año pasado . El documento discute, en la sección "detalles de PSCM", cómo un atacante puede sincronizarse con los mensajes regulares en el autobús y reproducir su mensaje maligno justo antes del que está a punto de enviar la ECU "buena". La ECU receptora acepta el mensaje anterior, actualiza su contador de mensajes y luego descarta los mensajes "buenos" como erróneos, porque su contador de mensajes no se ha incrementado.

Martin Thompson
fuente
1

En su pregunta, hace esta hipótesis:

Quien tenga los bits dominantes solo se transmitirán.

Lo que supone que los dos mensajes se transmiten exactamente al mismo tiempo, que es un caso específico de un problema más general. La respuesta válida de Martin cubre este tema específico, pero ignora el caso (más general) en el que los dos nodos transmiten en diferentes momentos.

En ese caso, habrá dos mensajes con la misma ID pero diferente carga útil circulando en el bus, y depende de la lógica de los receptores discriminar entre los dos mensajes y decidir si es el contenido que necesitan recibir. Si no logran distinguir los dos mensajes, pueden malinterpretar los datos y causar problemas más serios que solo cuadros de error.

Por ejemplo, digamos que un mensaje contiene la lectura de un sensor de temperatura, el otro contiene la posición objetivo de un actuador en el mismo byte (NUNCA DEBE SUCEDER EN LA VIDA REAL), es posible que el actuador obtenga eso como su objetivo sin siquiera saberlo.

clabacchio
fuente
Sí, se debe implementar una lógica para distinguir entre dos mensajes. Pero mi pregunta era si el arbitraje se realiza sobre la base de la ID, entonces, ¿qué sucederá si la ID del mensaje es la misma y los datos son diferentes?
Swanand
@Swanand solo en la hipótesis de transmisión simultánea entonces? Solo
tenga en
0

Si el campo de datos de los mensajes es diferente, (¡con suerte!) Obtendrá un marco de error en el bus debido a un CRC incorrecto.

Axeman
fuente