Il bus dati CAN ( Controller Area Network ) è un bus di sistema seriale ampiamente utilizzato in molti settori, in particolare nell'industria automobilistica .
È stato standardizzato con ISO 11898 .
Applica un approccio noto con il nome di multiplexing , e che consiste nel collegare allo stesso cavo (un bus ) un gran numero di computer che quindi comunicheranno a turno. Questa tecnica elimina la necessità di cablare linee dedicate per ogni informazione da trasmettere (connessione punto-punto). Non appena un sistema (auto, aereo, barca, rete telefonica, ecc. ) raggiunge un certo livello di complessità, l'approccio punto-punto diventa impossibile a causa dell'enorme quantità di cablaggio da installare e del suo costo. massa, materiali, manodopera, manutenzione).
L'introduzione dei bus multiplexati (principalmente CAN) nell'automobile mirava a ridurre la quantità di cavi nei veicoli (erano allora fino a 2 km di cavi per vettura), ma soprattutto ha permesso l'esplosione del numero di computer e sensori distribuiti su tutto il veicolo, e i relativi servizi (riduzione dei consumi, controllo dell'inquinamento , sicurezza attiva / passiva , comfort, rilevamento guasti, ecc. ), riducendo le lunghezze dei cavi.
Il bus dati CAN è il risultato della collaborazione tra l' Università di Karlsruhe e Bosch .
È stato utilizzato per la prima volta nel settore automobilistico , ma è attualmente utilizzato nella maggior parte dei settori come l' aeronautica tramite protocolli standard basati su CAN.
È stato introdotto con Intel nel 1985 , ma non è stato standardizzato dall'ISO fino all'inizio degli anni 1991.
Nel 1992, diverse aziende si sono unite per creare CAN in Automation, un'associazione che mira a promuovere la CAN.
È stato rilasciato un primo sviluppo chiamato FD per "Flexibel Data rate".
Una seconda evoluzione portata da Bosch , denominata “XL”, è in fase di sviluppo.
Esistono due standard per il livello fisico:
CAN è un bus dati seriale bidirezionale half-duplex nell'industria automobilistica, ma viene utilizzato unidirezionale - simplex - nell'aeronautica, per ottenere un comportamento deterministico .
Ogni dispositivo connesso, chiamato “nodo”, può comunicare con tutti gli altri.
Per un bus dati CAN "bassa velocità", il numero di nodi è limitato a 20. Per un bus dati CAN "alta velocità", è limitato a 30.
Ogni nodo è connesso al bus tramite un doppino intrecciato (schermato o meno) .
Le due estremità del bus devono essere collegate tramite resistori da 120 ± 10% (tolleranza tra 108 e 132 Ω).
L'accesso al bus dati CAN segue la tecnica CSMA/CR (ascolto di ogni stazione prima di parlare ma non di parlare, risoluzione delle collisioni per priorità).
La lunghezza massima del bus è determinata dalla velocità utilizzata:
Velocità ( kbit/s ) |
Lunghezza ( m ) |
---|---|
1000 | 30 |
800 | 50 |
500 | 100 |
250 | 250 |
125 | 500 |
62,5 | 1000 |
20 | 2.500 |
10 | 5.000 |
La codifica utilizzata è di tipo NRZ (nessun ritorno a 0) :
I nodi sono cablati sul bus secondo il principio del “wired OR” dal punto di vista elettrico (“wired AND” dal punto di vista logico), il che significa che in caso di trasmissione simultanea da due nodi, il valore 0 sovrascrive il valore 1.
Quindi diciamo:
Gli stati logici e i livelli elettrici utilizzati tra le due linee della coppia differenziale per il CAN a bassa velocità sono i seguenti:
stato logico | V CANH-GND | V CANL-GND | V CANH-CAN |
---|---|---|---|
Recessivo o "1" | 1,75 V | 3,25 V | −1,5 V |
Dominante o "0" | 4 V | 1 V | 3 V |
Gli stati logici e i livelli elettrici utilizzati tra le due linee della coppia differenziale per l'ADC ad alta velocità sono i seguenti:
stato logico | V CANH-GND | V CANL-GND | V CANH-CAN |
---|---|---|---|
Recessivo o "1" | 2,5 V | 2,5 V | da 0 a 0,5 V |
Dominante o "0" | 3,5 V | 1,5 V | da 0,9 a 2 V |
La durata di un bit è denominata "Tempo nominale di bit".
Ogni bit è composto da più segmenti sincronizzati dall'orologio interno di ciascun nodo:
Il "Time Quantum" è l'unità di tempo costruita dal periodo dell'oscillatore interno di ciascun nodo.
La frequenza del bus essendo al massimo 1 MHz e quella degli oscillatori diversi MHz, il “Time Quantum” vale generalmente diversi periodi di clock (tra 1 e 32 volte).
La durata di ogni segmento è la seguente:
Segmento | Durata in "Quantità di tempo" |
---|---|
Sincronizzazione | 1 |
Propagazione | da 1 a 8 |
Fase tampone n o 1 | da 1 a 8 |
Fase tampone n o 2 | da 2 a 8 |
Quindi la durata di un bit può variare da 5 a 25 “Time Quantum”.
Maggiore è la frequenza dell'orologio interno del nodo, minore sarà la durata del “Time Quantum”, più gli ultimi tre segmenti conteranno “Time Quantum” e migliore sarà la precisione di sincronizzazione.
Segmento di sincronizzazioneIl segmento di sincronizzazione viene utilizzato per sincronizzare i diversi nodi.
La transizione da 0 a 1 o da 1 a 0, effettuata per il nodo mittente, deve avvenire in questo segmento. Se per un nodo ricevente questa transizione non avviene in questo stesso segmento è perché è desincronizzato. Questo è un errore di fase.
Grazie al bit di trasparenza, questo controllo può essere effettuato almeno ogni 5 bit (per i primi campi del frame in cui viene utilizzato).
Segmento di propagazioneIl segmento di propagazione viene utilizzato per compensare i fenomeni di propagazione sul bus.
Segmenti di faseI segmenti di fase vengono utilizzati per compensare gli errori di fase rilevati durante le transizioni.
La durata di questi segmenti può variare in caso di risincronizzazione.
Punto di campionamentoIl punto di campionamento o “Sample point” è l'istante in cui il valore del bit viene letto sul bus. Ciò si verifica tra i due segmenti di fase.
SincronizzazioneEsistono due tipi di sincronizzazione:
Il pinout sul bus dati CAN è standardizzato e utilizza un connettore DE-9 :
Spilla | Descrizione |
---|---|
1 | (Riserva) |
2 | POSSO |
3 | Massa |
4 | (Riserva) |
5 | Schermatura (opzionale) |
6 | Massa |
7 | CANH |
8 | (Riserva) |
9 | Alimentazione esterna (opzionale) |
Esistono anche due standard per il livello di collegamento dati:
Esistono diversi tipi di telaio:
Tra due frame, i trasmettitori devono osservare una pausa (periodo interframe) equivalente alla durata di tre bit durante i quali il bus viene mantenuto nello stato recessivo.
Il frame di dati viene utilizzato per inviare informazioni ad altri nodi.
Un frame di dati è costituito da sette diversi campi:
I campi vengono trasmessi in ordine da SOF a EOF.
In ogni campo del frame, i bit vengono trasmessi dal più forte al più debole.
Campo arbitraleIl campo di arbitrato è composto da 11 bit identificativi per CAN 2.0A e 29 bit per CAN 2.0B seguiti dal bit RTR (Remote Transmission Request) che è dominante. Questo campo serve come identificatore per i dati trasportati nel campo dati.
Gli 11 bit di CAN 2.0A consentono 2 11 = 2048 combinazioni.
I 29 bit di CAN 2.0B consentono 2 29 = 536 870 912 combinazioni.
Campo di comandoIl campo di controllo è composto da sei bit.
Il bit più significativo viene utilizzato per differenziare il tipo di frame:
Il bit successivo non viene utilizzato.
I quattro bit meno significativi denominati DLC (Data Length Code) rappresentano il numero di byte del campo dati a bordo (PAYLOAD).
Questo numero di byte può variare da 0 a 8, ovvero nove valori memorizzati con i quattro bit del campo DLC. Non verrebbero quindi utilizzati valori DLC superiori a 9 (da 9 a 15).
Campo datiIl campo dati può variare da 0 a 8 byte.
Nel caso di un frame di richiesta, il campo dati è vuoto.
campo CRCIl campo è composto da quindici bit di CRC (Cyclic Redundancy Check) e da un cosiddetto bit delimitatore (“delimitatore CRC”) che è sempre recessivo.
Il CRC è calcolato da tutti i campi trasmessi fino ad ora (cioè SOF, campo di arbitrato, campo di controllo e campo dati; i bit di trasparenza non vengono presi in considerazione). L'insieme costituisce il polinomio f ( x ).
L'algoritmo consiste innanzitutto nel moltiplicare f ( x ) per 2 15 .
Allora il polinomio f ( x ) è diviso (modulo 2) per il polinomio g ( x ) = x 15 + x 14 + x 10 + x 8 + x 7 + x 4 + x 3 + x 0 .
Una volta effettuate le divisioni successive, il resto costituisce la sequenza CRC.
La distanza di Hamming dell'algoritmo utilizzato è 6, il che significa che è possibile rilevare un massimo di cinque errori.
Grazie a questo sistema di rilevamento, il tasso di errore registrato è molto basso (inferiore a 4,6 × 10 −11 ). Inoltre, la rete è in grado di differenziare gli errori puntuali dagli errori ridondanti. Pertanto, qualsiasi dispositivo difettoso può essere disconnesso dalla rete per limitare i disturbi. La rete entra quindi in modalità "degradata".
Campo di riconoscimento ACKIl campo è composto da un bit di riconoscimento ACK (ACKnowledge) e da un cosiddetto bit delimitatore ("ACKnowledge delimiter") che è sempre recessivo.
Tutti i ricevitori che hanno ricevuto il messaggio con successo devono riconoscerlo trasmettendo un bit dominante per la durata del bit ACK, che consente al nodo mittente di sapere che almeno uno dei nodi riceventi ha ricevuto il messaggio.
Se un nodo ricevente non ha ricevuto o ricevuto in modo errato il messaggio, non può utilizzare questo meccanismo per segnalare l'errore, poiché una stazione ricevente deve inviare solo un bit dominante per mascherare tutti i bit recessivi. Per segnalare il malfunzionamento deve inviare un frame di errore.
Il frame di richiesta viene utilizzato per richiedere dati da un altro nodo. È simile al frame di dati tranne:
Si noti che il fatto che il bit RTR sia recessivo nel caso di un frame di richiesta significa che se un frame di dati viene inviato contemporaneamente allo stesso campo di arbitraggio, è il frame di dati ad avere la priorità.
Al fine di garantire la trasmissione dei messaggi, viene utilizzato il metodo " bit-stuffing ".
Consiste, nel caso in cui siano stati inviati cinque bit della stessa polarità in fila, aggiungendo un bit di polarità opposta alla sequenza, in modo da spezzare catene eccessivamente grandi di bit identici. Questo metodo si applica solo ai campi SOF, arbitration, command, data e CRC (delimitatore escluso).
Ad esempio, "1111 1110" diventerà "1111 1011 0".
Cosa succede se più nodi tentano di trasmettere contemporaneamente?
Esiste una procedura di accesso al bus alla quale ogni nodo deve sottoporre:
Si ottiene così una priorità grazie al campo dell'arbitrato.
Più è piccolo, più contiene bit di ordine alto 0 (dominante), più avrà la priorità.
Questa fase di prioritizzazione o arbitraggio termina al bit RTR.
Non appena viene rilevato un errore, il nodo non attende la fine del frame incriminato, invia immediatamente un frame di errore per segnalare un problema nella trasmissione.
Un frame di errore è costituito da due campi diversi:
Il frame di errore può essere:
Numerosi errori sono rilevabili dai nodi.
Errore di bitOgni volta che un nodo emette un bit sul bus, rilegge il bus e deve trovare il bit che ha scritto. Se inviando un bit recessivo, rilegge un bit dominante, è stato alterato.
Questo meccanismo è identico a quello che consente la prioritizzazione, motivo per cui non dovrebbe essere preso in considerazione nel campo dell'arbitrato.
Idem per il campo di riconoscimento, se il bit recessivo inviato dal nodo mittente diventa dominante, è semplicemente che uno o più nodi riceventi hanno confermato la corretta ricezione del frame, quindi non è un errore.
Errore di robaSe sul bus vengono letti sei bit consecutivi della stessa polarità, il meccanismo del bit di trasparenza non è stato rispettato o un bit è stato alterato.
Errore CRCSe il valore CRC calcolato dal nodo ricevente è diverso dal CRC codificato nel frame dal nodo mittente, il frame è stato danneggiato.
delimitatore CRCRCSe il bit “delimitatore CRC” letto dai nodi riceventi non è recessivo, il bit è stato alterato.
Riconosci l'erroreSe il bit ACK recessivo inviato dal nodo mittente non è stato sovrascritto da un bit dominante, allora nessun nodo ricevente lo ha ricevuto.
RICONOSCEre delimitareSe il bit "ACKnowledge delimiter" letto dai nodi riceventi non è recessivo, il bit è stato alterato.
Recupero erroriPer costruzione, il frame di errore infrange la regola del bit-stuffing poiché, qualunque cosa accada, i sei bit del flag di errore sono identici.
Quando un nodo invia un frame di errore, tutti gli altri nodi rilevano un errore di tipo "Stuff error" e iniziano anche a inviare un frame di errore.
In caso di frame di errore attivi, il numero di bit dominanti in una riga non deve superare i dodici bit. Oltre a ciò, i nodi che non hanno inviato il loro frame di errore non devono farlo.
L'ultimo nodo da inviare fornisce il delimitatore (otto bit recessivi) e termina la cacofonia.
Il nodo che ha inviato il frame incriminato quindi ritira la sua possibilità.
E così via, finché il frame non passa o uno dei suoi contatori di errori fa sì che il nodo cambi modalità di errore.
Contatori di erroriOgni nodo ha due contatori di errori:
Il contatore degli errori di trasmissione di un nodo in modalità trasmettitore è:
Il contatore degli errori di ricezione di un nodo in modalità ricevitore è:
A seconda dei contatori di errori, il nodo cambia modalità di errore. Ce ne sono tre:
Il telaio di sovraccarico può essere utilizzato in due casi:
Un frame di sovraccarico è costituito da due diversi campi:
Il frame di sovraccarico è simile a un frame di errore attivo.
Quando un nodo trasmette un frame di sovraccarico per richiedere un ritardo (condizione n o 1), sovrascrive i tre bit recessivi del periodo interframe, i nodi rimanenti rilevano il sovraccarico ed emettono essi stessi un sovraccarico di frame (condizione n o 2).
Come con i frame di errore attivi, il numero di bit dominanti in una riga non deve superare i dodici bit. Oltre a ciò, i nodi che non hanno inviato il loro frame di sovraccarico non devono farlo.
L'ultimo nodo da inviare fornisce il delimitatore (otto bit recessivi) e termina la cacofonia.
Nello standard CAN sono stati definiti diversi livelli applicativi: