Il Campo ACK e Altri Elementi Chiave dei Frame CAN Bus (PARTE 4)
Campo ACK nel Frame CAN Bus
Il campo ACK è essenziale nel processo di conferma della corretta ricezione dei messaggi all’interno del sistema CAN bus.
Componenti del Campo ACK: Il campo ACK è costituito da due bit:
- 1 bit ACK: Questo bit, talvolta chiamato slot ACK, funge da conferma che il frame è stato ricevuto senza errori.
- 1 bit delimitatore: Questo bit delimitatore aiuta a separare chiaramente il campo ACK dal resto del frame.
Funzionamento:
- Il nodo trasmittente invia il bit ACK in modalità recessiva (cioè in 1), indicando che il frame è stato trasmesso correttamente.
- Durante lo slot ACK, il nodo trasmittente passa alla modalità di ricezione, inviando un segnale recessivo sul bus.
- Tutti i nodi riceventi che hanno ricevuto il frame con un CRC corretto segnalano questo al trasmettitore inviando un frame in cui inseriscono un bit dominante nello slot ACK.
Possibili Scenari con Più Nodi Riceventi
- Se il nodo trasmittente rileva un bit dominante durante lo slot ACK, sa che almeno un nodo ricevente ha ricevuto correttamente il messaggio. Questo implica che tutti i nodi riceventi hanno ricevuto il messaggio correttamente. In questo caso, se un nodo riceve un errore CRC, invierà un frame di errore, il che causerà il ritrasmissione del messaggio da parte del nodo trasmittente dopo un timeout specificato.
- Se il nodo trasmittente rileva un bit recessivo durante lo slot ACK, sa che tutti i nodi riceventi hanno segnalato un errore. In questo caso, il nodo trasmittente considera che ci sia stata una possibile errata trasmissione del messaggio o una corruzione dei dati sul bus. Di conseguenza, ritrasmetterà il messaggio dopo un timeout specificato.
l Campo Fine Frame indica la fine del messaggio trasmesso.
Composizione: Il Campo Fine Frame è costituito da 7 bit, tutti recessivi. Questo significa che tutti i bit in questo campo sono impostati su 1.
Ruolo: Questo campo segna la fine del frame dati e viene sempre aggiunto alla fine di ogni messaggio trasmesso sul bus CAN. La presenza di questo campo indica ai nodi riceventi che il frame dati è completo.
Intervallo tra i Frame: Quando vengono inviati più frame dati in sequenza, è importante lasciare un intervallo di almeno 3 bit tra ciascun frame. Questo intervallo, noto come intervallo di frame, è costituito da bit recessivi. Assicura che i nodi riceventi possano distinguere chiaramente tra un frame e il successivo, evitando confusione nella ricezione dei messaggi.
Comprendere il Frame Remoto nel Protocollo CAN Bus
Il frame remoto è un componente del protocollo CAN Bus utilizzato per richiedere la trasmissione di un messaggio da parte di un nodo ad un altro. Ecco una spiegazione chiara delle sue caratteristiche:
Ruolo del Frame Remoto: Il frame remoto è impiegato quando un nodo desidera richiedere la trasmissione di un messaggio da un altro nodo sulla rete CAN Bus. Tuttavia, è importante notare che i frame remoti sono poco utilizzati e non sono raccomandati dall’associazione CiA (CAN in Automation).
Differenze rispetto al Frame Dati: Il frame remoto è simile al frame dati, ma con alcune differenze chiave:
- Non ha un campo dati. In altre parole, il frame remoto è composto da SOF (Start of Frame), campo identificatore, RTR (Remote Transmission Request), campo di controllo, campo CRC (Cyclic Redundancy Check), campo ACK (Acknowledgment) e campo EOF (End of Frame).
- Il bit RTR del frame remoto è impostato sullo stato recessivo, ovvero 1, per indicare che si tratta di una richiesta di trasmissione.
In conclusione, il frame remoto è utilizzato per richiedere la trasmissione di un messaggio da un nodo ad un altro all’interno del sistema CAN Bus. Tuttavia, a causa del loro limitato utilizzo e delle raccomandazioni dell’associazione CiA, è consigliabile evitarne l’uso quando possibile.
Gestione dei Frame Remoti e dei Frame di Dati
Quando un nodo riceve un frame remoto e lo accetta, invierà successivamente un frame dati contenente i dati richiesti. Tuttavia, è importante notare che solo un nodo alla volta può inviare effettivamente i dati.
La procedura di richiesta dei dati avviene in due fasi:
- Il primo frame è il frame remoto, contrassegnato da RTR = 1, che segnala agli altri nodi la richiesta di trasmissione dei dati.
- Il secondo frame è un frame dati con lo stesso identificatore, che specifica agli altri nodi quali dati sono richiesti. È fondamentale che il DLC (Data Length Code) del frame remoto sia lo stesso del frame dati che segue immediatamente. Se un frame remoto e un frame dati con lo stesso identificatore tentano di accedere al bus contemporaneamente, il frame dati ha la precedenza poiché il suo bit RTR è impostato su 0, conferendogli maggiore priorità. Questa priorità viene determinata nell’arbitrato del bus, dove il bit RTR gioca un ruolo fondamentale.
Gestione dei Frame di Errore
I frame di errore vengono generati e trasmessi dall’hardware CAN per segnalare errori durante la trasmissione dei dati. Quando viene generato un frame di errore, tutti i nodi sul bus scartano immediatamente i dati correnti.
Il frame di errore è composto da due parti:
- Un Flag Errore di 6 bit che indica la natura e il tipo di errore.
- Un delimitatore Errore di 8 bit che separa chiaramente il frame di errore dal resto del messaggio trasmesso.
Per garantire una corretta gestione, è consigliabile aggiungere un intervallo di interframe di almeno 3 bit alla fine del frame di errore. Questo intervallo aiuta a separare chiaramente i frame di errore da quelli successivi e a garantire che vengano rilevati e gestiti correttamente.
Gestione degli Errori nel Bus CAN
Secondo lo standard CAN, la presenza di cinque bit consecutivi dello stesso valore logico (sia dominanti che recessivi) è considerata una violazione dello standard del bus e rappresenta una condizione di errore. In tal caso, i dati attualmente sul bus vengono considerati errati e scartati da tutti i nodi. Dopo un intervallo di interframe, il nodo trasmittente ritrasmette lo stesso frame.
Quando si verifica un errore, viene inviato un frame di errore. Questo frame è composto da sei bit consecutivi dello stesso valore logico (sia dominanti che recessivi), violando gli standard CAN e causando il rifiuto del frame completo. Esistono due tipi di flag di errore: flag di errore attivi (sei bit dominanti) e flag di errore passivi (sei bit recessivi).
Quando un nodo invia un frame di errore, tutti gli altri nodi sul bus riconoscono la condizione di errore e possono a loro volta inviare frame di errore. È possibile che più nodi inizino a trasmettere contemporaneamente i loro frame di errore, estendendo così il flag di errore a un massimo di 12 bit sul bus.
Nel caso peggiore, il frame di errore è composto da 20 bit (12 bit di flag di errore e 8 bit di delimitatore di errore), oltre all’intervallo di interframe di 3 bit. Questo porta ad un totale di 23 bit. Con una velocità di dati del bus di 1 Mbps, il tempo totale per il recupero dell’errore peggiore è di soli 23 μs. Questo breve intervallo di tempo rappresenta uno dei vantaggi distintivi del bus CAN.
La gestione delle condizioni di errore del bus CAN verrà esaminata in dettaglio nel prossimo capitolo. La figura seguente illustra il caso in cui il frame di errore può estendersi a 12 bit di flag di errore e 8 bit di delimitatore di errore, evidenziando il processo di invio e ricezione dei frame di errore nel sistema CAN.
Il frame di sovraccarico viene utilizzato quando un nodo ricevente non è pronto a ricevere frame. È simile al frame di errore e contiene un flag di sovraccarico a 6 bit e un delimitatore a 8 bit. Può essere inviato tra due frame dati o remoti e si verifica in due casi:
- Quando un ricevitore è temporaneamente sovraccarico, richiedendo un ritardo nella ricezione dei dati.
- Quando viene rilevato un bit dominante durante l’intervallo interframe o durante il campo EOF.
Nel primo caso, il frame di sovraccarico inizia al primo tempo del bit di un intervallo interframe previsto, sovrascrivendo i 3 bit di intervallo interframe. Questa differenza di temporizzazione è cruciale e distingue il frame di sovraccarico dal frame di errore. Nel secondo caso, il frame di sovraccarico inizia un bit dopo il rilevamento del bit dominante e consiste di sei bit dominanti, violando le regole del bus CAN. Tutti gli altri nodi rilevano questa condizione e trasmettono anche un frame di sovraccarico. La lunghezza della bandiera di sovraccarico può essere estesa fino a 12 bit. Non possono essere generati più di due frame di sovraccarico per ritardare un frame di dati o remoto. Il delimitatore di sovraccarico è composto da otto bit recessivi ed è simile al delimitatore di errore.
I frame estesi CAN aggiungono una dimensione maggiore all’identificatore dei messaggi rispetto ai frame standard. Mentre i frame standard utilizzano identificatori a 11 bit, i frame estesi (chiamati anche CAN 2.0B) consentono identificatori più lunghi per aumentare la capacità del bus. Questo è particolarmente utile in applicazioni più complesse o in sistemi in cui è necessario distinguere tra un numero più elevato di dispositivi o messaggi.
Nel dettaglio:
- Nel CAN esteso, l’identificatore del messaggio è più lungo, consentendo un numero molto più elevato di identificatori diversi nel sistema rispetto al CAN standard.
- I bit aggiuntivi per gli identificatori estesi comportano tempi di latenza del bus leggermente più lunghi e un aumento del 20% nella larghezza di banda richiesta per i messaggi.
- Nei sistemi che utilizzano una combinazione di frame standard e estesi, i frame standard hanno una priorità più alta rispetto ai frame estesi a causa della codifica dei bit di controllo.
- Tuttavia, l’aumento della complessità può portare a una diminuzione delle prestazioni di rilevamento degli errori, poiché i frame estesi richiedono tempi di calcolo del CRC più lunghi a causa del maggior numero di bit nel frame.
In sostanza, mentre i frame estesi offrono una maggiore capacità e flessibilità nel sistema CAN, ci sono alcune trade-off da considerare, come tempi di latenza leggermente più lunghi e una maggiore richiesta di larghezza di banda.
Scambio di Dati sul Bus CAN
In questo capitolo, esploreremo il processo di scambio di dati sul bus CAN. Il bus CAN è caratterizzato da una struttura multi-master, il che significa che ogni nodo può essere attivo sia nella trasmissione che nella ricezione dei dati in qualsiasi momento.
Quando un nodo invia un messaggio sul bus, tutti gli altri nodi ascoltano e ricevono quel messaggio. Tuttavia, anche se tutti i nodi ricevono tutti i messaggi, possono scegliere di non fare nulla in risposta se il contenuto del messaggio non è rilevante per loro.
Un aspetto importante del bus CAN è che i nodi non sono indirizzati in modo specifico. Ciò significa che i messaggi non sono diretti a nodi specifici ma sono trasmessi in modo broadcast su tutto il bus. Inoltre, un nodo che invia un messaggio non ha bisogno di sapere quale nodo specifico lo riceverà. Allo stesso modo, un nodo trasmittente potrebbe non essere consapevole dei nodi specifici che rispondono al messaggio che ha inviato. In pratica, i nodi ricevono solo i messaggi per i quali sono stati programmati.
Anche se il funzionamento interno dei diversi controller CAN può variare, questo capitolo si concentrerà sui principi fondamentali dello scambio di dati su questo bus.
Scambio di Dati tramite Frame Dati sul Bus CAN
I frame di dati sono il cuore del funzionamento del bus CAN, poiché permettono di trasferire informazioni da un nodo trasmittente ad altri nodi sul bus. Un frame di dati è facilmente riconoscibile grazie alla presenza di un bit RTR dominante.
Quando un nodo vuole condividere informazioni con gli altri nodi sul bus, crea un frame di dati. Questo frame contiene diverse componenti fondamentali:
- Identificatore del Messaggio: Questo identificatore è essenziale, poiché i nodi riceventi lo utilizzano per determinare se il messaggio è di loro interesse o meno.
- Dati Effettivi: I dati veri e propri vengono inclusi nel frame, solitamente in forma di byte.
- Bit di Controllo degli Errori: Questi bit aiutano a garantire l’integrità dei dati durante la trasmissione.
Nei nodi riceventi, i controller CAN sono dotati di filtri di accettazione integrati (o filtri di ricezione). Questi filtri possono essere personalizzati e impostati con valori specifici dall’utente o dal programmatore del sistema. Durante la ricezione di un frame di dati, i valori dell’identificatore del messaggio vengono confrontati con i valori dei filtri di accettazione. Se c’è una corrispondenza, il messaggio viene accettato dal controller. Altrimenti, viene scartato.
Questo approccio consente ai nodi di decidere autonomamente quali messaggi sono rilevanti per loro. Anche se tutti i nodi ricevono tutti i messaggi trasmessi sul bus, possono scegliere di ignorare quelli che non corrispondono ai loro criteri di accettazione, grazie all’uso dei filtri di accettazione.
La maggior parte dei controller CAN bus include anche maschere di filtro integrate. Queste maschere vengono utilizzate per specificare quali bit dell’identificatore del messaggio devono essere confrontati con i valori nei filtri di accettazione. Ad esempio, impostare tutti i bit della maschera del filtro su 1 significa che tutti i bit dell’identificatore dei messaggi devono corrispondere ai bit nei filtri di accettazione.