Controller Area Network: differenze tra le versioni
Contenuto cancellato Contenuto aggiunto
aggiunte |
Funzionalità collegamenti suggeriti: 3 collegamenti inseriti. |
||
(137 versioni intermedie di 88 utenti non mostrate) | |||
Riga 1:
Il '''Controller Area Network''', noto anche come '''CAN-bus''', è uno standard [[Porta seriale|seriale]] per [[Bus (informatica)|bus]] di campo (principalmente in ambiente automotive), di tipo [[multicast]], introdotto negli [[anni 1980|anni ottanta]] dalla [[Robert Bosch GmbH]], per collegare diverse [[Unità di controllo elettronico (elettromeccanica)|unità di controllo elettronico]] (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 disturbi EMC può essere ulteriormente aumentata utilizzando cavi a [[doppino ritorto|doppino intrecciato]].
Sebbene inizialmente applicata in ambito [[automotive]], come bus per autoveicoli, attualmente è usata in molte applicazioni industriali di tipo [[Sistema embedded|embedded]], dove è richiesto un alto livello di immunità ai disturbi. Il [[bit rate]] può raggiungere {{M|1|u=Mbit/s}} per reti lunghe meno di {{M|40|u=m}}. Velocità inferiori consentono di raggiungere distanze maggiori (ad es. {{M|125|u=kbit/s}} per {{M|500|u=m}}). Il protocollo di comunicazione del CAN è standardizzato come ISO 11898-1 (2015). 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 (informatica)|bit]] "dominanti" e "recessivi", in cui i bit dominanti sono gli '''0''' ''logici'' e i bit recessivi sono gli '''1''' ''logici''. Se un nodo trasmette un bit dominante e un altro un bit recessivo, allora il bit "dominante" "vince" fra i due (realizzando una combinazione [[Algebra di Boole|AND logico]]).
{| style="margin-left:auto; margin-right:auto;"
|+ '''[[Tabella della verità]] dei bit dominanti/recessivi (AND logico):'''
|-
|
{| class="wikitable" style="margin-left:auto; margin-right:auto;"
|+ Stato del bus quando due nodi trasmettono
|-
|-
! dominante
| dominante || dominante
|-
! recessivo
| dominante || recessivo
|}
|
{| class="wikitable" style="margin-left:auto; margin-right:auto;"
|+ AND logico
|-
|-
| 0 || 0 |-
| 0 || 1 |}
|}
Line 35 ⟶ 37:
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
==
Tutti i frame (detti anche "messaggi") incominciano 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).
Il CAN ''base'' permette 2<sup>11</sup> = {{formatnum:2048}} tipi di messaggi diversi, ma da specifiche Bosch se ne possono usare solo {{formatnum:2031}}. Nella versione ''extended'' si possono avere fino a 2<sup>29</sup> = {{formatnum:536870912}} tipi di messaggi.
==== Formato del Base frame ====
Il formato del Base frame ha la seguente struttura:
{| class="wikitable"
|- bgcolor="#CCCCCC"
!
|-
| Start-of-frame
|-
|
|-
|
|-
|
|-
|
|-
|
|-
|
|-
| CRC
|-
| delimitatore CRC
|-
| Slot ACK || 1 || Il trasmettitore invia un bit recessivo e ogni ricevitore può confermare la ricezione con un bit dominante
|-
| Delimitatore ACK
|-
| End-of-frame (EOF) || 7 ||
|}
Un vincolo imposto al campo dell'identificatore è che i primi 7 bit non possono essere tutti recessivi.
==== Formato dell'Extended frame ====
Il formato dell'Extended Frame ha la seguente struttura:
{| class="wikitable"
|- bgcolor="#CCCCCC"
!
|-
| Start-of-frame
|-
|
|-
|
|-
|
|-
|
|-
|
|-
|
|-
|
|-
|
|-
| CRC
|-
| Delimitatore CRC
|-
| Slot ACK || 1 || Il trasmettitore invia un bit recessivo e ogni ricevitore può confermare la ricezione con un bit dominante
|-
| Delimitatore ACK
|-
| End-of-frame (EOF) || 7 ||
|}
I due identificatori (A e B) combinati, formano un unico identificatore di 29 bit.
=== Remote
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 Byte (relativi al payload del pacchetto) richiesti al 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".
=== Overload frame ===
Overload frame contiene due campi: Overload Flag e Overload Delimiter. Esistono due condizioni di overload che possono determinare la trasmissione di un overload flag:
:1. Stato del ricevitore, che richiede un ritardo di trasmissione dal successivo data frame o remote frame,
:2. Viene rilevato un bit dominante durante un intervallo nella trasmissione.
Un overload frame dovuto al caso 1 è consentito solo per essere avviato al momento del primo bit di un intervallo previsto, mentre un overload frame dovuto al caso 2 incomincia un bit dopo aver rilevato il bit dominante. L'Overload Flag è costituito da sei bit dominanti (tutti pari a 0). La forma complessiva è come quella di un active error flag, che azzera i campi intervalli. Conseguentemente, anche gli altri nodi della rete rilevano una condizione di overload e trasmettono un overload flag. L'overload Delimiter è costituito da [[8 bit]] recessivi (tutti pari a 1) e ha la stessa forma di un "delimitatore di errore" (''Error Delimiter'').
== Bit stuffing ==
Consiste nell'inserire un bit di valore opposto dopo cinque bit consecutivi dello stesso valore. Questa pratica è chiamata ''bit stuffing'' (letteralmente ''riempimento di bit''), ed è necessaria a causa della codifica utilizzata nel frame, di tipo [[Codifica di linea|NRZ]] (''Non Return to Zero''), che in caso di valori consecutivi uguali mantiene lo stesso valore di tensione e non genera transizioni utili a risincronizzare i dispositivi comunicanti. I frame sottoposti a questa operazione vengono poi "decodificati" dal ricevitore, che rimuove i bit precedentemente inseriti. Di conseguenza, quando vengono ricevuti sei bit uguali consecutivi dello stesso valore (111111 oppure 000000), essi vengono considerati un errore. Il ''bit stuffing'' implica che i frame dati trasmessi possono essere più grandi di quelli che ci si potrebbe aspettare dall'applicazione delle tabelle soprariportate.
== Standard ISO applicabili ==
* '''ISO
* '''
* '''ISO 11992-1:2003''': CAN fault-tolerant per autoveicoli
* '''ISO 11898-5:2007:''' CAN alta velocità/selective wake-up
* '''SAE J2411''': CAN single-wire CAN (SWC)
Lo standard '''ISO 11898-2'''
Lo standard '''ISO 11898-4''' definisce il tipo di comunicazione del CAN detto ''time-triggered'' (TTCAN), basato su un protocollo di layer fornito di un orologio di sistema per schedulare l'inoltro dei messaggi.
== Layer applicativi ==
Poiché lo standard CAN non prevede di per sé protocolli di livello applicativo, come ad esempio il [[controllo di flusso]], l'indirizzamento dei dispositivi collegati al bus e la trasmissione di blocchi dati più grandi di un singolo messaggio hanno richiesto l'implementazione di appositi protocolli di livello applicativo. Fra questi si annoverano '''DeviceNet''', '''[[CANopen]]''', '''[[CANaerospace]]''', '''SDS''' e '''CAN Kingdom'''.
==
* [[Bus (informatica)]]
== Altri progetti ==
{{interprogetto}}
== Collegamenti esterni ==
* {{cita web|http://www.can.bosch.com/|Controller Area Network homepage della Bosch|lingua=en}}
* {{cita web|http://www.kvaser.com/about-can/the-can-protocol/|Tutorial del CAN|lingua=en}}
* {{cita web|http://www.odva.org/|Sito ufficiale DeviceNet|lingua=en}}
* {{cita web|http://www.can-wiki.info/|CAN-Wiki|lingua=en}}
* {{cita web|http://www.can-cia.org/|CAN nell'automazione (CiA) Gruppo internazionale utilizzatori e costruttori|lingua=en}}
* {{cita web|1=http://www.launch-techs.com/Support/Info/can-bus.htm|2=CAN DATA BUS della Mercedes Benz|lingua=en|accesso=5 febbraio 2006|urlarchivio=https://web.archive.org/web/20060301143401/http://www.launch-techs.com/Support/Info/can-bus.htm|dataarchivio=1 marzo 2006|urlmorto=sì}}
* {{cita web|1=http://www.yamar.com/DCAN250.html|2=CAN-BUS per controllo veicoli|lingua=en|accesso=5 febbraio 2006|urlarchivio=https://web.archive.org/web/20060311085648/http://www.yamar.com/DCAN250.html|dataarchivio=11 marzo 2006|urlmorto=sì}}
* {{cita web|1=http://www.interfacebus.com/Design_Connector_CAN.html|2=Descrizione dell'interfaccia CAN Bus, Pin Out e nomi dei segnali|lingua=en|accesso=5 febbraio 2006|urlarchivio=https://web.archive.org/web/20060205025135/http://www.interfacebus.com/Design_Connector_CAN.html|dataarchivio=5 febbraio 2006|urlmorto=sì}}
*{{cita web|https://training.dewesoft.com/online/course/automotive-buses-can-measurement|CAN Bus and CAN FD Data Acquisition and Analysis|lingua=en}}
{{Bus computer}}
{{Controllo di autorità}}
{{Portale|informatica}}
[[Categoria:Bus seriali]]
|