Controller Area Network

standard seriale per bus di campo
Versione del 12 apr 2006 alle 13:50 di Marius~itwiki (discussione | contributi) (aggiunte, -stub)

Template:Da tradurre

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)
Stato del bus quando due nodi trasmettono
dominante recessivo
dominante dominante dominante
recessivo dominante recessivo
AND logico
0 1
0 0 0
1 0 1

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.

Error Frame

L'Error Frame è composto da due campi:

  • il primo è formato dalla combinazione dei flag di errore attivati da uno dei nodi collegati alla rete;
  • il secondo è il cosiddetto "delimitatore di errore" (Error Delimiter)

Esistono due tipi di Error Flag:

  • Active Error Flag: trasmessi da un nodo che ha rilevato un errore di rete, e che si trova nello stato di "error active";
  • Passive Error Flag: trasmessi da un nodo che ha rilevato la presenza sulla rete di un Active Error Flag, e che si trova nello stato di "error passive".


Collegamenti esterni

Voci correlate