Controller Area Network CAN
1. Storia
Lo sviluppo del CAN bus ha inizio nel 1983 al Robert
Bosch GmbH. Il primo chip CAN controller, prodotto da Intel e Philips, è
immesso sul mercato nel 1987. Nel ’91 il primo veicolo la Mercedes-Benz W140.
2. Tecnica di accesso: CSMA/CD+AMP
Nel mondo Automotive la
topologia usata è la bus. La vera ragione per cui questa topologia è applicata
sono principalmente i costi, dovuti nella fattispecie alla semplicità di
implementazione, ovvero la duttilità nel cablaggio veicolare. Per aumentare la robustezza della rete, si applicano delle resistenze di
terminazione pilotando il segnale e non facendolo ridondare dove non è necessario.
La tecnica di accesso al CAN BUS è la Carrier
Sense Multiple Access with Collition Detection and Arbitration on Message Priority (CSMA/CD+AMP).
- Carrier Sense: un nodo trasmette solo se il CAN Bus è libero ed attende quando è occupato;
- Multiple Access: ogni nodo legge sempre lo stato del CAN Bus anche quando è in fase di scrittura;
- Collition Detection: se rileva una fase di contesa, ovvero una collisione, la trasmissione da parte del nodo che ha una priorità inferiore è bloccata ma non distrutta sul CAN Bus;
- Arbitration on Message Priority: la fase di contesa è schedulata seguendo un meccanismo di arbitraggio basato sulla priorità che permette ad un nodo di proseguire con la trasmissione grazie alla maggiore priorità del proprio univoco identificativo (ID).
Fase di contesa
La CAN Bus è regolata dall'assioma 0 logico Dominante e di 1
logico Recessivo. In fase di contesa la priorità maggiore è legata al frame con priorità prossima allo 0.
Sul CAN BUS un nodo scrive il proprio ID, un bit per volta, e lo confronta con lo stato dal
CAN Bus attraverso un wired-AND bit a bit tra il bit ricevuto con quello trasmesso.
In questo stato qualunque nodo si trova ad analizzare i seguenti casi:
- Cambiamento di stato: ovvero un nodo rileva che il bit letto e non è quello che ha scritto e l'azione che compie il nodo è quella di sospendere la trasmissione del frame e di conseguenza salta, in questa fase, la possibilità di trasmettere attendendo una fase successiva;
- Nessun cambiamo di stato: ovvero un nodo legge lo stesso valore di quello che ha scritto sul CAN Bus e l'azione di scrittura dell’ID sul bus terminerà quando sarà trasmesso l'intero ID e risultando abilitato, in quanto non ha rilevato collisioni, alla trasmissione.
Inoltre per i nodi coinvolti nella fase di
contesa che hanno perso l'arbitraggio, sospenderanno la trasmissione dell’ID e ritenteranno
successivamente in un’altra fase di trasmissione, permettendo così al nodo
trasmittente di trasmettere sul CAN Bus senza conflitti.
Per gli amanti del para-visivo, la tabella
sotto esplicherà il contenuto sopra descritto.
START BIT
|
IDENTIFICATOR
|
|||||||||||
10
|
9
|
8
|
7
|
6
|
5
|
4
|
3
|
2
|
1
|
0
|
||
Node A ID: 0x10
|
0
|
0
|
0
|
0
|
0
|
0
|
0
|
1
|
0
|
0
|
0
|
0
|
Node B ID: 0x14
|
0
|
0
|
0
|
0
|
0
|
0
|
0
|
1
|
0
|
1
|
- |
- |
Node C ID: 0x1C
|
0
|
0
|
0
|
0
|
0
|
0
|
0
|
1
|
1
|
- |
- |
- |
CAN BUS
|
0
|
0
|
0
|
0
|
0
|
0
|
0
|
1
|
0
|
0
|
0
|
0
|
3. Date Frame
Il protocollo CAN prevede due formati per la trasmissione dei dati. I frame possono
avere due formati:
- Base frame format o CAN Standard: con 11 bit di identificazione.
- Extended frame format o CAN Extended: con 29 bit di identificazione.
Lo standard CAN obbligatoriamente riconoscere
il formato base frame e può opzionalmente riconoscere il formato extended frame
format. Per la politica di gestione dei messaggi lo standard vigente per veicoli
off road e commerciali è la SAE J1939.
- Start of frame bit – indica l'inizio di un frame con valore dominante 0 logico.
- Arbitration ID – identifica e indica la priorità del frame. Il CAN standard usa 11 bit come identifier mentre il CAN extended usa 29 bit come identifier, ovvero 11 bit per identifier A + 18 bit identifier B.
- IDE (identifier extension) bit – permette la differenzazione tra i frame standard and extended.
- RTR (remote transmission request) bit – permette di differenziare i tipi di frame. Il valore dominante (RTR = 0) indica un data frame mentre il valore recessivo (RTR = 1) indica un remote frame.
- DLC (data length code) – indica il numero di byte contenuto nel campo DATA.
- Data Field – può contenere da 0 a 8 bytes di informazioni.
- CRC (cyclic redundancy check) – Usato come error detectio
- ACK (ACKnowledgement) slot – quando il messaggio è transmesso correttamente
Commenti
Posta un commento