Controller Area Network: differenze tra le versioni

Contenuto cancellato Contenuto aggiunto
Marius~itwiki (discussione | contributi)
aggiunte
Funzionalità collegamenti suggeriti: 3 collegamenti inseriti.
 
(146 versioni intermedie di 90 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]].
{{stub}}
{{da tradurre|inglese}}
 
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.
Il '''Controller Area Network''', noto anche come '''CAN-bus''', è uno standard [[Porta seriale|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'').
 
== Trasmissione dati ==
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.
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;"
==Trasmissione dati==
|+ '''[[Tabella della verità]] dei bit dominanti/recessivi (AND logico):'''
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]]).
 
{| align="center" cellpadding="20" border="0"
|-
|colspan="2"| '''[[Tabella della verità]]s dei bit dominanti/recessivi (AND logico)'''
|-
|
| ''<center>Stato del bus quando due nodi trasmettono</center>''
{| class="wikitable" style="margin-left:auto; margin-right:auto;"
{| align="center" border="1" cellpadding="10"
|+ Stato del bus quando due nodi trasmettono
|-
|! !! || '''dominante''' ||!! '''recessivo'''
|-
! dominante
| ''dominante'' || '''''dominante''''' || ''dominante''
| dominante || dominante
|-
! recessivo
| ''recessivo'' || '''dominante''' || '''''recessivo'''''
| dominante || recessivo
|}
|
|| ''<center>AND logico</center>''
{| class="wikitable" style="margin-left:auto; margin-right:auto;"
{| align="center" border="1" cellpadding="10"
|+ 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 incominciano 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 trasmesso. 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 incominciano contemporaneamente a trasmettere inviano un ID dominante a 0 binario, che incomincia 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) e 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, e il messaggio con la priorità corrente massima può liberamente transitare.
So, if you are transmitting a recessive bit, and someone sends a dominant bit, you see a dominant bit, and you know there was a collision. (All other collisions are invisible.) The way this works is that a dominant bit is asserted by creating a voltage across the wires while a recessive bit is simply not asserted on the bus. If anyone sets a voltage difference, everyone sees it, hence, dominant.
 
== I frame ==
Commonly when used with a differential bus, a [[Carrier sense multiple access with bitwise arbitration|Carrier Sense Multiple Access/Bitwise Arbitration]] (CSMA/BA) scheme is implemented: if two or more devices start transmitting at the same time, there is a priority based arbitration scheme to decide which one will be granted permission to continue transmitting.
 
Tutti i frame (detti anche "messaggi") incominciano con un bit di "start-of-frame" (SOF).
During arbitration, each transmitting node monitors the bus state and compares the received bit with the transmitted bit.
I frame del CAN possono essere di quattro tipi:
If a dominant bit is received when a recessive bit is transmitted then the node stops transmitting (i.e., it lost arbitration).
* '''Data frame''': frame contenente i dati che il nodo trasmette.
Arbitration is performed during the transmition of the identifier field. Each node starting to transmit at the same time sends an ID with dominant as binary 0, starting from the high bit. As soon as their ID is a larger number (lower priority) they'll be sending 1 (recessive) and see 0 (dominant), so they back off. At the end of ID transmission, all nodes bar one have backed off, and the highest priority message gets through unimpeded.
* '''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.
 
=== FramesData frame ===
All frames (aka messages) begin with a start-of-frame (SOF) bit that, obviously, denotes the start of the frame transmission.
 
Sono i frame che eseguono l'effettiva trasmissione dei dati. I messaggi possono avere due formati:
CAN has four frame types:
* ''Base frame format'': con 11 bit di identificazione.
* Data frame: a frame containing node data for transmission
* ''Extended frame format'': con 29 bit di identificazione.
* Remote frame: a frame requesting the transmission of a specific identifier
* Error frame: a frame transmitted by any node detecting an error
* Overload frame: a frame to inject a delay between data and/or remote frames
 
Lo standard CAN ''deve'' obbligatoriamente riconoscere il formato ''base frame'' e ''può'' opzionalmente riconoscere il formato ''extended frame format'' (che, tuttavia, deve essere tollerato).
=== Data frame ===
 
The data frame is the only frame for actual data transmission. There are two message formats:
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.
* Base frame format: with 11 identifier bits
 
* Extended frame format: with 29 identifier bits
==== Formato del Base frame ====
 
Il formato del Base frame ha la seguente struttura:
The CAN standard requires the implementation ''must'' accept the base frame format and ''may'' accept the extended frame format. But ''must'' tolerate the extended frame format.
 
==== Base frame format ====
The frame format is as follows:
{| class="wikitable"
|- bgcolor="#CCCCCC"
! FieldNome namedel campo !! LengthLunghezza (bitsnumero di bit) !! PurposeFunzione
|-
| Start-of-frame || 1 || DenotesIndica thel'avvio startdella ofsequenza framedi transmissiontrasmissione
|-
| Identifier Identificatore || 11 || AIdentificatore (uniqueunico) identifier for thedei datadati
|-
| RemoteRichiesta transmissionremota requestdi trasmissione (RTR) || 1 || MustDeve essere un bebit dominantdominante
|-
| IdentifierBit extensionaggiuntivo bitdi identificazione (IDE) || 1 || MustDeve beessere un bit dominantdominante
|-
| ReservedBit bitriservato (r0) || 1 || ReservedRiservato
|-
| DataCodice lengthdi codelunghezza dati (DLC) || 4 || NumberNumero di byte ofper bytescodificare ofciascun datadato (0-8 bytesbyte)
|-
| Data field Campo dati || 0-8 bytesbyte || DataDati toda be transmittedtrasmettere (lengthla dictatedlunghezza byè DLCspecificata dal campo fieldDLC)
|-
| CRC || 15 || [[CyclicControllo di parità redundancya checkridondanza]]
|-
| delimitatore CRC delimiter || 1 || MustDeve essere un bebit recessiverecessivo
|-
| Slot ACK || 1 || Il trasmettitore invia un bit recessivo e ogni ricevitore può confermare la ricezione con un bit dominante
| ACK slot || 1 || Transmitter sends recessive and any receiver can assert a dominant
|-
| Delimitatore ACK delimiter || 1 || MustDeve essere un bebit recessiverecessivo
|-
| End-of-frame (EOF) || 7 || MustDevono beessere recessivebit recessivi
|}
 
Un vincolo imposto al campo dell'identificatore è che i primi 7 bit non possono essere tutti recessivi.
One restriction placed on the identifier is that the first 7 bits cannot be all recessive bits.
 
==== Formato dell'Extended frame ====
 
Il formato dell'Extended Frame ha la seguente struttura:
 
==== Extended frame format ====
The frame format is as follows:
{| class="wikitable"
|- bgcolor="#CCCCCC"
! FieldNome namedel campo !! LengthLunghezza (bitsnumero di bit) !! PurposeFunzione
|-
| Start-of-frame || 1 || DenotesIndica thel'avvio startdella ofsequenza framedi transmissiontrasmissione
|-
| IdentifierIdentificatore A || 11 || FirstPrima partparte of thedell'identificatore (uniqueunico) identifier for thedei datadati
|-
| SubstituteRichiesta remoteremota requestsostitutiva (SRR) || 1 || MustDeve beessere recessiveun bit recessivo
|-
| IdentifierBit extensionaggiuntivo bitdi identificazione (IDE) || 1 || MustDeve beessere un bit recessiverecessivo
|-
| IdentifierIdentificatore B || 18 || SecondSeconda partparte of thedell'identificatore (uniqueunico) identifier for thedei datadati
|-
| RemoteRichiesta transmissionremota requestdi trasmissione (RTR) || 1 || MustDeve essere un bebit dominantdominante
|-
| ReservedBit bitsriservati (r1 & r0) || 2 || ReservedRiservati
|-
| DataCodice lengthdi codelunghezza dati (DLC) || 4 || NumberNumero ofdi bytesbyte ofdel datadato (0-8 bytesbyte)
|-
| Data field Campo dati || 0-8 bytesbyte || DataDati toda be transmittedtrasmettere (lengthlunghezza dictatedspecificata bydal DLCcampo fieldDLC)
|-
| CRC || 15 || [[CyclicControllo di parità redundancya checkridondanza]]
|-
| Delimitatore CRC delimiter || 1 || MustDeve essere un bebit recessiverecessivo
|-
| Slot ACK || 1 || Il trasmettitore invia un bit recessivo e ogni ricevitore può confermare la ricezione con un bit dominante
| ACK slot || 1 || Transmitter sends recessive and any receiver can assert a dominant
|-
| Delimitatore ACK delimiter || 1 || MustDeve essere un bebit recessiverecessivo
|-
| End-of-frame (EOF) || 7 || MustDevono beessere recessivebit recessivi
|}
 
I due identificatori (A e B) combinati, formano un unico identificatore di 29 bit.
The two identifier fields (A & B) combined form a 29-bit identifier.
 
=== Remote frameFrame ===
The remote frame is identical to the data frame except:
* the RTR bit set to recessive
* data length contains the number of bytes that are required from the data frame
 
Il Remote Frame è identico al Data Frame, eccetto che:
=== Error frame ===
* 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 ===
;Error frame consists of two different fields:
 
L'Error Frame è composto da due campi:
The first field is given by the superposition of ERROR FLAGS contributed from different stations.
The following second field is the ERROR DELIMITER.
 
* il primo è formato dalla combinazione dei [[flag]] di errore attivati da uno dei nodi collegati alla rete;
;There are two types of error flags:
* il secondo è il cosiddetto "delimitatore di errore" (''Error Delimiter'')
 
Esistono due tipi di Error Flag:
; Active Error Flag : Transmitted by a node detecting an error on the network that is in error state "error active".
 
; Passive Error Flag : Transmitted by a node detecting an active error frame on the network that is in error state "error passive".
* ''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 ==
In CAN frames a bit of opposite polarity is inserted after five consecutive bits of the same polarity. This practice is called [[bit stuffing]], and is due to the "[[NRZ|Non Return to Zero]]" (NRZ) coding adopted. The "stuffed" data frames are destuffed by the receiver.
Since bit stuffing is used, six consecutive bits of the same type (111111 or 000000) are considered an error.
Bit stuffing implies that sent data frames could be larger than one would expect by simply enumerating the bits shown in the tables above.
 
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.
== ISO standards ==
 
There are several CAN [[physical layer]] standards:
== Standard ISO applicabili ==
* '''ISO 11898-2''': CAN high-speed
 
* '''ISO 11898-3''': CAN fault-tolerant (low-speed)
* '''ISO 1199211898-12:2003''': CAN fault-tolerant forad truck/traileralta communicationvelocità
* '''SAEISO J241111898-3:2006''': Single-wire CAN [[fault-tolerant]] (SWCa bassa velocità)
* '''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''' usesutilizza aper two-wirei segnali una [[balancedlinea line|balancedbilanciata]] signalinga due schemefili. ItÈ isil thelayer mostfisico usedpiù physical layerusato in car powertrainapplicazioni applicationsper andautotrazione industriale controlcontrolli networksindustriali.
 
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.
The ISO 11898-4 standard defines the time-triggered communication on CAN (TTCAN). It is based on the CAN data link layer protocol providing a system clock for the scheduling of messages.
 
== Layer applicativi ==
== Application layer implementations ==
As the CAN standard does not include tasks of application layer protocols, such as [[flow control]], device addressing, and transportation of data blocks larger than one message, many implementations of higher layer protocols were created. Among these are '''DeviceNet''', '''CANopen''', '''SDS''', '''[[J1939]]''' and '''CAN Kingdom'''.
 
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'''.
== User oriented devices for CAN ==
* [[CANcaseXL log]] logging device
 
== ExternalVoci linkscorrelate ==
* [[Bus (informatica)]]
* [http://www.can.bosch.com/ Bosch's Controller Area Network homepage]
* [http://www.kvaser.com/can/protocol/index.htm Well organized CAN educational page]
* [http://www.odva.org/ DeviceNet Official Website]
* [http://www.can-cia.org/canopen/ CANopen overview]
* [http://www.can-wiki.info/ CAN-Wiki]
* [http://www.can-cia.org/ CAN in Automation (CiA) international users' and manufacturers' group]
* [http://www.launch-techs.com/Support/Info/can-bus.htm Mercedes Benz CAN DATA BUS ]
* [http://www.yamar.com/DCAN250.html CAN-BUS over vehicle power-line]
* [http://www.vector-informatik.com/english/index.html?../products?can_solutions.php CAN information by one of the first Tool suppliers]
* [http://www.interfacebus.com/Design_Connector_CAN.html CAN Bus Interface Description CANbus Pin Out, and Signal Names]
 
== Altri progetti ==
[[Category:Serial buses]]
{{interprogetto}}
 
== Collegamenti esterni ==
-->
 
* {{cita web|http://www.can.bosch.com/|Controller Area Network homepage della Bosch|lingua=en}}
==Voci correlate==
* {{cita web|http://www.kvaser.com/about-can/the-can-protocol/|Tutorial del CAN|lingua=en}}
* [[Bus]]
* {{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}}
[[Categoria:Hardware]]
{{Controllo di autorità}}
{{Portale|informatica}}
 
[[Categoria:Bus seriali]]
[[de:Controller Area Network]]
[[en:Controller Area Network]]
[[es:CAN bus]]
[[fr:Controller area network]]
[[nl:Controller Area Network]]
[[pl:Controller Area Network]]
[[ru:Controller Area Network]]
[[sv:CAN-buss]]