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.