Trasmissione di messaggi diversi con lo SAME ID su un bus CAN


12

L'arbitrato CAN viene eseguito con ID e qualsiasi nodo sul bus può trasmettere con qualsiasi ID (idealmente non dovrebbe, ma un nodo cattivo può farlo).

Cosa succede se due nodi diversi collegati sullo stesso bus CAN trasmettono messaggi con gli stessi ID ma byte di dati diversi?

Il mio pensiero: genererà immondizia sul bus. Chiunque abbia i bit dominanti, solo quelli verranno trasmessi.


1
Non sono sicuro del perché lo abbiano fatto in questo modo. Avrei pensato che avrebbe avuto più senso l'applicazione dell'arbitrato all'intero messaggio.
Rocketmagnet,

Risposte:


12

Sezione 6.1 delle specifiche CAN :

BIT ERROR: un'unità che sta inviando un bit sul bus monitora anche il bus. Un ERRORE BIT deve essere rilevato in quel momento, quando il valore di bit monitorato è diverso dal valore di bit inviato. Un'eccezione è l'invio di un bit 'recessivo' durante il flusso di bit di riempimento del CAMPO ARBITRATO o durante lo SLOT ACK.

Quindi, il nodo che prima trasmette un '1' quando l'altro sta trasmettendo uno '0' noterà un errore Bit e quindi segnalerà un errore normalmente - trasmettendo un flag di errore (vedere la Sezione 3.1.3), come descritto formalmente nella sezione 6.2.

Informalmente, se quel nodo è attivo per errore (che dovrebbe essere il solito caso) trasmetterà un flag di errore di 6 bit dominanti, che verranno rilevati anche da tutti gli altri nodi (come errore roba). Ciò ha l'effetto di distruggere completamente quel messaggio:

  • nessuno lo riceverà
  • nessuno dei trasmettitori penserà di aver trasmesso qualcosa con successo.

Ciascun trasmettitore tenterà quindi di ritrasmettere - a seconda del momento preciso delle ritrasmissioni, uno può iniziare sufficientemente prima dell'altro il controllo del guadagno del bus. Altrimenti, la stessa sequenza potrebbe ripetersi. (O un altro messaggio con priorità più alta potrebbe rimandarli entrambi per un po '!)


Risposta estesa ispirata alla risposta di @ clabbacchio di seguito.

Menzionate "nodi cattivi" e clabbacchio sottolinea che se due nodi trasmettono in momenti diversi, ciascun ricevitore deve decidere cosa fare con i suoi molteplici ricevimenti.

Lo ha dimostrato un hack lo scorso anno . Il documento discute, nella sezione "Specifiche PSCM", come un utente malintenzionato può sincronizzarsi con i normali messaggi sul bus e riprodurre il loro messaggio malvagio poco prima di quello che l'ECU "buona" sta per inviare. La centralina ricevente accetta il messaggio precedente, aggiorna il contatore dei messaggi e quindi elimina i messaggi "validi" come errati, poiché il contatore dei messaggi non è aumentato.


1

Nella tua domanda, fai questa ipotesi:

Chiunque abbia i bit dominanti, solo quelli verranno trasmessi.

Il che presuppone che i due messaggi vengano trasmessi esattamente nello stesso momento, il che è un caso specifico di un problema più generale. La risposta valida di Martin copre questo specifico problema, ma ignora il caso (più generale) in cui i due nodi trasmettono in momenti diversi.

In tal caso, sul bus circoleranno due messaggi con lo stesso ID ma con payload diversi e spetta alla logica dei ricevitori discriminare i due messaggi e decidere se è il contenuto che devono ricevere. Se non riescono a distinguere i due messaggi, potrebbero interpretare erroneamente i dati e causare problemi più gravi dei semplici frame di errore.

Ad esempio, dire che un messaggio contiene la lettura di un sensore di temperatura, l'altro contiene la posizione target di un attuatore sullo stesso byte (NON DOVREBBE MAI ACCADERE NELLA VITA REALE), è possibile che l'attuatore lo ottenga come target senza nemmeno saperlo.


Sì, è necessario implementare una logica per distinguere tra due messaggi. Ma la mia domanda era se l'arbitrato fosse eseguito sulla base dell'ID, quindi cosa succederebbe se l'ID del messaggio fosse lo stesso e i dati fossero diversi.
Swanand,

@Swanand solo sull'ipotesi della trasmissione simultanea allora? Basta notare che è un caso d'angolo, è più probabile il contrario
clabacchio

0

Se il campo dei dati dei messaggi è diverso, si spera (si spera!) Che si verifichi un frame di errore sul bus a causa di CRC errato.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.