Il
Controller Area Network (CAN), noto anche come CAN-bus, è uno standard seriale per bus di campo, ideato allo scopo di collegare diverse unità di controllo elettronico. La sua potenzialità è quella di essere del tutto, o quasi,
immune ai disturbi elettromagnetici e di rete, riuscendo quindi a offrire una grande protezione dagli errori.
Nel protocollo
CAN ci sono
cinque meccanismi di rilevamento dell’errore, che operano simultaneamente:
- Cyclic Redundancy Check: è un controllo di parità a ridondanza, che utilizza quindici bit ed è molto utile per messaggi di piccole dimensioni; il bit successivo è trasferito a livello recessivo;
- Frame Check: effettua una verifica dei campi del frame a valore fisso, con il bit recessivo fissato al valore unitario; se questo bit è diverso, si invia un errore di formato;
- Acknowledge Error Check: invia un ACK a livello distribuito; un nodo che risponde correttamente invia un messaggio, settando il bit dominante di ACK a zero. Allo stesso tempo, il trasmettitore rileva lo stato del bus e, se risulta un livello relativo a un bit recessivo, si invia un errore di acknowledge segnalando che il messaggio non è stato letto da alcun nodo;
- Bit-monitoring: mentre il trasmettitore invia un messaggio sul bus, questo meccanismo legge anche il livello dello stesso e se il bit del messaggio letto è diverso da quello scritto, si genera un errore di bit-monitoring;
- Bit-stuffing: serve ad assicurare che lo stream di bit sul bus contenga un numero di transizioni sufficienti per garantire che i messaggi ricevuti possano sincronizzare il proprio clock locale tramite l'algoritmo DPLL. Ogni volta che vengono individuati cinque bit allo stesso livello, viene aggiunto un bit di valore opposto; in seguito il ricevitore elimina gli stuff bit per ottenere la sequenza originale.
Nel protocollo
CAN tutti i nodi sono identificati come
master, nella comunicazione; per questo motivo, può accadere che si crei una collisione se più nodi iniziano a trasferire in contemporanea. In questo caso il MAC assicura che il messaggio caratterizzato dall’ID più basso prevalga e che il nodo che lo trasferisce non si accorga della collisione. A tutti gli altri nodi viene inviato un
ERROR FLAG (in caso di errori locali i flag si sovrappongono), seguito da un
ERROR DELIMITER, in modo tale che il messaggio venga scartato da ogni nodo. Tutti i messaggi coinvolti nella collisione dovranno essere ritrasferiti quando il bus diventa nuovamente disponibile.
Una volta ottenuto il sincronismo, grazie al circuito che implementa il
DPLL, il protocollo
CAN ha un sistema di comunicazione con accesso di tipo CSMA/BA senza prelazione e basato su priorità. Ad ogni messaggio è assegnata una priorità ed esiste un algoritmo distribuito che ne determina la priorità più alta, secondo l'arbitraggio
bitwise. Esistono, inoltre, opportune tecniche per determinare la
schedulazione dei messaggi al fine di garantire, a priori, il rispetto dei requisiti temporali dei singoli scambi. In questo modo si garantisce anche e soprattutto un comportamento deterministico e prevedibile tale da evitare congestioni per traffico elevato.