Controller Area Network
Il Controller Area Network, noto anche come CAN-bus, è uno standard seriale per bus di computer, di tipo multicast, introdotto negli anni 80 dalla Robert Bosch GmbH, per collegare unità elettroniche di controllo (ECU). Il CAN è stato espressamente progettato per funzionare senza problemi anche in ambienti fortemente disturbati dalla presenza di onde elettromagnetiche e può utilizzare come mezzo trasmissivo una linea a differenza di potenziale bilanciata come la RS-485. L'immunità ai distubi EMC può essere ulteriormente aumentata utilizzando cavi di tipo twisted pair (doppino intrecciato).
Sebbene inizialmente applicata in ambito automotive, come bus per autoveicoli, attualmente è usata in molte applicazioni industriali di tipo embedded, dove è richiesto un alto livello di immunità ai disurbi. Il bit rate può raggiungere 1 Mbit/s per reti lunghe meno di 40 m. Velocità inferiori consentono di raggiungere distanze maggiori (ad es. 125 kbit/s per 500 m). Il protocollo di comunicazione del CAN è standardizzato come ISO 11898-1 (2003). Questo standard descrive principalmente lo strato (layer) di scambio dati (data link layer), composto dallo strato sottostante (sublayer) "logico" (Logical Link Control, LLC) e dallo strato sottostante del Media Access Control, (MAC) e da alcuni aspetti dello strato "fisico" (physical layer) descritto dal modello ISO/OSI (ISO/OSI Reference Model). I protocolli di tutti gli altri layer sono lasciati alla libera scelta del progettista della rete.
Trasmissione dati
Il CAN trasmette dati secondo un modello basato su bit "dominanti" e "recessivi", in cui i bit dominanti sono gli 0 logici ed i bit recessivi sono gli 1 logici. Se un nodo trasmette un bit dominante ed un altro un bit recessivo, allora il bit dominante "vince" fra i due (realizzando una combinazione AND logico).
Tabella della verità dei bit dominanti/recessivi (AND logico) | |||||||||||||||||||
|
|
Con questa tecnica, quando viene trasmesso un bit recessivo, e contemporaneamente un altro dispositivo trasmette un bit dominante, si ha una collisione, e solo il bit dominante è visibile in rete (tutte le altre collisioni sono invisibili). In pratica avviene che un bit dominante è "asserito" dalla generazione di una tensione fra i conduttori, mentre un bit recessivo è semplicemente ignorato. Si è così sicuri che ogni volta che si impone una differenza di potenziale, tutta la rete la rileva, e quindi "sa" che si tratta di un bit dominante.
Solitamente, quando usata in un bus differenziale, si applica lo schema CSMA/BA (Carrier Sense Multiple Access/Bitwise Arbitration): se due o più dispositivi iniziano a trasmettere contemporaneamente, si applica un meccanismo di arbitrato basato sulla priorità per decidere a quale dispositivo permettere di proseguire la trasmissione. Durante la trasmissione, ogni nodo in trasmissione controlla lo stato del bus e confronta il bit ricevuto con il bit trsmesso. Se un bit dominante è ricevuto mentre un bit recessivo è trasmesso il nodo interrompe la trasmissione (ossia perde l'arbitrato). L'arbitrato è eseguito durante la trasmissione del pacchetto dei dati di identificazione del nodo. I nodi che iniziano contemporaneamente a trasmettere inviano un ID dominante a 0 binario, che inizia con il bit alto. Non appena il loro ID è rappresentato da un numero più grande (quindi a priorità minore) i nodi stessi inviano un bit 1 (recessivo) ed aspettano la risposta di uno 0 (dominante), quindi interrompono la trasmissione. Al termine dell'invio degli ID, tutti i nodi sono tornati allo stato di OFF, ed il messaggio con la priorità corrente massima può liberamente transitare.
Frames
Tutti i frames (detti anche "messaggi") iniziano con un bit di "start-of-frame" (SOF). I frame del CAN possono essere di quattro tipi:
- Data frame: frame contenente i dati che il nodo trasmette.
- Remote frame: frame che richiede la trasmissione di un determinato identificatore.
- Error frame: frame trasmesso da un qualsiasi nodo che ha rilevato un errore.
- Overload frame: frame che introduce un ritardo fra data frame e/o remote frame.
Data frame
Sono i frame che eseguono l'effettiva trasmissione dei dati. I messaggi possono avere due formati:
- Base frame format: con 11 bit di identificazione.
- Extended frame format: con 29 bit di identificazione.
Lo standard CAN deve obbligatoriamente riconoscere il formato base frame e può opzionalmente riconoscere il formato extended frame format (che, tuttavia, deve essere tollerato).
Formato del Base frame
Il formato del base frame ha la seguente struttura:
Nome del campo | Lunghezza (numero di bit) | Funzione |
---|---|---|
Start-of-frame | 1 | Indica l'avvio della sequenza di trasmissione |
Identificatore | 11 | Identificatore (unico) dei dati |
Richiesta remota di transmissione (RTR) | 1 | Deve essere un bit dominante |
Bit aggiuntivo di identificazione (IDE) | 1 | Deve essere un bit dominante |
Bit riservato (r0) | 1 | Riservato |
Codice di lunghezza dati (DLC) | 4 | Numero di byte per codificare ciascun dato (0-8 byte) |
Campo dati | 0-8 byte | Dati da trasmettere (la lunghezza è specificata dal campo DLC) |
CRC | 15 | Controllo di parità a ridondanza |
delimitatore CRC | 1 | Deve essere un bit recessivo |
Slot ACK | 1 | Il transmittitore invia un bit recessivo e ogni ricevitore può confermare la ricezione con un bit dominante |
Delimitatore ACK | 1 | Deve essere un bit recessivo |
End-of-frame (EOF) | 7 | Deve essere un bit recessivo |
Un vincolo imposto al campo dell'identicatore è che i primi 7 bit non possono essere tutti recessivi.
Formato dell'Extended frame
Il formato dell'Extended Frame ha la seguente struttura:
Nome del campo | Lunghezza (numero di bit) | Funzione |
---|---|---|
Start-of-frame | 1 | Indica l'avvio della sequenza di trasmissione |
Identificatore A | 11 | Prima parte dell'identificatore (unico) dei dati |
Richiesta remota sostitutiva (SRR) | 1 | Deve essere un bit recessivo |
Bit aggiuntivo di identificazione (IDE) | 1 | Deve essere un bit recessivo |
Identificatore B | 18 | Seconda parte dell'identificatore (unico) dei dati |
Richiesta remota di trasmissione (RTR) | 1 | Deve essere un bit dominante |
Bit riservati (r1 & r0) | 2 | Riservati |
Codice di lunghezza dati (DLC) | 4 | Numero di byte del dato (0-8 byte) |
Campo dati | 0-8 byte | Dati da trasmettere (lunghezza specificata dal campo DLC) |
CRC | 15 | Controllo di parità a ridondanza |
Delimitatore CRC | 1 | Deve essere un bit recessivo |
Slot ACK | 1 | Il transmittitore invia un bit recessivo e ogni ricevitore può confermare la ricezione con un bit dominante |
Delimitatore ACK | 1 | Deve essere un bit recessivo |
End-of-frame (EOF) | 7 | Deve essere un bit recessivo |
I due identificatori (A e B) combinati, formano un unico identificatore di 29 bit.
Remote Frame
Il Remote Frame è identico al Data Frame, eccetto che:
- il bit RTR posto allo stato di bit recessivo,
- il campo lunghezza dati contiene il numero di frame richiesti dal data frame.
Collegamenti esterni
- (EN) Controller Area Network homepage della Bosch
- (EN) Tutorial del CAN
- (EN) Sito ufficiale DeviceNet
- (EN) Panoramica sul CANopen
- (EN) CAN-Wiki
- (EN) CAN nell'automazione (CiA) Gruppo internazionale utilizzatori e costruttori
- (EN) CAN DATA BUS della Mercedes Benz
- (EN) CAN-BUS per controllo veicoli
- (EN) Descrizione dell'interfaccia CAN Bus, Pin Out e nomi dei segnali