Protocollo CAN Bus: funzionamento, trame e applicazioni automotive
Introduzione ai sistemi Controller Area Network

La rete di comunicazione CAN (Controller Area Network) è stata sviluppata dalla Robert Bosch GmbH su richiesta di Mercedes e si tratta di un sistema bus seriale multicast che permette la comunicazione sicura tra centraline di controllo ECU (Electronic Control Unit). Sebbene il protocollo sia nato per il campo automotive, la comunicazione CAN è diventata in breve tempo uno standard affermato anche nel campo dell’automazione industriale grazie alle sue caratteristiche e alla sua versatilità.
Livello fisico: CAN_H, CAN_L e tensione differenziale
Il sistema di comunicazione è stato pensato su due cavi, identificati con il nome di CAN_H (high) e CAN_L (low), intrecciati tra loro (doppino twistato). I due conduttori non trasportano bit opposti: lo stato logico è dato dalla tensione differenziale Vdiff = CAN_H − CAN_L. Nello stato recessivo (bit 1) entrambe le linee si trovano a circa 2,5 V e Vdiff ≈ 0 V; nello stato dominante (bit 0) CAN_H sale a circa 3,5 V e CAN_L scende a circa 1,5 V, quindi Vdiff ≈ 2 V (valori tipici del CAN high-speed ISO 11898-2, come riportato in figura).
La rete CAN, pertanto, è basata sulla differenza tra il segnale CAN_H e il segnale CAN_L: la tensione differenziale vale tipicamente circa 0 V (recessivo) o circa 2 V (dominante) e genera l’informazione binaria finale. Il ricevitore lavora a soglie: secondo la ISO 11898-2 interpreta come recessivo un Vdiff inferiore a 0,5 V e come dominante un Vdiff superiore a 0,9 V, così da tollerare le variazioni dovute a cablaggio e transceiver. Questa tecnica porta con sé un grande vantaggio: l’immunità ai disturbi di natura elettromagnetica. Infatti, essendo i due cavi intrecciati tra loro, se vi è presenza di un disturbo questo si ripercuote in modo uguale su entrambi i canali e di conseguenza la differenza tra i due segnali resta invariata, come riportato in figura. Questa caratteristica ha portato la rete CAN ad essere utilizzata in tutti quei contesti dove c’è possibilità di disturbi elettromagnetici.
Terminazione e diagnosi sulla presa OBD
Un’altra importante caratteristica di questo sistema è l’adattamento di impedenza con due resistenze da 120Ω poste una a monte e una a valle del circuito. Tutte le centraline (nodi) verranno connesse in parallelo, pertanto se si mette un tester in modalità ohmmetro tra i due canali CAN_H e CAN_L avremo una delle seguenti situazioni:
- CIRCUITO SANO: le due resistenze risultano in parallelo, pertanto la resistenza equivalente è di 60Ω.
- UNA TERMINAZIONE MANCANTE O LINEA INTERROTTA: una delle due resistenze non chiude il circuito, pertanto la resistenza equivalente è di circa 120Ω.
- CORTOCIRCUITO TRA CAN_H E CAN_L: la resistenza misurata è prossima a 0Ω.
- ENTRAMBE LE TERMINAZIONI MANCANTI O CABLAGGIO INTERROTTO: la resistenza è molto alta o il tester indica circuito aperto.

Tale prova si può eseguire facilmente sulla presa OBD (presa di diagnosi) degli autoveicoli andando a misurare la resistenza tra il pin 6 (CAN_H) e il pin 14 (CAN_L) a batteria scollegata. Inoltre, prelevando il segnale da questi due terminali con un oscilloscopio opportunamente configurato è possibile visualizzare quanto descritto fino ad ora: conviene usare due canali riferiti alla massa del veicolo con la funzione matematica CH1 − CH2, oppure una sonda differenziale, rispettando le avvertenze riportate in apertura.
Nota: su molti veicoli recenti i pin 6 e 14 della presa OBD fanno capo al solo CAN diagnostico, separato dagli altri bus da una centralina gateway: in questo caso la misura di 60Ω conferma solo lo stato della linea diagnostica e non dice nulla sugli altri bus CAN del veicolo.
Si indicherà lo stato logico LOW (bit 0) come bit dominante, mentre si definirà lo stato logico HIGH (bit 1) come bit recessivo. Per quanto riguarda invece la velocità di trasmissione si ha uno stretto legame con la lunghezza dei cavi (più corti sono, maggiore sarà la velocità). Il CAN classico lavora da poche decine di kbit/s (10–50 kbit/s su linee lunghe o nel CAN low-speed fault tolerant) fino a 1 Mbit/s, raggiungibile con una lunghezza del bus di circa 40 m; in ambito automotive i valori tipici sono 125, 250 e 500 kbit/s. Come ordine di grandezza (CAN high-speed): 1 Mbit/s fino a circa 40 m, 500 kbit/s fino a circa 100 m, 125 kbit/s fino a circa 500 m.
Guasti tipici del cablaggio
I guasti tipici del cablaggio che possono interrompere la comunicazione CAN sono i seguenti:
- bus CAN_H in cortocircuito verso massa
- bus CAN_L in cortocircuito verso massa
- bus CAN_H in cortocircuito verso alimentazione
- bus CAN_L in cortocircuito verso alimentazione
- bus CAN_H interrotto
- bus CAN_L interrotto
- bus CAN_H in cortocircuito con il bus CAN_L
Struttura della trama CAN
Dal punto di vista costruttivo, invece, il frame che compone un messaggio completo è strutturato come segue (immagine prelevata dalle CAN SPECIFICATION).
START OF FRAME
È il bit responsabile di dichiarare l’inizio di una comunicazione. Se esso assume valore binario 0 (cioè bit dominante) una comunicazione sta per iniziare.
ARBITRATION FIELD
È un insieme di 12 bit (11 dedicati alla sezione Identifier e 1 RTR) atti a definire la priorità del messaggio. Essendo il bit 0 quello dominante, più basso sarà il valore binario maggiore sarà la priorità del messaggio.
Durante l’arbitraggio ogni nodo trasmette il proprio identificatore e contemporaneamente rilegge il bus: poiché un bit dominante prevale su un bit recessivo, il nodo che trasmette un 1 e rilegge uno 0 capisce di aver perso, smette di trasmettere e riprova al termine della trama. Il messaggio con l’identificatore più basso prosegue senza essere danneggiato (arbitraggio non distruttivo, CSMA/CR). Nel frame esteso (CAN 2.0B) l’identificatore è di 29 bit anziché 11.
CONTROL FIELD
È composto da 6 bit che descrivono il controllo del pacchetto dati e permette di decodificare se il messaggio è un frame standard o esteso. In questa sezione viene anche definita la dimensione del DATA FIELD.
DATA FIELD
Può essere lungo massimo 8 byte (cioè 64bit) e contiene l’informazione.
CRC FIELD
È composto da 15 bit di CRC più 1 bit delimitatore recessivo (16 bit in totale) che interessano il nodo ricevente, il quale può dedurre se il messaggio inviato è corretto o se si sono presentati errori durante la trasmissione.
ACK FIELD
È composto da 2 bit e indica se il messaggio è stato ricevuto correttamente oppure no.
END OF FRAME
È composto da 7 bit recessivi (bit 1) consecutivi.
Bit stuffing e gestione degli errori
Per mantenere la sincronizzazione dei nodi, dopo 5 bit consecutivi dello stesso valore il trasmettitore inserisce un bit di valore opposto (bit stuffing), che il ricevitore elimina; la regola vale dallo Start of Frame fino alla fine della sequenza CRC. Sei bit uguali consecutivi vengono quindi riconosciuti come errore. Tra due trame è previsto un intervallo (interframe space) di almeno 3 bit recessivi.
CAN FD e CAN XL
Il CAN FD (Flexible Data-rate, ISO 11898-1:2015) porta il campo dati fino a 64 byte e, terminato l’arbitraggio, può passare a una velocità più alta nella fase dati (tipicamente 2–5 Mbit/s, fino a 8 Mbit/s), mentre l’arbitraggio resta alla velocità nominale. Il più recente CAN XL estende il campo dati fino a 2048 byte e la fase dati fino a circa 20 Mbit/s.







