Comprendere i Frame del CAN Bus: Pacchetti di Comunicazione e Arbitrato dei Dispositivi (PARTE 3)
Pacchetti di Dati e Controllo per una Comunicazione Efficiente
I messaggi sul CAN bus sono trasmessi all’interno di un frame, ovvero sequenze di bit con una lunghezza predefinita. Immagina i frame come pacchetti che trasportano informazioni e istruzioni sul bus.
Ogni frame contiene:
- Dati: le informazioni che si desidera trasmettere ad un altro dispositivo, come la velocità del veicolo o la temperatura del motore (esempio di un sistema montato su un’auto).
- Informazioni di controllo: bit che garantiscono la corretta comunicazione, come la verifica di errori e l’identificazione del tipo di messaggio.
A differenza di molti sistemi di comunicazione, il CAN bus non ha un dispositivo master centrale. Tutti i dispositivi (chiamati “nodi”) possono trasmettere dati in qualsiasi momento, garantendo una comunicazione flessibile e veloce.
Massima Flessibilità nel CAN Bus, Multi-Master, Priorità dei Messaggi e Controllo dei Dati
Multi-master:
- Qualsiasi dispositivo può trasmettere quando il bus è libero.
- In caso di collisioni, un meccanismo di arbitrato determina chi ha la priorità.
2. Flessibilità:
- I messaggi non sono indirizzati a specifici nodi.
- Ogni nodo decide se accettare o scartare un messaggio in base al suo identificativo (ID).
- Un nuovo dispositivo può essere aggiunto o rimosso senza modificare la configurazione (hot-pluggable).
3. Priorità dei messaggi:
- I messaggi con ID numerico più basso hanno priorità più alta.
4. Velocità di comunicazione flessibile:
- Può essere impostata qualsiasi velocità fino al massimo consentito dal protocollo.
5. Richiesta di trasmissione remota (RTR):
- Un nodo può richiedere dati ad altri nodi.
6. Rilevamento errori:
- Tutti i dispositivi possono rilevare errori e comunicare anomalie.
- I nodi con errori frequenti vengono rimossi dal bus.
7. Controllo dei dati ricevuti:
- I nodi verificano la correttezza dei dati con bit di ridondanza.
- Il nodo trasmittente attende conferma di ricezione corretta.
8. Numero di dispositivi:
- In teoria, è possibile collegare un numero illimitato di dispositivi.
- In pratica, il numero è limitato dal tempo di ritardo di ricezione/trasmissione consentita dall’applicazione
I Quattro Tipi di Frame nel Protocollo CAN Bus, Funzioni e Contenuti
Il protocollo CAN bus utilizza quattro tipi di frame per la comunicazione tra i dispositivi:
1. Frame di dati:
- Funzione: Trasferire dati tra i nodi della rete.
- Contenuto: Identificativo del messaggio, lunghezza dei dati, payload (dati veri e propri).
2. Frame remoto:
- Funzione: Richiedere la trasmissione di un messaggio (dati) da un altro nodo.
- Contenuto: Identificativo del messaggio che si desidera ricevere.
3. Frame di errore:
- Funzione: Segnalare una condizione di errore sul bus.
- Contenuto: Tipo di errore, identificativo del messaggio con errore.
4. Frame di sovraccarico:
- Funzione: Indicare che un nodo ricevente non è pronto a ricevere altri frame.
- Contenuto: Richiesta di ritrasmissione del messaggio precedente.
Caratteristiche e Specifiche dei Protocolli CAN 2.0A e 2.0B
Tipi di protocolli CAN:
Esistono due versioni principali del protocollo CAN:
- CAN 2.0A: la versione originale con identificatori a 11 bit.
- CAN 2.0B: una versione estesa con identificatori a 29 bit.
Compatibilità:
I controller CAN 2.0B sono completamente compatibili con i controller 2.0A. Ciò significa che un controller 2.0B può trasmettere e ricevere messaggi CAN 2.0A.
Tipi di controller CAN 2.0A:
Esistono due tipi di controller CAN 2.0A:
- Controller 2.0A standard: possono solo inviare e ricevere messaggi 2.0A. La ricezione di un messaggio 2.0B genererà un errore.
- Controller 2.0B passivo: possono inviare e ricevere messaggi 2.0A, ma possono anche ricevere e ignorare messaggi 2.0B.
I nodi quando non devono trasmettere, il driver si pone in alta impedenza.
Invece quando inizia una trasmissione, il frame standard di dati inizia con il bit Start of Frame (SOF), seguito da un identificatore a 11 bit e un bit Request di trasmissione remota (RTR).
Il campo di controllo è composto da 6 bit e indica in numero di byte che compone il campo di dati.
Il campo dati può essere da 0 a 8 byte e contiene l’informazione da trasferire.
Il campo dati è seguito dal campo di checksum (CRC) a 16 bit, per il controllo sulla correttezza dei dati ricevuti.
Il campo ACK è formato da 2 bit ed è utilizzato dal nodo che ha trasmesso i dati per ricevere conferma di un frame valido da parte del ricevitore.
La fine del messaggio è indicata da un campo End of Frame (EOF) a 7 bit.
I frame successivi devono essere separati da un tempo minimo equivalente a tre colpi di clock, chiamato spazio interframes (ITM).
Il numero totale di bit che compone un frame sono:
• SOF 1 bit
• Identificativo 11 bit
• RTR 1 bit
• Controllo 6 bit
• Dati 0 a 64 bit (0 a 8 byte)
• CRC 16 bit
• ACK 2 bit
• EOF 7 bit
• ITM 3 bit
In totale, per un frame dati sono necessari 47 bit (di controllo) e 64 bit (8 byte di dati), in totale sono richiesti 111 bit per l’intero frame.
Inizio del frame (SOF)
Funzione:
Il campo “Inizio del frame” (SOF) indica l’inizio di un nuovo frame dati inviato sul bus. Il suo scopo è di far uscire il bus dallo stato di inattività e preparare i dispositivi alla ricezione dei dati.
- Il campo SOF è composto da un solo bit.
- Il valore del bit SOF è “0” (dominante).
- Il bus è considerato inattivo quando tutti i bit sono a “1” (recessivo).
L’invio del bit SOF fa uscire il bus dallo stato di inattività e avvia l’arbitrato sul bus, che regola la trasmissione contemporanea di più dispositivi.
Campo di Arbitrato nei Frame Dati Standard
Il campo di arbitrato in un frame dati standard è un aspetto cruciale nei sistemi di comunicazione, specialmente in quelli che coinvolgono più dispositivi che condividono lo stesso bus per risolve i conflitti sul bus.
Composizione del Campo di Arbitrato
Il campo di arbitrato di un frame dati standard è costituito da 12 bit, suddivisi in due componenti principali: l’identificatore e la richiesta di trasmissione remota (RTR). L’identificatore, che comprende 11 bit (MSB trasmesso per primo), è utilizzato per distinguere i messaggi sul bus e stabilirne la priorità. L’RTR, un singolo bit, indica se il messaggio è una richiesta di trasmissione remota.
Priorità e Identificatore
Ogni nodo che trasmette un messaggio ha un identificatore unico. Questo identificatore determina non solo l’individuazione del messaggio sul bus ma anche la sua priorità. I nodi riceventi sono dotati di filtri di accettazione che possono essere programmati per accettare o rifiutare messaggi in base ai numeri di identificatore specificati. Un frame di dati con un identificatore più basso gode di una priorità più alta.
Risoluzione dei Conflitti
L’arbitrato è fondamentale per risolvere i conflitti che sorgono quando più dispositivi cercano di accedere simultaneamente al bus. Durante questa fase, ogni dispositivo trasmette il proprio identificatore in modo seriale sul bus e confronta il livello presente sul bus ad ogni bit trasmesso. Se il livello sul bus coincide con quello trasmesso, il dispositivo procede con la trasmissione del bit successivo dell’identificatore. Tuttavia, se il dispositivo rileva un livello dominante sul bus mentre cerca di trasmettere un livello recessivo, interrompe la trasmissione e diventa un dispositivo ricevente.
Determinazione del Trasmettitore
Alla fine dell’arbitrato, solo un trasmettitore rimane sul bus. Questo è il nodo con l’identificatore che ha il maggior numero sequenziale di livelli recessivi, il che equivale a dire che ha il numero identificativo più basso. Questo trasmettitore continua a inviare il resto dei bit del frame.
Per comprendere l’arbitrato nel dettaglio, ricordiamo che nel nostro contesto di comunicazione, il livello recessivo corrisponde a 1 mentre il livello dominante a 0, e che il livello dominante ha la precedenza sul livello recessivo. Qui di seguito sono i passaggi chiave del processo di arbitrato:
- Trasmissione dei Bit dal MSB: I bit vengono trasmessi a partire dal bit più significativo (MSB).
- Inizio Trasmissione Simultanea: Tutti i nodi iniziano a trasmettere contemporaneamente, inviando prima i loro bit Start of Frame (SOF).
- Trasmissione dell’Identificatore: Successivamente, i nodi iniziano a trasmettere i bit dell’identificatore. Supponiamo che fino all’ottavo bit, tutti i nodi trasmettano gli stessi bit di identificazione. Tuttavia, dal nono bit in poi, solo il nodo 2 è in stato recessivo, mentre gli altri nodi trasmettono un bit dominante. Di conseguenza, il nodo 2 interrompe la trasmissione e passa alla modalità di ricezione. Questo stato di ricezione è indicato nella figura da un campo colorato di grigio.
- Continuazione della Trasmissione: Gli altri nodi continuano quindi a trasmettere i loro bit di identificazione.
- Interruzione della Trasmissione da Parte di Altri Nodi: Quando si arriva al decimo bit, se il nodo 1 è in stato recessivo mentre il nodo 3 è in stato dominante, il nodo 1 interrompe la trasmissione e ritorna alla modalità di ricezione .
- Rimane Solo un Trasmettitore: Alla fine del processo di arbitrato, il bus è lasciato al nodo 3, che può quindi inviare il resto del suo identificatore e il resto dei bit del frame (come bit RTR, campo di controllo, campo dati, CRC e bit di ACK).
In breve, questo processo di arbitrato assicura che solo un nodo abbia il diritto di trasmettere su un dato momento, risolvendo efficacemente i conflitti di accesso al bus in un ambiente di comunicazione condiviso.
Frame CAN Bus: Comprendere gli Identificatori e i Campi Chiave
Nel contesto dei frame CAN bus, è importante analizzare gli identificatori di ciascun nodo per determinare la priorità di trasmissione e comprendere i vari campi all’interno del frame stesso.
Identificatori dei Nodi: Esaminando gli identificatori di ogni nodo insieme ai loro equivalenti esadecimali, otteniamo i seguenti valori:
- Nodo1: 11100110011 (Hex: 733)
- Nodo2: 1110011111 (Hex: 73F)
- Nodo3: 11100110001 (Hex: 731)
Il nodo con l’identificatore più basso è il nodo 3, quindi gode della priorità più alta. Questo è in linea con l’esempio precedentemente fornito, dove solo il nodo 3 ottiene il diritto di trasmettere sul bus.
Campo RTR: Il campo RTR, costituito da un singolo bit, indica se il frame è un frame di dati (RTR = 0) o una richiesta remota (RTR = 1). Questo campo, insieme agli identificatori, forma ciò che è noto come campo di arbitrato.
Campo di Controllo: Il campo di controllo è composto da 6 bit e comprende:
- IDE (Bit di estensione dell’identificatore)
- r0 (Bit riservato)
- DLC3-DLC0 (Bit che indicano la lunghezza del campo dati)
Questi bit sono cruciali per il corretto funzionamento e l’interpretazione del frame, permettendo di distinguere tra vari tipi di frame e di determinare la lunghezza dei dati trasmessi.
In conclusione, la comprensione degli identificatori dei nodi, insieme ai campi come RTR e di controllo, è essenziale per una comunicazione affidabile e efficiente all’interno di una rete CAN bus.
Campi di Controllo nel Frame CAN Bus
All’interno del frame CAN bus, il campo di controllo contiene informazioni cruciali per interpretare correttamente il messaggio trasmesso. Ecco una spiegazione chiara dei componenti di questo campo:
Bit IDE (Identifier Extension): Il bit IDE indica il formato utilizzato per il messaggio CAN. IDE = 0 corrisponde al formato standard CAN 2.0A, mentre IDE = 1 indica il formato esteso CAN 2.0B.
Bit r0 (Riservato): Il bit r0 è un bit riservato e attualmente non utilizzato. Viene mantenuto per futuri sviluppi o per garantire la compatibilità con versioni precedenti del protocollo.
DLC3-DLC0 (Data Length Code): Questi quattro bit determinano il numero di byte presenti nel campo dati del frame, consentendo di variare da 0 a 8 byte a seconda delle necessità di trasmissione. Ad esempio, se i bit DLC3-DCL0 sono impostati per indicare “0100”, significa che nel campo dati sono presenti 4 byte.
Di seguito è riportata una tabella che illustra come i bit DLC3-DCL0 vengono utilizzati per rappresentare la dimensione del campo dati:
Questo schema fornisce una guida chiara su come interpretare i bit DLC3-DCL0 per determinare la lunghezza del campo dati nel frame CAN bus.
Comprendere i Campi Chiave nel Frame CAN Bus
Per interpretare correttamente il messaggio trasmesso attraverso il frame CAN bus, è essenziale comprendere i vari campi inclusi. I due campi principali:
Campo Dati: Il campo dati contiene i dati effettivi del messaggio. La dimensione di questi dati può variare da 0 a 8 byte, e vengono trasmessi con il byte più significativo (MSB – Most Significant Byte) per primo. Questo significa che il byte che porta il maggior peso nell’interpretazione dei dati viene trasmesso prima degli altri.
Campo CRC (Cyclic Redundancy Check): Il campo CRC, noto anche come Controllo di Ridondanza Ciclica, è un meccanismo utilizzato per rilevare errori nei dati trasmessi. È composto da due parti:
- Sequenza CRC di 15 bit: Questa sequenza viene calcolata sulla base dei dati trasmessi e serve come verifica dell’integrità dei dati.
- 1 bit delimitatore CRC: Questo bit delimitatore aiuta a separare chiaramente il campo CRC dalla sequenza di dati.
Il nodo ricevente calcola il CRC sui dati ricevuti e lo confronta con il CRC inviato con il frame. Se i due CRC non corrispondono, si presume che ci sia un errore nei dati trasmessi. Questo meccanismo aiuta a garantire l’affidabilità della comunicazione all’interno del sistema CAN bus, poiché permette di rilevare e correggere eventuali errori che si verificano durante la trasmissione dei dati.
In conclusione, la comprensione dei campi dati e CRC è fondamentale per garantire una corretta interpretazione dei messaggi trasmessi attraverso il frame CAN bus e per garantire l’affidabilità del sistema nel rilevare eventuali errori nella comunicazione.
Nel prossimo articolo affronteremo dettagliatamente il calcolo del CRC. Tuttavia, per mantenere la chiarezza e la concisione di questo articolo, eviteremo di approfondire ulteriormente questo argomento. Ci concentreremo invece sulla comprensione dei concetti fondamentali dei campi dati e CRC all’interno del frame CAN bus.