CAN e OBD-II, Concetti di base
Prefazione
Questo documento è rivolto a chi desidera apprendere le informazioni di base sugli standard CAN e OBD-II. L'impostazione di questo testo è piuttosto generica e non presuppone alcuna conoscenza tecnica, tuttavia esso è rivolto agli sviluppatori software che non avendo alcuna nozione degli standard CAN e OBD-II desiderano acquisirne delle conoscenze di base.
I numerosi documenti su CAN e OBD-II presenti in rete presuppongono troppo spesso un certo livello di conoscenza da parte del lettore, e chi si trova a leggerli privo di quelle conoscenze di base che sono date per scontate fa molta fatica a comprenderli. Questo documento non ha lo scopo di spiegare tutto, anzi, per mantenere le spiegazioni semplici e comprensibili intendo omettere informazioni anche importanti; il mio scopo è quello di fornire al lettore quelle conoscenze di base e quella visione d'insieme che gli permetteranno di espandere più facilmente le proprie conoscenze comprendendo meglio e più velocemente i numerosi documenti presenti in rete.
Una precisazione: questo non è un testo strettamente tecnico o scientifico, intendo descrivere le cose in maniera semplice e comprensibile come se le stessi spiegando ad un amico. Siccome non sono un tecnico potrei usare alcuni termini in maniera non appropriata o dare delle definizioni non proprio rigorose; ripeto che lo scopo di questo testo è dare una visione d'insieme, mentre dati tecnici ed informazioni rigorose andranno ricercate nei tanti documenti, anche ufficiali, presenti in rete.
I numerosi documenti su CAN e OBD-II presenti in rete presuppongono troppo spesso un certo livello di conoscenza da parte del lettore, e chi si trova a leggerli privo di quelle conoscenze di base che sono date per scontate fa molta fatica a comprenderli. Questo documento non ha lo scopo di spiegare tutto, anzi, per mantenere le spiegazioni semplici e comprensibili intendo omettere informazioni anche importanti; il mio scopo è quello di fornire al lettore quelle conoscenze di base e quella visione d'insieme che gli permetteranno di espandere più facilmente le proprie conoscenze comprendendo meglio e più velocemente i numerosi documenti presenti in rete.
Una precisazione: questo non è un testo strettamente tecnico o scientifico, intendo descrivere le cose in maniera semplice e comprensibile come se le stessi spiegando ad un amico. Siccome non sono un tecnico potrei usare alcuni termini in maniera non appropriata o dare delle definizioni non proprio rigorose; ripeto che lo scopo di questo testo è dare una visione d'insieme, mentre dati tecnici ed informazioni rigorose andranno ricercate nei tanti documenti, anche ufficiali, presenti in rete.
Introduzione
CAN (Controller Area Network) e OBD-II (On Board Diagnostics) sono due standard di comunicazione (il termine corretto sarebbe "protocolli di comunicazione"). Le centraline dell'automobile che rispettano questi standard parlano tutte la stessa lingua e quindi possono comunicare tra di loro. La comunicazione avviene attraverso una sorta di "linea telefonica" che tecnicamente si chiama "bus".
Nella pratica, il bus non è altro che una coppia di fili che passa da una centralina all'altra, proprio come la linea telefonica passa di casa in casa formando una lunga catena. Anche il motivo del nome "bus" è molto semplice: esso è il "mezzo di trasporto" per i dati: li porta da una centralina all'altra, un po' come un vero bus porta le persone da una fermata all'altra.
Una cosa fondamentale è distinguere i ruoli dei due protocolli CAN e OBD-II. Il CAN definisce un generico standard di comunicazione tramite bus: permette a due o più dispositivi elettronici di scambiarsi dei dati inviandoli e ricevendoli sotto forma di messaggi. In pratica grazie al CAN una centralina A è in grado di inviare dati ad una centralina B, ma questo da solo non basta a realizzare la comunicazione: occorre anche che la centralina B sia in grado di riconoscere ed utilizzare i dati ricevuti, è necessario cioè che le due centraline "parlino la stessa lingua". A questo ci pensa l'OBD-II che definisce una sorta di linguaggio con cui le varie centraline possono finalmente comunicare.
Facciamo un esempio pratico:
Una cosa che può trarre in inganno quando si studiano CAN e OBD-II è che entrambi definiscono una struttura specifica per i loro messaggi e questo può confondere il lettore. Grazie all'esempio precedente abbiamo capito che i due messaggi si fondono l'uno nell'altro: prima viene creato il messaggio OBD-II, dopo di che tale messaggio diventa il contenuto del messaggio CAN che viene inviato sul bus. La centralina che riceve il messaggio CAN fa il processo inverso: elabora il messaggio CAN estraendone il messaggio OBD-II originale e lo processa.
Nella pratica, il bus non è altro che una coppia di fili che passa da una centralina all'altra, proprio come la linea telefonica passa di casa in casa formando una lunga catena. Anche il motivo del nome "bus" è molto semplice: esso è il "mezzo di trasporto" per i dati: li porta da una centralina all'altra, un po' come un vero bus porta le persone da una fermata all'altra.
Una cosa fondamentale è distinguere i ruoli dei due protocolli CAN e OBD-II. Il CAN definisce un generico standard di comunicazione tramite bus: permette a due o più dispositivi elettronici di scambiarsi dei dati inviandoli e ricevendoli sotto forma di messaggi. In pratica grazie al CAN una centralina A è in grado di inviare dati ad una centralina B, ma questo da solo non basta a realizzare la comunicazione: occorre anche che la centralina B sia in grado di riconoscere ed utilizzare i dati ricevuti, è necessario cioè che le due centraline "parlino la stessa lingua". A questo ci pensa l'OBD-II che definisce una sorta di linguaggio con cui le varie centraline possono finalmente comunicare.
Facciamo un esempio pratico:
- La centralina di controllo del motore rileva che il motore è a 2500 giri/minuto
- La centralina inserisce tale informazione in un messaggio conforme al protocollo OBD-II
- Grazie al protocollo CAN la centralina trasmette il messaggio per mezzo del bus
- La centralina di controllo del quadro strumenti, anch'essa collegata al bus, rileva il messaggio
- Grazie all'OBD-II la centralina è in grado di comprendere il contenuto del messaggio: "motore a 2500 giri/minuto"
- La centralina reagisce spostando l'indicatore del contagiri su 2500 giri/minuto.
Una cosa che può trarre in inganno quando si studiano CAN e OBD-II è che entrambi definiscono una struttura specifica per i loro messaggi e questo può confondere il lettore. Grazie all'esempio precedente abbiamo capito che i due messaggi si fondono l'uno nell'altro: prima viene creato il messaggio OBD-II, dopo di che tale messaggio diventa il contenuto del messaggio CAN che viene inviato sul bus. La centralina che riceve il messaggio CAN fa il processo inverso: elabora il messaggio CAN estraendone il messaggio OBD-II originale e lo processa.
CAN
Come detto in precedenza, il protocollo CAN definisce il linguaggio che le varie centraline devono usare per comunicare tra di loro tramite il bus. Siccome i due elementi sono strettamente legati si parla spesso di "CAN bus", Infatti il bus di per se è un normalissimo paio di fili che passa di centralina in centralina, è solo grazie alle regole definite dal CAN che le centraline sono in grado di utilizzare il bus come un potente ed affidabile mezzo di comunicazione.
Il protocollo CAN è molto generico: definisce solo il metodo e le regole per l'invio e la ricezione di dati usando il bus, ma non dice nulla in merito ai dati che devono essere scambiati, al loro formato ecc. Per questo motivo il CAN non viene impiegato esclusivamente nei mezzi di trasporto, ma per esempio anche in macchinari industriali.
In passato alcune case automobilistiche utilizzavano protocolli diversi dal CAN. L'OBD-II invece è uno standard pressoché unico che è diventato obbligatorio sulle automobili a partire dal 1996. Per questo motivo si possono trovare automobili le cui centraline comunicano secondo il protocollo OBD-II, ma si scambiano i messaggi sul bus usando un protocollo che non è il CAN.
Per come è studiato il CAN, quando una centralina invia un messaggio sul bus tale messaggio viene ricevuto da tutte le altre centraline collegate, ogni singola centralina poi analizza il messaggio e decide se è di suo interesse (e in tal caso lo processa) oppure no (in tal caso semplicemente lo ignora).
Abbiamo detto in precedenza che il bus è una sorta di linea telefonica attraverso la quale le centraline dell'auto comunicano tra di loro. Ebbene è molto semplice aggiungere una nuova centralina e farla comunicare con le altre: basta "allacciare" anch'essa alla linea telefonica, ovvero collegarla ai fili del bus. Una volta collegata la nuova centralina comincerà a ricevere tutti i messaggi delle altre centraline (decidendo quali le interessano e quali no) e potrà trasmettere i propri.
Il lettore di questo documento potrebbe voler collegare un'interfaccia OBD-II alla propria auto ed usarla per ricevere dei dati relativi allo stato del veicolo; ebbene quando l'interfaccia OBD-II è inserita, essa è semplicemente collegata al CAN bus come tutte le altre centraline, ed è così in grado di fare sostanzialmente due cose:
Per quanto riguarda il secondo punto occorre fare una precisazione per comprendere il potenziale rischio della comunicazione tramite CAN bus: il dialogo con le centraline spesso ha lo scopo di richiedere informazioni, ma non dobbiamo dimenticare che allo stesso modo è possibile inviare dei comandi che hanno l'effetto di modificare dei parametri di funzionamento. È consigliabile quindi limitarsi ad inviare i messaggi di cui si conosce l'effetto, perché messaggi diversi potrebbero alterare il funzionamento dell'auto e ciò può costituire un pericolo.
Il protocollo CAN è molto generico: definisce solo il metodo e le regole per l'invio e la ricezione di dati usando il bus, ma non dice nulla in merito ai dati che devono essere scambiati, al loro formato ecc. Per questo motivo il CAN non viene impiegato esclusivamente nei mezzi di trasporto, ma per esempio anche in macchinari industriali.
In passato alcune case automobilistiche utilizzavano protocolli diversi dal CAN. L'OBD-II invece è uno standard pressoché unico che è diventato obbligatorio sulle automobili a partire dal 1996. Per questo motivo si possono trovare automobili le cui centraline comunicano secondo il protocollo OBD-II, ma si scambiano i messaggi sul bus usando un protocollo che non è il CAN.
Per come è studiato il CAN, quando una centralina invia un messaggio sul bus tale messaggio viene ricevuto da tutte le altre centraline collegate, ogni singola centralina poi analizza il messaggio e decide se è di suo interesse (e in tal caso lo processa) oppure no (in tal caso semplicemente lo ignora).
Abbiamo detto in precedenza che il bus è una sorta di linea telefonica attraverso la quale le centraline dell'auto comunicano tra di loro. Ebbene è molto semplice aggiungere una nuova centralina e farla comunicare con le altre: basta "allacciare" anch'essa alla linea telefonica, ovvero collegarla ai fili del bus. Una volta collegata la nuova centralina comincerà a ricevere tutti i messaggi delle altre centraline (decidendo quali le interessano e quali no) e potrà trasmettere i propri.
Il lettore di questo documento potrebbe voler collegare un'interfaccia OBD-II alla propria auto ed usarla per ricevere dei dati relativi allo stato del veicolo; ebbene quando l'interfaccia OBD-II è inserita, essa è semplicemente collegata al CAN bus come tutte le altre centraline, ed è così in grado di fare sostanzialmente due cose:
- "ascoltare" in maniera passiva tutti i messaggi che le centraline inviano sul bus e trasmetterli al computer (o altro dispositivo) dell'utente.
- dialogare attivamente con le centraline, richiedendo dei dati e trasmettendo al computer dell'utente le risposte ricevute.
Per quanto riguarda il secondo punto occorre fare una precisazione per comprendere il potenziale rischio della comunicazione tramite CAN bus: il dialogo con le centraline spesso ha lo scopo di richiedere informazioni, ma non dobbiamo dimenticare che allo stesso modo è possibile inviare dei comandi che hanno l'effetto di modificare dei parametri di funzionamento. È consigliabile quindi limitarsi ad inviare i messaggi di cui si conosce l'effetto, perché messaggi diversi potrebbero alterare il funzionamento dell'auto e ciò può costituire un pericolo.
OBD-II
Il protocollo OBD-II è più specifico del CAN ed è nato espressamente come standard per i mezzi di trasporto, è diventato obbligatorio in America nei veicoli prodotti a partire dal 1996. La versione europea di questo standard si chiama EOBD, esso è sostanzialmente identico all'OBD-II ed è obbligatorio dal 2001.
Quanto ho scritto fin qui dell'OBD-II non è completo: l'OBD-II non è solo uno standard di comunicazione, in particolare definisce anche il connettore che deve essere presente nell'abitacolo del veicolo per il collegamento degli strumenti OBD-II compatibili. Tale connettore è sostanzialmente una porta di collegamento al bus CAN (o altro bus presente sul veicolo). Quando a questo connettore viene collegato uno strumento con interfaccia OBD-II esso viene praticamente collegato al bus CAN ed è quindi in grado di ascoltare e comunicare con le centraline come ho spiegato nel capitolo relativo al CAN.
Il connettore OBD-II prevede anche una linea che fornisce energia al dispositivo collegato. È importante sapere che il connettore fornisce sempre energia, anche quando il veicolo è spento. Se uno strumento viene lasciato collegato al veicolo per troppo tempo a motore spento, questo potrebbe facilmente scaricarne la batteria (il dispositivo potrebbe anche consumare poca energia, ma la sua attività sul bus potrebbe "tenere sveglie" varie centraline provocando un consumo di energia elevato). Per questi motivi è importante che i dispositivi OBD-II usati quotidianamente abbiano un buon sistema di risparmio energetico, altrimenti l'utente sarà costretto a scollegarli dopo ogni utilizzo per preservare la carica della batteria dell'auto.
Infine lo standard OBD-II definisce anche alcuni comandi per la richiesta delle informazioni principali relative al veicolo. Tutti i veicoli dovrebbero supportare tali comandi, ma in realtà non è obbligatorio.
Quanto ho scritto fin qui dell'OBD-II non è completo: l'OBD-II non è solo uno standard di comunicazione, in particolare definisce anche il connettore che deve essere presente nell'abitacolo del veicolo per il collegamento degli strumenti OBD-II compatibili. Tale connettore è sostanzialmente una porta di collegamento al bus CAN (o altro bus presente sul veicolo). Quando a questo connettore viene collegato uno strumento con interfaccia OBD-II esso viene praticamente collegato al bus CAN ed è quindi in grado di ascoltare e comunicare con le centraline come ho spiegato nel capitolo relativo al CAN.
Il connettore OBD-II prevede anche una linea che fornisce energia al dispositivo collegato. È importante sapere che il connettore fornisce sempre energia, anche quando il veicolo è spento. Se uno strumento viene lasciato collegato al veicolo per troppo tempo a motore spento, questo potrebbe facilmente scaricarne la batteria (il dispositivo potrebbe anche consumare poca energia, ma la sua attività sul bus potrebbe "tenere sveglie" varie centraline provocando un consumo di energia elevato). Per questi motivi è importante che i dispositivi OBD-II usati quotidianamente abbiano un buon sistema di risparmio energetico, altrimenti l'utente sarà costretto a scollegarli dopo ogni utilizzo per preservare la carica della batteria dell'auto.
Infine lo standard OBD-II definisce anche alcuni comandi per la richiesta delle informazioni principali relative al veicolo. Tutti i veicoli dovrebbero supportare tali comandi, ma in realtà non è obbligatorio.
Collegamenti utili
Correzioni e Commenti
Se hai correzioni da suggerire o commenti da fare su questo documento puoi scrivermi usando il collegamento che trovi in fondo a questa pagina.
Fai una Donazione
Ho impiegato molte ore per apprendere le informazioni che trovi qui. Ho scritto questo documento per aiutare chi si trova nella situazione in cui mi sono trovato io, quando cercavo di comprendere il funzionamento di questi standard ma non trovavo documenti semplici e chiari da cui cominciare.
Se il mio lavoro ti è stato utile ti chiedo di ricompensarmi con una piccola donazione tramite PayPal. Qualsiasi importo sarà ben accetto.
Se il mio lavoro ti è stato utile ti chiedo di ricompensarmi con una piccola donazione tramite PayPal. Qualsiasi importo sarà ben accetto.