FlexRay è un protocollo di comunicazione su bus seriale espressamente concepito per applicazioni automotive e caratterizzato da elevata velocità, determinismo, tolleranza ai guasti e ridondanza.
Gli autoveicoli di ultima generazione sono equipaggiati con un sempre maggior numero di sistemi di sicurezza: airbag dislocati in più punti del veicolo, ABS per migliorare l’efficacia e la stabilità della frenata, EPS per garantire un elevato grado di stabilità in ogni condizione di utilizzo, e altri ancora. Tutti questi sistemi presentano l’innegabile vantaggio di elevare il grado di sicurezza rendendo al contempo la guida più confortevole e piacevole. Per contro, essi richiedono un notevole sforzo a livello di integrazione sia meccanica che elettronica: la banda richiesta per la comunicazione con questi sistemi è aumentata sensibilmente, mentre per talune applicazioni critiche è richiesto un tempo di risposta del sistema di controllo molto esiguo. La tecnologia predominante per lungo tempo a livello di bus automotive (bus di tipo CAN e LIN) ha cominciato a mostrare qualche limite soprattutto in termini di disponibilità di banda e di comportamento deterministico. Ciò ha fatto sì che nel 2000 alcune aziende leader nel settore automotive (Bmw, Daimler-Chrysler, Motorola ora Freescale/NXP, e Philips Semiconductors) abbiano deciso di unire le proprie forze e dar vita ad un consorzio (successivamente denominato FlexRay Consortium) con l’obiettivo di definire un nuovo tipo di bus automotive in grado di soddisfare la domanda di ampia larghezza di banda, elevata velocità di trasmissione, sicurezza, affidabilità, e comportamento deterministico, rendendo poi disponibile questa tecnologia anche ad altri operatori, a condizione che essa venga utilizzata esclusivamente per impieghi automotive. In figura 1 è rappresentato un pesce razza stilizzato, il logo scelto per FlexRay.
Il protocollo FlexRay è caratterizzato dal possedere un bus a due canali ciascuno con velocità pari a 10 Mbps (i due canali possono essere utilizzati in modo ridondante, oppure, se si accetta di perdere questa opzione, in modo stand-alone, ottenendo in questo caso una velocità aggregata pari a 20 Mbps), è basato su un protocollo di tipo TDMA (Time Division Multiple Access) in grado di assicurare il determinismo, e possiede caratteristiche di robustezza ai guasti (fault-tolerance). La tolleranza ai guasti viene attuata sia attraverso l’utilizzo ridondato dei due bus, e sia, a livello fisico, ricorrendo all’utilizzo del Bus Guardian, un circuito autonomo in grado di rilevare interferenze causate da messaggi non sincronizzati con lo scheduling e proteggere in questo modo il canale riducendo la possibilità di collisioni sul bus. Infine, FlexRay fornisce supporto per l’impiego di layer fisico sia di tipo elettrico che ottico. FlexRay non intende comunque sostituirsi ai bus correntemente utilizzati nel settore automotive, ma piuttosto si pone l’obiettivo di integrarsi e cooperare con essi, anche se la tendenza per il futuro sarà probabilmente quella di un maggiore impiego del bus FlexRay rispetto ad altri bus: sistemi di frenata intelligente come il brake-by-wire sono già oggi di sponibili su alcuni modelli di autoveicoli di fascia alta e utilizzano il bus FlexRay.
LE CARATTERISTICHE DI FLEXRAY
Una rete FlexRay consiste in un insieme di unità di controllo elettroniche ECU (Electronic Control Unit) dotate di controllori di bus FlexRay in grado di gestire la comunicazione secondo il protocollo, come mostrato in figura 2.
In particolare, ogni controllore collega l’ECU ad uno o più canali di comunicazione tramite un bus driver il quale implementa il livello fisico e può includere opzionalmente un’unità “guardian” che regola gli accessi TDMA del controller. FlexRay supporta anche la ridondanza tramite l’utilizzo di due canali: nel caso di configurazione a singolo canale, tutti i controllori sono connessi al canale di comunicazione tramite una porta; nel caso invece di configurazione ridondante, i controllori possono essere collegati al canale di comunicazione tramite una oppure due porte. Nel secondo caso la ridondanza viene attuata trasmettendo contemporaneamente i dati su entrambi i canali e realizzando così un sistema fault-tolerant.
IL COMMUNICATION CYCLE
Il communication cycle (o semplicemente ciclo) rappresenta l’elemento basilare del sistema TDMA, ed è composto da un segmento statico, da un segmento dinamico, e da due segmenti di protocollo denominati rispettivamente “symbol window” e “network idle time” (si veda la figura 3).
I communication cycle vengono eseguiti in modo periodico dall’applicazione basata su FlexRay. La caratteristica principale del segmento statico è quella di contenere degli slot di durata prefissata: più precisamente, la durata ed il numero di tali slot viene determinato in fase di configurazione del controllore FlexRay (quindi quando il sistema è offline) e ciò garantisce che non vi sia competizione tra i controllori per l’accesso al bus. Ciascun slot è assegnato in modo esclusivo ad un controllore FlexRay per la trasmissione di un frame su un determinato canale, mentre sugli altri canali nello stesso slot i frame possono essere trasmessi da quel controllore oppure da altri controllori. L’assegnazione dei controllori che devono trasmettere in un certo slot viene eseguita in fase di configurazione dei parametri, e viene mantenuta localmente lato trasmissione, mentre i controllori in ricezione vengono solamente configurati per ricevere da uno specifico slot. Esiste inoltre la possibilità di assegnare un ID ad ogni frame, in modo tale che il ricevente possa filtrare i messaggi a cui è interessato sulla base di specifici valori di ID. Il segmento statico conferisce a FlexRay l’importante proprietà del determinismo, dal momento che è noto a priori quando un certo frame verrà trasmesso su un canale; per contro, il determinismo richiede di riservare staticamente a priori una certa ampiezza di banda. Il segmento dinamico ha una durata complessiva prefissata ed è suddiviso nei cosiddetti minislot. Un minislot ha una lunghezza fissa, inferiore a quella di uno slot statico, e non è di per sè sufficiente a contenere un frame; più precisamente, esso viene impiegato per indicare l’inizio della trasmissione di un frame nel segmento dinamico ed è assegnato in fase di configurazione ad un preciso controllore. Quando un controllore vuole trasmettere in un certo minislot, accede al bus ed inizia a trasmettere il frame; quest’operazione viene rilevata dagli altri controllori, che attendono il termine della trasmissione del frame (figura 4).
Se il controllore che possiede un minislot non ha nulla da trasmettere, questo rimane inutilizzato (non viene pertanto “espanso”), e si passa al minislot successivo. Occorre notare come i minislot con numerazione più bassa (cioè i primi), hanno priorità maggiore: se infatti questi vengono utilizzati dai rispettivi controllori per trasmettere dei frame, il numero di minislot disponibili successivamente sempre all’interno del segmento dinamico diminuisce, e quindi ci sarà meno banda disponibile per chi viene dopo. Inoltre, dal momento che un minislot viene espanso ed utilizzato solo se il suo controllore ha dati da trasmettere, ne consegue che in fase di configurazione occorre fare in modo che ciascun minislot sia configurato una volta sola nella rete. La symbol window è uno slot temporale di lunghezza prefissata nel quale vengono trasmessi simboli speciali, ovvero informazioni speciali utilizzate per la gestione della rete, quali ad esempio wakeup, startup, ed i simboli relativi agli allarmi. Il network idle time è una finestra temporale in cui non è viene trasmesso traffico sui canali di comunicazione, e viene utilizzato dai controllori per eseguire l’algoritmo di sincronizzazione del clock; ovviamente, si cerca di tenere il più possibile ridotta questa finestra, in modo tale da non sottrarre banda utile alla trasmissione dei dati. Si possono a questo punto identificare tre possibili configurazioni (si osservi la figura 5):
- configurazione statica pura: contiene solamente gli slot statici. Per permettere la sincronizzazione del clock, occorre che il numero minimo di tali slot sia pari a 2 (appartenenti a diversi controllori), mentre questi diventano 4 se si vuole garantire una sincronizzazione fault-tolerant;
- configurazione mista con un segmento statico ed uno dinamico;
- configurazione dinamica pura, in cui tutta la banda viene assegnata alla comunicazione dinamica, eccetto per un minimo di 2 slot statici comunque richiesti.
A livello pratico, la configurazione di gran lunga più diffusa è quella mista, con un rapporto medio di utilizzo della banda pari al 60%.
LA SINCRONIZZAZIONE DEL CLOCK
Un sistema di comunicazione distribuito come FlexRay necessita di un riferimento comune e consistente relativo al tempo. I clock dei controllori appartenenti alla rete, infatti, possono risentire delle variazioni della temperatura o della tensione di alimentazione, e comunque hanno delle tolleranze diverse derivanti dalla produzione. Questo è il motivo per cui è richiesto un meccanismo distribuito di sincronizzazione dei clock: non esiste un clock fisico di riferimento assoluto, ma ciascun nodo sincronizza il proprio tempo osservando i frame di sincronizzazione ricevuti da altri nodi. In ogni rete FlexRay sono infatti presenti almeno due nodi di sincronizzazione, i quali hanno la funzione di trasmettere un sync frame ogni ciclo, e questi frame sync vengono utilizzati da tutti i nodi (inclusi quelli stessi di sync) per controllare il proprio clock. Periodicamente, ogni nodo misura la deviazione del clock in termini di fase e frequenza e, se necessario, esegue un’opportuna correzione del clock: in pratica ogni nodo misura la differenza tra il tempo atteso di arrivo di ogni sync frame, ed il tempo effettivo in cui esso viene ricevuto. Il periodo dell’oscillatore locale del controllore viene denominato “tick”, e questo viene diviso tramite un divisore di frequenza hardware in modo tale da ottenere il cosiddetto “microtick”. Un numero intero di microtick forma poi un “macrotick”, e sia i minislot che gli slot statici vengono definiti come multipli dei macrotick. Sebbene il numero di microtick che compongono un macrotick sia una costante definita in fase di configurazione della rete, per eseguire la sincronizzazione dei clock è possibile aumentare o diminuire questo valore: se ad esempio un clock è troppo lento, si può aumentare il numero di microtick in modo tale da ottenere la stesso durata del macrotick (oppure, viceversa, diminuire il numero di microtick se il clock è troppo veloce). La filosofia che sta alla base di FlexRay è quella di rilevare i problemi non appena possibile, ma nello stesso tempo mantenere il controllore attivo il più a lungo possibile. A livello pratico ciò si traduce nel fatto che se vengono ricevuti dei frame non attesi oppure la sincronizzazione del clock non riceve un numero sufficiente di frame di sincronizzazione, il controllore si pone automaticamente in un modo degradato (cessa di trasmettere, ma mantiene attiva la funzionalità “passiva” di ricezione) e comunica il problema all’applicativo.
WAKEUP
Nella maggiorparte delle applicazioni automotive esiste la possibilità di mantenere le ECU in uno stato “sleeping”, corrispondente ad un assorbimento minimo di potenza. Per poter risvegliare la rete, occorre disporre pertanto di un afunzionalità di wakeup. Nella rete FlexRay esiste una ECU in grado di ricevere gli eventi che possono essere correlati alla funzione di wakeup: quando ciò avviene, essa trasmette sul bus un simbolo particolare, denominato WUP, alla ricezione del quale tutti i transceiver della rete iniziano un’operazione di power-on in modo tale da rendere completamente operativa la ECU. Il simbolo WUP non viene trasmesso se almeno un nodo della rete sta trasmettendo dei frame.
STARTUP
Lo startup avviene immediatamente dopo il wakeup, ed ha la funzione di consentire l’allineamento di tutti i nodi alla trasmissione TDMA. Si possono distinguere due tipi di startup:
- coldstart: corrisponde allo startup eseguito da tutti i controllori della rete;
- integration: si utilizza per re-integrare un singolo controllore, dopo il restart, in una rete con altri controllori già attivi.
In pratica quando un controllore deve eseguire uno startup, comincia a rilevare se, entro un certo lasso di tempo, è presente del traffico sul bus. In caso di assenza di traffico, esso esegue un coldstart e comincia a trasmettere il simbolo CAS e successivamente i frame di coldstart per un certo numero di cicli. Quando poi riceve risposta da un altro controllore, entra nello stato operativo. Se invece viene rilevato del traffico sul bus, il controllore entra nella modalità re-integrazione, nella quale si sincronizza con i frame ricevuti. Quando la sincronizzazione è completata, entra nello stato operativo.
FORMATO DEL FRAME
Il frame del protocollo FlexRay comprende tre sezioni (si osservi la figura 6):
- header - contiene informazioni di controllo come: synchronization frame flag, frame ID, null frame indicator, lunghezza del frame, e contatore dei cicli.
Le protocol flag sono invece cinque bit con il seguente significato:
- reserved bit: riservato per usi futuri, attualmente è fissato al valore 0;ù
- payload preamble indicator: nel caso di frame statico indica la presenza nel payload di un network management vector, mentre nel caso di frame dinamico indica la presenza nel payload di un message ID;
- nullframe indicator: se uguale a 0 indica l’assenza di dati nell’area payload sync frame indicator: se uguale a 1 indica che il frame è di tipo “sync”, utilizzato per la sincronizzazione dei clock startup frame indicator: viene posto a 1 per indicare un frame di startup;
- payload – contiene fino a 254 byte di area dati. Nel caso in cui questi siano assenti, viene impostato il null frame indicator; il null frame è pertanto un frame privo di payload data e viene tipicamente utilizzato per la funzionalità di sincronizzazione del clock o come indicatore di controllore “vivo”. Può inoltre essere presente un MessageID per differenziare i vari tipi di messaggi da inviare sul bus;
- trailer – contiene un CRC su 24 bit associato al frame da trasmettere.
TOPOLOGIA DELLA RETE
FlexRay supporta le principali topologie di rete: bus (figura 7), stella (figura 8), e stelle multiple (figura 9), oltre, ovviamente, alle combinazioni da queste derivate. Relativamente al discorso della topologia, occorre tenere presenti le seguenti raccomandazioni:
- i segmenti di rete utilizzati per i collegamenti punto-punto non devono avere lunghezza superiore a 24 metri;
- le giunzioni contribuiscono a ridurre l’integrità del segnale, per cui la lunghezza massima del segmento può ridursi in presenza di esse;
- in una rete vi possono essere fino ad un massimo di due stelle attive, e tra queste è consentito solo un collegamento puntopunto.
Occorre tenere bene in considerazione le parti di rete che si trovano nei punti dell’autovettura più facilmente danneggiabili in caso di incidente: questi tratti di rete devono infatti essere isolati dal resto tramite un accoppiatore a stella, in modo tale da non bloccare la rete completa in caso di danneggiamento parziale. Un accorgimento analogo deve essere adottato per i tratti di rete sottoposti ad elevata interferenza elettro-magnetica.
Tra le applicazioni tipiche del protocollo FlexRay rientrano i systemi X-by-Wire, in cui alcuni organi meccanici sono parzialmente o totalmente sostituiti da sistemi elettronici. Praticamente tutte le autovetture oggi hanno ad esempio un acceleratore elettronico (al posto del vecchio cavo), un circuito la cui uscita è funzione della posizione dell’acceleratore. Con il crescere dell’elettronica a bordo dei veicoli è fondamentale disporre di opportune procedure diagnostiche, in grado di rilevare solo gli errori reali e non i falsi allarmi.