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

11

El arbitraje 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 diferentes bytes de datos?

Mi pensamiento: generará basura en el autobús. Quien tenga los bits dominantes, esos solo serán transmitidos.

    
pregunta Swanand

3 respuestas

11

Sección 6.1 de la CAN spec :

  

BIT ERROR: una unidad que está enviando un bit en el bus también supervisa el   autobús. Debe detectarse un ERROR BIT en ese momento de bit, cuando el bit   El valor 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 relleno   flujo de bits del CAMPO DE ARBITRAJE o durante la RANURA DE ACK.

Por lo tanto, el nodo que primero transmite un '1' cuando el otro está transmitiendo un '0' anotará un error de bit y luego señalará un error como normal - transmitiendo un indicador de error (consulte la Sección 3.1.3), como se describe formalmente en la Sección 6.2.

De manera informal, 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 error de error). Esto tiene el efecto de destruir ese mensaje completamente:

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

Cada transmisor intentará retransmitir, dependiendo de la sincronización precisa de las retransmisiones, uno puede comenzar suficientemente antes del control de ganancia del bus. De lo contrario, la misma secuencia puede volver a ocurrir. (¡O bien, otro mensaje de mayor prioridad puede hacer que ambos se apaguen por un tiempo!)

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

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

Esto fue demostrado por un hack el año pasado . El documento analiza, en la sección "Características específicas de PSCM", cómo un atacante puede sincronizarse con los mensajes regulares en el bus y reproducir su malvado mensaje justo antes del que la ECU "buena" está a punto de enviar. 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.

    
respondido por el Martin Thompson
1

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.

    
respondido por el Axeman
0

En tu pregunta, haces esta hipótesis:

  

Quien tenga los bits dominantes, esos solo serán transmitidos.

Que asume 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 problema 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 con una carga útil diferente 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 graves que solo los marcos de error.

Por ejemplo, diga que un mensaje contiene la lectura de un sensor de temperatura, el otro contiene la posición de destino de un actuador en el mismo byte (NO DEBE OCURRIR EN LA VIDA REAL), puede hacer que el actuador obtenga ese objetivo sin siquiera saberlo. p>     

respondido por el clabacchio

Lea otras preguntas en las etiquetas