sábado, 23 de enero de 2016

DIBUJO SEMESTRAL (5ª)

DIBUJO SEMESTRAL LINK

https://docs.google.com/presentation/d/1DNEoySZ0vAVqZ_8WDvewCynmucWBHxhrmbDFAQ6f-dI/edit?usp=sharing

viernes, 27 de noviembre de 2015

DIBUJO NOVIEMBRE

LINK:

https://docs.google.com/presentation/d/17SuejdMDLL0eS0Q73AUltkRt642oCazCO7m--DpMaxk/edit?usp=sharing

miércoles, 25 de noviembre de 2015

COMPUERTAS LOGICAS

COMPUERTAS LÓGICAS

Francisco Javier Moreno Rivas
NC; 828815
MK5

INDICE

·         INTRODUCCIÓN
·         OBJETIVO
·         Lógica Positiva 
·         Lógica Negativa
·         Compuertas Lógicas
·         Compuerta IF/ YES (SI)
·         Compuerta NOT (NO)
·         Compuerta AND (Y)
·         Compuerta OR (O)
·         Compuerta NAND (NO Y)
·         Compuerta NOR (NO O)
·         Compuerta XOR (O Exclusivo)
·         Compuerta NXOR (No O Exclusivo)
·         CONCLUSIÓN
·         BIBLIOGRAFÍA
·         RESUMEN
·         MAPA MENTAL

INTRODUCCIÓN:

Dentro de la electrónica digital, existe un gran número de problemas a resolver que se repiten normalmente. Por ejemplo, es muy común que al diseñar un circuito electrónico necesitemos tener el valor opuesto al de un punto determinado, o que cuando un cierto número de pulsadores estén activados, una salida permanezca apagada. Todas estas situaciones pueden ser expresadas mediante ceros y unos, y tratadas mediante circuitos digitales.
Los elementos básicos de cualquier circuito digital son las compuertas lógicas.
Hay disponible una gran variedad de compuertas estándar, cada una con un comportamiento perfectamente definido, y es posible combinarlas entre sí para obtener funciones nuevas.
Desde el punto de vista práctico, podemos considerar a cada compuerta como una caja negra, en la que se introducen valores digitales en sus entradas, y el valor del resultado aparece en la salida.
Cada compuerta tiene asociada una tabla de verdad, que expresa en forma de lista el estado de su salida para cada combinación posible de estados en la(s) entrada(s).
Si bien al pensar en la electrónica digital es muy común que asumamos que se trata de una tecnología relativamente nueva, vale la pena recordar que Claude E. Shannon experimento con relés e interruptores conectados en serie, paralelo u otras configuraciones para crear las primeras compuertas lógicas funcionales. En la actualidad, una compuerta es un conjunto de transistores dentro de un circuito integrado, que puede contener cientos de ellas. De hecho, un microprocesador no es más que un chip compuesto por millones de compuertas lógicas.
Veremos a continuación que símbolo se utiliza para cada compuerta, y su tabla de verdad.

OBJETIVO

La finalidad de este informe es dar a conocer los tipos de compuertas lógicas que existen, sus funciones y cuál es la importancia de ellas y su aplicación dentro del campo industrial.
Los circuitos combinacionales se construyen más frecuentemente con compuertas NAND y NOR en vez de AND y OR debido a que las primeras se conocen como compuertas universales, ya que cualquier sistema digital puede ser configurado empleando un solo tipo de compuerta: NAND o NOR.
Los circuitos secuenciales pueden también ser implementados utilizando un solo tipo de compuerta universal, ya que el flip-flop, el elemento de memoria más frecuentemente utilizado en los circuitos secuenciales, puede ser construido a partir de un solo tipo de compuerta universal con una interconexión especial entre las mismas.
La presente práctica tiene como objetivo ejercitar al estudiante en la implementación de funciones de Boole de tres formas diferentes: 1.- Con compuertas AND y OR, 2.- con compuertas NAND y 3.- con compuertas NOR.

Lógica Positiva 

En esta notación al 1 lógico le corresponde el nivel más alto de tensión (positivo, si quieres llamarlo así) y al 0 lógico el nivel más bajo (que bien podría ser negativo), pero que ocurre cuando la señal no está bien definida. Entonces habrá que conocer cuáles son los límites para cada tipo de señal (conocido como tensión de histéresis). 


Lógica Negativa

Aquí ocurre todo lo contrario, es decir, se representa al estado "1" con los niveles más bajos de tensión y al "0" con los niveles más altos.



Por lo general se suele trabajar con lógica positiva, y así lo haremos en este módulo, la forma más sencilla de representar estos estados es como se puede.

Las computadoras digitales utilizan el sistema de números binarios, que tiene dos dígitos 0 y 1. Un dígito binario se denomina un bit. La información está representada en las computadoras digitales en grupos de bits. Utilizando diversas técnicas de codificación los grupos de bits pueden hacerse que representen no solamente números binarios sino también otros símbolos discretos cualesquiera, tales como dígitos decimales o letras de alfabeto. Utilizando arreglos binarios y diversas técnicas de codificación, los dígitos binarios o grupos de bits pueden utilizarse para desarrollar conjuntos completos de instrucciones para realizar diversos tipos de cálculos.
La información binaria se representa en un sistema digital por cantidades físicas denominadas señales, Las señales eléctricas tales como voltajes existen a través del sistema digital en cualquiera de dos valores reconocibles y representan una variable binaria igual a 1 o 0. Por ejemplo, un sistema digital particular puede emplear una señal de 3 volts  para representar el binario "1" y 0.5 volts  para el binario "0". La siguiente ilustración muestra un ejemplo de una señal binaria.



La lógica binaria tiene que ver con variables binarias y con operaciones que toman un sentido lógico. La manipulación de información binaria se hace por circuitos lógicos que se denominan Compuertas.


Compuertas Lógicas

Son bloques de construcción básica de los sistemas digitales; operan con números binarios, por lo que se denominan puertas lógicas binarias.
En los circuitos digitales todos los voltajes, a excepción de las fuentes de alimentación se agrupan en dos posibles categorías: voltajes altos y voltajes bajos. Entre estos dos rangos de voltajes existe una denominada zona prohibida o de incertidumbre que los separa.
Una tensión alta significa un 1 bunario y una tensión baja significa un 0 binario.
Todos los sistemas digitales se construyen utilizando básicamente tres puertas lógicas básicas. Estas son las puertas AND, la puerta OR y la puerta NOT, o la combinación de estas.

Compuerta IF/ YES (SI)

La puerta lógica IF, llamada SI en castellano, realiza la función booleana de la igualdad. En los esquemas de un circuito electrónico se simboliza mediante un triángulo, cuya base corresponde a la entrada, y el vértice opuesto la salida. Su tabla de verdad es también sencilla: la salida toma siempre el valor de la entrada. Esto significa que si en su entrada hay un nivel de tensión alto, también lo habrá en su salida; y si la entrada se encuentra en nivel bajo, su salida también estará en ese estado.
En electrónica, generalmente se utilizan compuertas IF como amplificadores de corriente (buffers en inglés), para permitir manejar dispositivos que tienen consumos de corriente elevados desde otros que solo pueden entregar corrientes más débiles.



Compuerta NOT (NO)

Esta compuerta presenta en su salida un valor que es el opuesto del que está presente en su única entrada. En efecto, su función es la negación, y comparte con la compuerta IF la característica de tener solo una entrada.
Se utiliza cuando es necesario tener disponible un valor lógico opuesto a uno dado. La figura muestra el símbolo utilizado en los esquemas de circuitos para representar esta compuerta, y su tabla de verdad.
Se simboliza en un esquema eléctrico en el mismo símbolo que la compuerta IF, con un pequeño círculo agregado en su salida, que representa la negación.




Compuerta AND (Y)

Con dos o más entradas, esta compuerta realiza la función booleana de la multiplicación.
Su salida será un “1” cuando todas sus entradas también estén en nivel alto. En cualquier otro caso, la salida será un “0”. El operador AND se lo asocia a la multiplicación, de la misma forma que al operador SI se lo asociaba a la igualdad.
En efecto, el resultado de multiplicar entre si diferentes valores binarios solo dará como resultado “1” cuando todos ellos también sean 1, como se puede ver en su tabla de verdad.
Matemáticamente se lo simboliza con el signo “x”.

Podemos pensar en esta compuerta como una lámpara, que hace las veces de salida, en serie con la fuente de alimentación y dos o más interruptores, cada uno oficiando de entrada. La lámpara se encenderá únicamente cuando todos los interruptores estén cerrados. En este ejemplo, el estado de los interruptores es “1” cuando están cerrados y 0 cuando están abiertos. La salida está en 1 cuando la lámpara está encendida, y en 0 cuando está apagada.


Compuerta OR (O)

La función booleana que realiza la compuerta OR es la asociada a la suma, y matemáticamente la expresamos como “+”.
Esta compuerta presenta un estado alto en su salida cuando al menos una de sus entradas también está en estado alto.
En cualquier otro caso, la salida será 0.
Tal como ocurre con las compuertas AND, el número de entradas puede ser mayor a dos.



Un circuito eléctrico equivalente a esta compuerta está compuesto por una lámpara conectada en serie con la alimentación y con dos o más interruptores que a su vez están conectados en paralelo entre si.
Nuevamente, los interruptores serían las entradas, y la lámpara la salida. Si seguimos las convenciones fijadas en el ejemplo visto al explicar la compuerta AND, tenemos que si ambos interruptores están abiertos (o en 0), la lámpara permanece apagada. Pero basta que cerremos uno o más de los interruptores para que la lámpara se encienda.


Compuerta NAND (NO Y)

Cualquier compuerta lógica se puede negar, esto es, invertir el estado de su salida, simplemente agregando una compuerta NOT que realice esa tarea. Debido a que es una situación muy común, se fabrican compuertas que ya están negadas internamente. Este es el caso de la compuerta NAND: es simplemente la negación de la compuerta AND vista anteriormente.
Esto modifica su tabla de verdad, de hecho la invierte (se dice que la niega) quedando que la salida solo será un 0 cuando todas sus entradas estén en 1.
El pequeño círculo en su salida es el que simboliza la negación. El número de entradas debe ser como mínimo de dos, pero no es raro encontrar NAND de 3 o más entradas.



Compuerta NOR (NO O)

De forma similar a lo explicado con la compuerta NAND, una compuerta NOR es la negación de una compuerta OR, obtenida agregando una etapa NOT en su salida.


Como podemos ver en su tabla de verdad, la salida de una compuerta NOR es 1 solamente cuando todas sus entradas son 0. Igual que en casos anteriores, la negación se expresa en los esquemas mediante un círculo en la salida. El número de entradas también puede ser mayor a dos.


Compuerta XOR (O Exclusivo)

La compuerta OR vista anteriormente realiza la operación lógica correspondiente al O inclusivo, es decir, una o ambas de las entradas deben estar en 1 para que la salida sea 1. Un ejemplo de esta compuerta en lenguaje coloquial seria “Mañana iré de compras o al cine”. Basta con que vaya de compras o al cine para que la afirmación sea verdadera. En caso de que realice ambas cosas, la afirmación también es verdadera. Aquí es donde la función XOR difiere de la OR: en una compuerta XOR la salida será 0 siempre que las entradas sean distintas entre sí. En el ejemplo anterior, si se tratase de la operación XOR, la salida seria 1 solamente si fuimos de compras o si fuimos al cine, pero 0 si no fuimos a ninguno de esos lugares, o si fuimos a ambos.



Esta característica hace de la compuerta XOR un componente imprescindible en los circuitos sumadores de números binarios, tal como los utilizados en las calculadoras electrónicas.

Compuerta NXOR (No O Exclusivo)

No hay mucho para decir de esta compuerta. Como se puede deducir de los casos anteriores, una compuerta
NXOR no es más que una XOR con su salida negada, por lo que su salida estará en estado alto solamente cuando sus entradas son iguales, y en estado bajo para las demás combinaciones posibles.



CONCLUSIÓN

Muchos sistemas de control tienen el propósito de activar o desactivar eventos, cuando se cumplen ciertas condiciones. La lógica combinatoria se refiere a la combinación de dos o más compuertas lógicas básicas para obtener determinadas funciones. Las compuertas lógicas son de suma importancia ya que son los bloques de construcción básicos de los circuitos electrónicos digitales.


BIBLIOGRAFÍA

1. M. Morris Mano, “Lógica Digital y Diseño de Computadores” , Editorial Dossat S.A.,
1982
2. System Technick, “Módulo DIGI-BOARD2 Descripción Técnica”
3. Víctor P. Nelson, H. Troy Nagle, Bill D. Carroll y J. David Irwin, “Análisis y Diseño de
Circuitos Lógicos Digitales”, Prentice-Hall Hispanoamericana, S.A., 1996


RESUMEN

Compuertas Lógicas

Son bloques de construcción básica de los sistemas digitales; operan con números binarios, por lo que se denominan puertas lógicas binarias.
En los circuitos digitales todos los voltajes, a excepción de las fuentes de alimentación se agrupan en dos posibles categorías: voltajes altos y voltajes bajos. Entre estos dos rangos de voltajes existe una denominada zona prohibida o de incertidumbre que los separa.
Una tensión alta significa un 1 binario y una tensión baja significa un 0 binario.
Todos los sistemas digitales se construyen utilizando básicamente tres puertas lógicas básicas. Estas son las puertas AND, la puerta OR y la puerta NOT, o la combinación de estas.

Compuerta IF/ YES (SI)

La puerta lógica IF, llamada SI en castellano, realiza la función booleana de la igualdad. En los esquemas de un circuito electrónico se simboliza mediante un triángulo, cuya base corresponde a la entrada, y el vértice opuesto la salida. Su tabla de verdad es también sencilla: la salida toma siempre el valor de la entrada. Esto significa que si en su entrada hay un nivel de tensión alto, también lo habrá en su salida; y si la entrada se encuentra en nivel bajo, su salida también estará en ese estado.
En electrónica, generalmente se utilizan compuertas IF como amplificadores de corriente (buffers en inglés), para permitir manejar dispositivos que tienen consumos de corriente elevados desde otros que solo pueden entregar corrientes más débiles.

Compuerta NOT (NO)

Esta compuerta presenta en su salida un valor que es el opuesto del que está presente en su única entrada. En efecto, su función es la negación, y comparte con la compuerta IF la característica de tener solo una entrada.
Se utiliza cuando es necesario tener disponible un valor lógico opuesto a uno dado. La figura muestra el símbolo utilizado en los esquemas de circuitos para representar esta compuerta, y su tabla de verdad.
Se simboliza en un esquema eléctrico en el mismo símbolo que la compuerta IF, con un pequeño círculo agregado en su salida, que representa la negación.

Compuerta AND (Y)

Con dos o más entradas, esta compuerta realiza la función booleana de la multiplicación.
Su salida será un “1” cuando todas sus entradas también estén en nivel alto. En cualquier otro caso, la salida será un “0”. El operador AND se lo asocia a la multiplicación, de la misma forma que al operador SI se lo asociaba a la igualdad.
En efecto, el resultado de multiplicar entre si diferentes valores binarios solo dará como resultado “1” cuando todos ellos también sean 1, como se puede ver en su tabla de verdad.
Matemáticamente se lo simboliza con el signo “x”.

Compuerta OR (O)

La función booleana que realiza la compuerta OR es la asociada a la suma, y matemáticamente la expresamos como “+”.
Esta compuerta presenta un estado alto en su salida cuando al menos una de sus entradas también está en estado alto.
En cualquier otro caso, la salida será 0.
Tal como ocurre con las compuertas AND, el número de entradas puede ser mayor a dos.

Compuerta NAND (NO Y)

Cualquier compuerta lógica se puede negar, esto es, invertir el estado de su salida, simplemente agregando una compuerta NOT que realice esa tarea. Debido a que es una situación muy común, se fabrican compuertas que ya están negadas internamente. Este es el caso de la compuerta NAND: es simplemente la negación de la compuerta AND vista anteriormente.
Esto modifica su tabla de verdad, de hecho la invierte (se dice que la niega) quedando que la salida solo será un 0 cuando todas sus entradas estén en 1.
El pequeño círculo en su salida es el que simboliza la negación. El número de entradas debe ser como mínimo de dos, pero no es raro encontrar NAND de 3 o más entradas.

Compuerta NOR (NO O)

De forma similar a lo explicado con la compuerta NAND, una compuerta NOR es la negación de una compuerta OR, obtenida agregando una etapa NOT en su salida.
Como podemos ver en su tabla de verdad, la salida de una compuerta NOR es 1 solamente cuando todas sus entradas son 0. Igual que en casos anteriores, la negación se expresa en los esquemas mediante un círculo en la salida. El número de entradas también puede ser mayor a dos.

Compuerta XOR (O Exclusivo)

La compuerta OR vista anteriormente realiza la operación lógica correspondiente al O inclusivo, es decir, una o ambas de las entradas deben estar en 1 para que la salida sea 1. Un ejemplo de esta compuerta en lenguaje coloquial seria “Mañana iré de compras o al cine”. Basta con que vaya de compras o al cine para que la afirmación sea verdadera. En caso de que realice ambas cosas, la afirmación también es verdadera. Aquí es donde la función XOR difiere de la OR: en una compuerta XOR la salida será 0 siempre que las entradas sean distintas entre sí. En el ejemplo anterior, si se tratase de la operación XOR, la salida seria 1 solamente si fuimos de compras o si fuimos al cine, pero 0 si no fuimos a ninguno de esos lugares, o si fuimos a ambos.
Esta característica hace de la compuerta XOR un componente imprescindible en los circuitos sumadores de números binarios, tal como los utilizados en las calculadoras electrónicas.

Compuerta NXOR (No O Exclusivo)

No hay mucho para decir de esta compuerta. Como se puede deducir de los casos anteriores, una compuerta
NXOR no es más que una XOR con su salida negada, por lo que su salida estará en estado alto solamente cuando sus entradas son iguales, y en estado bajo para las demás combinaciones posibles.


 MAPA MENTAL




miércoles, 28 de octubre de 2015

FLEXRAY

EL PROTOCOLO FLEXRAY

Francisco Javier Moreno Rivas
MK5
N.C. 828815
-Objetivo 
-Introducción.
1. Capa física
1.1. Arquitectura de un nodo
1.2. Topologías de red.
1.2.1. Topologías básicas
1.2.1.1 Linear passive bus
1.2.1.2 Topologías con Active Stars
1.2.2. Topologías híbridas
1.3. Morfología de datos a nivel físico
1.3.1. Datos a nivel eléctrico.
1.3.2. Datos a nivel lógico.
1.3.3 Trama física
1.4. Algoritmos Majority Voting y de Bit Strobing.
1.4.1 Majority Voting
1.4.2. Bit Strobing
1.5. Concepto de Active Star.
1.6. Concepto de Bus Guardian.
2 Capa lógica
2.1. Protocol Operation Control (POC)
2.1.1 Coding and decoding
2.1.1.1 Channel idle detection
2.1.2. Frame and Symbol Processing
2.1.3. Media Acces Control
2.1.3.1. Unidades de tiempo en Flexray
2.1.4. Clock Synchronization
2.1.4.1. Clock Synchronization Process.
2.1.4.2. Macrotick Generation Process
2.2. Wake Up del Bus Flexray
2.3. Startup del bus Flexray
-Conclusión
-Bibliografía
-Resumen
-Mapa mental


OBJETOVO

El objetivo de este informe es dar a conocer el funcionamiento, la estructura, ventajas y desventajas de utilizar el protocolo Flexray. Todo esto nos servirá a personas que nos desarrollamos en el área automotriz, ya que hoy en dia este protocolo tiene suma importancia en marcas tan importantes como son Audi, BMW y Volkswagen. Y al paso en que va creciendo la tecnología es solo cuestión de tiempo par que más marcas comiencen a utilizar el protocolo ya antes dicho.


INTRODUCCIÓN

FlexRay es un nuevo protocolo de comunicaciones para buses de datos en el automóvil actualmente en desarrollo por el consorcio "FlexRay". Se considera más avanzado que el CAN y el MOST en lo relativo al precio y a las prestaciones.
El BMW X5 fue el primer coche del mercado en aplicar el sistema FlexRay. El FlexRay es un nuevo estándar para la transmisión de datos de forma eficiente, rápida y segura. El X5 hace uso de este estándar para la transmisión de datos entre una centralita central y 4 centralitas satélites colocadas en los amortiguadores. Con este sistema se permite una reacción y equilibrio extremadamente rápido a baches o agujeros en el camino. La tecnología FlexRay se esta asentando en la industria del autómovil (BMW, Audi, Volkswagen).

1. Capa física
En este apartado vamos a describir los puntos más importantes y relevantes de la capa física del protocolo Flexray.
1.1. Arquitectura de un nodo
Un nodo Flexray está formado esencialmente por un microcontrolador, un periférico llamado Communication Controller, 2 transceivers y una fuente de alimentación.
El microcontrolador es el propio de la ECU, el cual seguramente realiza otras funciones externas propias de la ECU y que cada cierto tiempo envía y recibe una trama de información al bus Flexray. Para ello se comunica con el Communication Controller (CC), que no es más que un periférico hardware que gestiona en todo momento el protocolo. Es decir, el microcontrolador no se encarga de la pila del protocolo, si no que lo gestiona todo el CC.
Así pues, el CC se comunica a su vez con los transceivers que se encargan de transformar los datos lógicos a niveles eléctricos de Bus. Flexray dispone de 2 canales de comunicación, lo que requiere un transceiver para cada canal.
Entre los diferentes bloques mencionados existen líneas optativas de señalización para determinadas situaciones. Esto será explicado más adelante con más detalle.
Por tanto el hardware que se espera de un nodo o ECU responde al siguiente esquema:

Fig. 2.1 Arquitectura hardware de un nodo Flexray

1.2. Topologías de red.
Flexray permite un amplio abanico de topologías de red. El hecho de tener 2 canales independientes aporta además otro grado de libertad, pudiendo hacer para cada canal una configuración de nodos diferente.
La interconexión básica entre dos nodos responde al siguiente esquema:


Fig. 2.2 Interconexión básica entre dos nodos Flexray


Como podemos apreciar, es similar a cualquier protocolo diferencial como podría ser CAN. En el capítulo 3 entraremos en más detalle en el hardware asociado a la terminación de los nodos.
En el caso que conectemos más nodos podemos hacerlo de manera pasiva o de manera activa. Veamos antes de empezar a ver diferentes ejemplos de topologías otro elemento de red importante en Flexray como es el Active Star. El siguiente esquema nos da una idea:




Fig. 2.3 Interconexión básica usando Active Stars
Como vemos, podemos asociar el concepto de Active Star (AS) al de un hub repetidor de bus. En el apartado 2.1.5. se describe el concepto de AS con más detalle.
Así pues combinando estos elementos entre sí y para cada canal obtenemos una flexibilidad substancial de crear diferentes topologías de red, ya sean básicas o híbridas.
Para cada una de ellas existen algunas limitaciones que hay que cumplir para el correcto funcionamiento del bus tales como longitud máxima del bus, número máximo de stubs, número máximo de Active Stars... Estos parámetros son típicos de todos los buses y tienen como causa principal los retardos que se producen en el bus.

1.2.1. Topologías básicas

1.2.1.1 Linear passive bus

Es la topología más básica y una de las más usadas. Se puede apreciar como es posible que un nodo se conecte a los dos canales (por ejemplo en el caso que este nodo representara una función crítica del sistema) mientras que otros nodos se conectan a uno de los dos canales.
Las limitaciones más importantes a tener en cuenta en esta topología son: Longitud del bus
24m
Número máximo de nodos conectados al bus mediante stubs
22
Mínima distancia entre stubs
15cm

Tabla 2.1. Limitaciones de la topología linear passive bus




Fig. 2.4 Topología linear passive bus
Cabe recalcar que existe una variante del Passive Bus que es la Passive Star la cual tiene las mismas limitaciones que el anterior. Eso sí se limita el uso de la Passive Star a un máximo de 1 ‘splice’ (empalme). La idea de la Passive Star es que todos los nodos se unen en un solo punto. Veamos un ejemplo:


Fig. 2.5 Topología Passive Star

1.2.1.2 Topologías con Active Stars

Estas topologías hacen uso del elemento repetidor Active Star. Este elemento de bus es capaz de desacoplar eléctricamente las diferentes ramas a las cual está conectado, además de regenerar la señal aunque por otro lado introduce retardos. Se les puede dotar de cierta inteligencia consiguiendo un ruteado del mensaje, todo y que esto acumularía aún más retardo. También pueden desconectar una rama de la red si detectan un mal funcionamiento. Las limitaciones en este caso son:
Distancia máxima de un nodo al Active Star
24m
Longitud máxima entre dos AS
24m
Número máximo de AS en cascada
2

Tabla 2.2. Limitaciones de las topologías con Active Stars

Fig. 2.6 Topología clásica con Active Stars

Fig. 2.7 Topología custom con Active Stars

1.2.2. Topologías híbridas

Es posible crear una red a base de la unión de topologías básicas, todo y que no es muy recomendable ya que son topologías no estándar y poco probadas. En estos casos, las limitaciones son una mezcla de las topologías básicas que entrañe. La gran ventaja de estas topologías es su versatilidad.


Fig. 2.8 Topología híbrida bus Flexray

1.3. Morfología de datos a nivel físico

Flexray es un bus diferencial, lo que quiere decir que se basa en la diferencia de señales del bus para determinar el dato enviado. Las salidas del transceiver son BP y BM y la información relativa uBus = BP-BM.
El transceiver es el encargado de gestionar la trama lógica que le llega del Communication Controller y traducirla a los niveles eléctricos correspondientes del bus y viceversa.

1.3.1. Datos a nivel eléctrico.

Los diferentes símbolos que podemos encontrar en el bus son:

Fig. 2.9 Símbolos a nivel eléctrico del bus Flexray


Idle_LP: Estado del bus en baja energía cuando no circula corriente por el mismo y el transceiver fuerza un 0 a la salida.

Idle: Estado del bus cuando no circula corriente por el bus pero el transceiver fuerza un determinado voltaje para BP y BM.
Data_1: La información lógica 1 se traduce a una diferencia positiva entre BP y BM (uBus>0)
Data_0: La información lógica 1 se traduce a una diferencia negativa entre BP y BM (uBus<0)

Los estados Idle_LP y Idle sirven para determinar que el canal está libre. Más adelante, veremos como se gestiona este aspecto ya que en ello intervienen elementos de protocolo de capa superior. Además de estos estados, por el Bus pueden circular lo que en el protocolo Flexray se llaman Símbolos y que realizan funciones especificas. Los veremos en el siguiente apartado.

1.3.2. Datos a nivel lógico.

El transceiver traduce de niveles eléctricos a niveles lógicos en ambos sentidos. Para eso, dispone de una entrada Vdig (Voltaje digital) para adecuarse a la tensión de operación del CC. Veámoslo en el siguiente ejemplo:  

Fig. 2.10 Símbolos lógicos del bus Flexray
Si la diferencia entre BP y BM (uBus) es positiva se traducirá como un uno lógico mientras que si es negativa en un cero lógico. Si detecta el bus libre (uBus cercano a 0) lo traducirá como un uno lógico. Una capa superior será la responsable de interpretar esta información. Finalmente, el tiempo de bit dependerá de la velocidad a la que esté transmitiendo los datos, que en el caso de Flexray puede ser de 1 a 10Mbps.
Además de éstos, existen en Flexray 3 símbolos especiales:
WUS (Wake Up Symbol): Sirve para despertar los nodos de una red. Morfológicamente es una sucesión de ceros determinada seguida de otra de unos. Los Wake Up Symbols suelen ir en secuencias de Wake Up Patterns. Su función la describiremos más adelante cuando hablemos de la capa lógica Flexray. Veamos su morfología:



Fig. 2.11 Wake Up Pattern formado por 2 Wake Up Symbols


MTS (Media Access Test Symbol): Este símbolo sirve para realizar procesos de depuración y su morfología es la misma que el WUS.
CAS (Collision Avoidance Symbol): Sirve para sincronizar una red y evitar colisiones en la fase de establecimiento de la conexión. Su morfología es un conjunto de ceros seguidos durante un tiempo determinado. Veremos su función cuando hablemos de la capa lógica del protocolo.

Fig. 2.12 CAS (Collision Avoidance Symbol)

1.3.3 Trama física

La trama Física en Flexray sigue la siguiente morfología:

Fig. 2.13 Trama física del bus Flexray

TSS (Transmission Start Sequence): Antes de iniciar la comunicación se inserta un periodo de ceros determinado de manera de aviso al resto de nodos. La TSS es un parámetro importante, sobre todo en el uso de Active Stars, ya que les ayuda a configurar sus entradas y salidas antes de iniciar la comunicación.
FSS (Frame Start Sequence): Posteriormente a la TSS se inserta un bit a 1 para compensar posibles errores de cuantización.
BSS (Byte Start Sequence): Al principio de cada Byte enviado se inserta un 1 lógico seguido de un 0. Esto nos sirve para sincronizar así como también nos ayuda a determinar si el canal está libre o se están enviando datos.
Cuando el canal está libre, el receptor lo interpreta como un seguido de unos. Si una capa superior detecta que hay muchos unos seguidos determinará que el canal está libre, ya que en el caso contrario cada 8 unos seguidos se tendría que encontrar forzadamente un cero debido al BSS.
FES (Frame End Sequence): Es el indicador de final de trama. Como veremos en la capa lógica del protocolo, en Flexray existen tramas estáticas y tramas dinámicas con longitud variable. En el caso de que la trama sea dinámica, se añade posteriormente al FES lo que se denomina el DTS (Dynamic Trailing Sequence) y que sirve para evitar una prematura detección de canal libre.

Los datos pues se envían denotando el principio de trama, el final y en grupos de Bytes empezando por el MSB (Most significant bit) y acabando en el LSB (Least significant bit).
Finalmente, veamos algunas capturas de tramas reales del Bus para apreciar con más detalle toda esta información:
En esta captura podemos apreciar una trama estática clásica perteneciente a la línea BP. Empieza con un TSS y cada 8 bits se incluye un BSS. Finalmente acaba en un FES. Podemos apreciar también los niveles eléctricos. Vidle= 2.5V y BP varía entre máximo y mínimo 1200mV.

Fig. 2.14 Trama estática del bus Flexray


En esta otra trama podemos apreciar el final de trama con el FES y como después, al cabo de un número prefijado de unos se queda el canal libre.

Fig. 2.15 Detalle del final de una trama estática Flexray
Finalmente, vemos en este caso una trama dinámica y como justo después del FES encontramos el DTS que evita que el canal quede libre prematuramente.


Fig. 2.16 Detalle del final de una trama dinámica Flexray
En el anexo 1 “Capturas y estadísticas del bus Flexray” se pueden encontrar un gran conjunto de capturas interesantes del bus.

1.4. Algoritmos Majority Voting y de Bit Strobing.

Las señales eléctricas del bus son traducidas a niveles lógicos por el transceiver y éste los envía al CC. Para muestrear correctamente estos datos y evitar errores el CC efectúa dos operaciones importantes antes de pasar los datos a una capa superior: son el Majority Voting i el Bit Strobing.

1.4.1 Majority Voting

Su funcionamiento es sencillo de entender. Como su propio nombre indica se basa en una votación por mayoría.


Fig. 2.17 Funcionamiento del algoritmo Majority Voting
El CC toma 8 muestras por cada bit proveniente del transceiver. En una ventana de 5 muestras guarda los últimos resultados y la salida zVotedVal es igual a la mayoría de unos o ceros acumulado en la ventana en ese momento.
Esto tiene 2 consecuencias. Sí que es cierto que introducimos un retardo de 3 muestras a la salida. No obstante, el beneficio es grande. Gracias a este método se eliminan glitches de hasta 2 muestras de duración, haciendo pues la señal más robusta.

1.4.2. Bit Strobing

Una vez los datos han pasado por el mecanismo de Majority Voting, pasan al mecanismo de Bit Strobing. Su función es la de sincronizarse con la trama de entrada y muestrear en el instante óptimo de muestreo.


Fig. 2.18 Funcionamiento del algoritmo Bit Strobing


El CC tiene un contador de muestreo que cuenta en módulo 8. Parece lógico e intuitivo pensar en que de las 8 muestras que toma de cada bit que le llega, el instante óptimo de muestreo esté en la 4 o 5 posición, asegurando así que un pequeño jitter no produzca un muestreo erróneo.
Otro punto a considerar es la sincronización del contador para que empiece a contar al inicio del bit. Así pues, en cada flanco de bajada se resetea este contador. Como hemos comentado anteriormente, la trama física Flexray tiene cada 8 bits un BSS el cual fuerza un flanco de bajada. De esta manera al inicio de cada bit se resetia el contador y se toma la 5 muestra a partir de ese momento. Ésta será la muestra que se pasará a la capa superior.
1.5. Concepto de Active Star.
En el apartado 1.2.1. (Topologías de red) hemos visto por encima las Active Star. En concreto hemos visto como podemos crear una red con elementos activos funcionando como repetidores. Esto implica 2 ventajas esenciales:
• Aislamos las diferentes ramas de bus conectadas a la estrella, con lo que si se genera un fallo en una rama no se transmite al resto de ramas.
• Regenera la señal eléctrica.

Los dos principales inconvenientes serían:
• Estos elementos introducen retardos.
• Supone un coste extra de hardware y de espacio.

Así pues, todo dependerá de la solución requerida en cada caso.
Otro aspecto importante es que las Active Star pueden incorporar o no un CC. Es decir, podemos encontrar que un nodo se comportara como Active Star. Esto dotaría de este elemento de red de una cierta inteligencia, pagando el precio de un elevado retardo. Veamos una solución usando esta idea:

Fig. 2.19 Arquitectura hardware de una Active Star usando un CC
Otra solución sin CC es la que propone Phillips con su transceiver TJA1080. Su gran ventaja es la facilidad de uso.




Fig. 2.20 Arquitectura hardware de una Active Star sin CC
Como vemos, el transceiver incorpora unos pines llamados TRXD0 y TRXD1 los cuales uniéndolos con los del resto de transceivers forman la Active Star.

1.6. Concepto de Bus Guardian.

Antes de nada hay que comentar, que el concepto de Bus Guardian aún está en desarrollo.
La idea es la de aportar otro elemento de red al bus Flexray con la intención de incrementar su condición de “Fault-Tolerant”. Su función es la de permitir transmitir al resto del bus única y exclusivamente al nodo que tiene programado en su memoria como que le toca enviar en ese preciso instante. La memoria del Bus Guardian, pues, se ha de programar en tiempo de diseño.

El Bus Guardian se concibe pues como un elemento de red dotado de cierta inteligencia que aporta seguridad y protección contra fallos como podrían ser babbling idiot o cortocircuitos en el bus.
Está pensado exclusivamente para aplicaciones muy críticas. Tanto es así, que podríamos programar el Bus Guardian de manera que sólo protegiera determinadas tramas que nos interesaran por diseño. Veamos un esquema de red integrando un Bus Guardian

Fig. 2.21 Arquitectura de red usando un Bus Guardian


Como vemos haría falta un BG por canal. Para poder hacer estas funciones, el BG debe de estar sincronizado con el protocolo, con lo cual necesitará un reloj propio y incorporar capas superiores a la física en su pila.

2.2 Capa lógica

La capa lógica del protocolo está gestionada por el CC. Encima de la capa lógica encontraríamos la capa de aplicación controlada por el uC de la ECU.
Por ejemplo, en un sistema de Brake-by-Wire, el uC de la ECU gestionaría los sensores que determinarían la posición de frenado, las máquinas de estados que determinarían el flujo del programa y la información que hay que enviar al CC (por SPI o bus paralelo) para que llegue a través de FLEXRAY a la ECU que controla el sistema de actuadores.
Es decir, el uC se abstrae totalmente de la gestión del protocolo Flexray, cuya misión recae en el CC. A la máquina de estados principal del CC se le llama POC (Protocol Operation Control) y es la que controla los procesos más importantes de Flexray. En este capítulo estudiaremos estos procesos y veremos los mecanismos que dispone Flexray para despertar la red (Wake Up) y para comenzar la comunicación (Start UP).

2.1. Protocol Operation Control (POC)

El POC es la máquina de estados principal del protocolo. Decide en todo momento en qué estado se encuentra el protocolo y reacciona a las órdenes del uC realizando los cambios necesarios en los siguientes subprocesos, llamados “core mechanisms”:
• Coding and Decoding
• Frame and Symbol processing
• Media Access Control
• Clock Synchronization.

Inmediatamente después de recibir energía. El CC controller entra en el estado de POC OPERATIONAL y empieza a funcionar el POC. Lo podemos apreciar en el siguiente diagrama de estados:

Fig. 2.22 Máquina de estados del power on del POC
Una vez que el POC está operativo puede cambiar de estado debido a las órdenes que le lleguen del host o por condiciones de error detectadas en el protocolo. Veamos el diagrama de estados principal del POC y qué función desempeña cada estado

Fig. 2.23 Máquina de estados del POC
Default config: Estado por defecto al entrar en el POC. En este estado se inicializa la configuración por defecto.
Config: Estado de configuración. En este estado se entrará siempre que se requiera configurar de nuevo algún parámetro.
Ready: Estado por el cual hay que pasar para realizar una nueva configuración, así pues despertar el nodo si es necesario (wake up), o volver a iniciar la comunicación con la nueva configuración aplicada (startup)
Wakeup: Estado cuya función principal es despertar la red.
Startup: Estado cuya función principal es la de iniciar la comunicación en la red.
Normal active: Modo normal de operación en el cual hay comunicación fluida Flexray.
Normal passive: Estado al cual se llega si se detectan leves errores en la comunicación En caso de recuperarse de esos errores puede volver a pasar a normal active. En caso contrario, pasará al estado HALT.
Halt: Estado al que se llega si se detecta error grave en la comunicación, o por orden directa del host. Para volver a comunicarse, hará falta realizar de nuevo la secuencia de estados desde el inicio del POC.

A continuación describiremos los principales procesos controlados por el POC y que son llamados los “core mechanisms”, ya que son la base de FLEXRAY.

2.1.1 Coding and decoding

El subproceso Coding and decoding se encarga de realizar las funciones de Codificar y Decodificar las tramas. Forman parte de este proceso los mecanismos Majority Voting y Bit Strobing vistos en el apartado 2.1.4.1. y 2.1.4.2. para decodificar las tramas. Hay que añadir que la forma de codificarlas también lo vimos en el apartado 2.1.3.3.
Lo que vamos a ver a continuación son los campos a nivel lógico que conforman la trama Flexray.

Fig. 2.24 Trama lógica del bus Flexray
En un primer nivel podemos distinguir entre 3 bloques: Cabecera, Datos y CRC. Como vemos la trama puede variar entre 8 y 262 bytes.
El significado de los campos de cabecera es el siguiente:
Reserved bit: Bit reservado del protocolo para futuros usos.
Payload Preamble indicator: Sirve para indicar que los primeros bytes del segmento de datos también son de cabecera. Esto se usa para tareas de mantenimiento y gestión de la red o para indicadores en las tramas dinámicas.
Null Frame Indicator: Indica si la trama lleva datos o no. A veces, por ejemplo en tramas de sincronismo, se envía una trama para mantener el  sincronismo pero no lleva datos asociados. Cabe indicar que la situación contraria se puede dar. Es decir, se puede enviar una trama de sincronía que además contenga datos.
Sync Frame Indicator: Indica si la trama es de sincronismo. Estas tramas que sirven para sincronizar todos los nodos a la base de tiempos global de Flexray.
Startup Frame Indicator: Indica si es una trama de Startup. Es decir, si es una trama de inicio de comunicación. En el apartado 2.2.3. se describe su uso.
Frame ID: Identificador único de la trama asociado a un nodo. Define el slot en el cual se envía la trama.
Payload length: Define la longitud del campo de datos enviado con la trama.
Header CRC: CRC de cabecera. Sirve para agilizar el protocolo. Si un nodo detecta un error en el CRC de cabecera descarta directamente la trama.
Cycle Count: indica el ciclo de comunicación en el que nos encontramos.

2.1.1.1 Channel idle detection

Dentro del apartado coding and decoding cobra especial relevancia un subproceso llamado Channel idle detection el cual detecta si el canal está libre. Como comentamos en la capa física (apartado 2.1.3.2.), el Transceiver traducía los 3 símbolos eléctricos (1, 0 y libre) tan sólo a dos lógicos (1 y 0).
El mecanismo que usa Flexray para determinar si el canal está libre es contar el número de unos seguidos que se reciben y si pasa un determinado umbral, se considera el canal libre. Esto funciona ya que cualquier trama Flexray, lleva intercalado cada 8 bits un BSS (Byte Start Sequence) en el cual siempre hay un flanco descendiente, forzando un cero.

2.1.2. Frame and Symbol Processing

El proceso Frame and Symbol Processing, se encarga de recoger los datos de salida del “Coding and Decoding process”, comprobar errores tanto sintácticos, semánticos como de sincronización y en caso positivo pasar la información relevante al CHI (Controller Host Interface) para que el uC pueda leer el mensaje recibido.

2.1.3. Media Acces Control

El protocolo Flexray se basa en un ciclo de comunicación recurrente. Este ciclo está dividido en 4 segmentos:
Static Segment: El Static Segment está compuesto por slots de medida fija. Cada slot está asociado a una Frame ID. Por su parte cada Frame ID está asociada a un nodo, de manera que cada nodo sabe siempre en qué slot o slots le toca enviar. Este segmento es de carácter obligatorio y siempre se comporta igual. Es decir, las tramas estáticas siempre se envían.
Dynamic Segment: El Dynamic Segment está compuesto por dynamic slots la medida de los cuales es variable y se establece un orden de envío por prioridad de ID, similar al CAN. Es decir, si dos nodos en el segmento dinámico luchan por transmitir, ganará el de la ID más baja. Además el tamaño de la trama no es fijo, así que el primer nodo en coger el control del bus podría agotar el Dynamic Segment. Este segmento es de carácter opcional, a diferencia del estático.
Symbol Window: En el Symbol Window se pueden enviar los MTS para gestión de la red. Es de carácter opcional y raramente se usa.
Network Idle Time: Al final del ciclo se deja el canal un cierto tiempo libre para poder ajustar el tiempo de ciclo a la durada fija determinada. Este segmento es de carácter obligatorio.

En el siguiente diagrama se aprecian las diferentes posibilidades de configurar el ciclo de comunicación.



Fig. 2.25 Ciclo de comunicación básico del bus Flexray

2.1.3.1. Unidades de tiempo en Flexray

Flexray es un protocolo basado en una base de tiempos global. Con lo cual la gestión del tiempo es crítica para el acceso al medio. Por ello tiene diferentes unidades de tiempo:
Microtick: Unidad de tiempo básica dependiente el oscilador local de cada nodo.
Macrotick: Unidad de tiempo básica de la red. Todos los nodos tienen el mismo valor de Macrotick. Así pues si dos nodos tienen un oscilador local diferente tendrán diferente número de microticks por macrotick, pero al final el valor de macrotick será el mismo para todos.
Cycle: Es una unidad de tiempo propia de la red y es el tiempo del ciclo de comunicación medido en macroticks.

Para ver más clara la diferencia entre estos tres conceptos fijémonos en el siguiente diagrama:

Fig. 2.26 División del ciclo de comunicación Flexray en macroticks y microticks

Una vez visto los diferentes segmentos que forman el ciclo de Flexray y entendidas las unidades básicas de tiempo, veamos como está dividido un ciclo de comunicación en unidades de tiempo:


Fig. 2.27 División del ciclo de comunicación Flexray en segmentos, slots y macroticks
El Static Segment, está dividido en un número fijo de static slots que a su vez están formados por un número fijo de macroticks. Al inicio de cada Static Slot, el mecanismo ‘Clock Synchronization’ marca el instante en el cual ha se ha de empezar a transmitir ese slot. A este instante, se le llama Static Slot Action Point y es de vital importancia dada la naturaleza TDMA del protocolo.
En el Dynamic Segment ocurre algo parecido pero en este caso se habla de Dynamic Slots, formados por minislots y guiados por el Minislot Action point. Esta diferencia entre Static slots y minislots radica en que en el segmento dinámico las tramas no tienen por qué tener una medida estándar y cabe aprovechar al máximo las unidades de tiempo, reduciendo su duración en macroticks.
En el Symbol Window y el Network idle Time el tiempo se mide directamente en macroticks.

2.1.4. Clock Synchronization

Flexray es un protocolo determinístico basado en la división del tiempo en ranuras donde cada nodo sabe en qué ranura puede enviar y en cual no. Dada esta descripción, se puede entender la gran importancia de mantener todos los nodos sincronizados constantemente. De lo contrario, fácilmente un nodo no sincronizado podría al transmitir invadir la ranura del vecino y provocar un fallo general de comunicación. Es por eso, que el proceso Clock Synchronization cobra gran relevancia en el protocolo Flexray.
Todo y que cada nodo dispone de su propio oscilador, Flexray funciona con una base de tiempos global a nivel de red. Esto lo consigue gracias a las tramas de sincronismo que envían un mínimo de 2 nodos en una red de 2 ECUs o 3 en una red de 3 o más ECUs. Estos nodos, llamados Coldstart nodes, son muy importantes tanto en el inicio de la comunicación como en el sincronismo de la red. Suelen tener osciladores muy precisos y marcan el tiempo al cual se han de ir adaptando el resto de nodos.
La sincronización del reloj se basa en 2 subprocesos importantes:

2.1.4.1. Clock Synchronization Process.

El Clock Synchronization Process (CSP) recoge los valores de las tramas de sincronía enviadas por los diferentes Coldstart nodes de la red, los compara con los que él había predecido y hace una estimación del valor correcto. El resultado lo pasa al Macrotick Generation Process.

2.1.4.2. Macrotick Generation Process

El Macrotick Generation Process (MTG), como indica su nombre, es el encargado de generar el macrotick y del control de tiempos como el tiempo de ciclo o el tiempo de slot. Así pues, con los datos que le pasa el CSP, efectúa las correcciones necesarias para mantener el sincronismo del nodo:
·         Correcciones de Offset: Indica el número de microticks que hace falta añadir al NIT (Network idle Time) para que el ciclo de comunicación Flexray comience en el momento adecuado. Se calcula cada ciclo y se corrige en el NIT de los ciclos impares.
·         Correcciones de Rate: Indica el número de microticks por macrotick que hay que añadir (o substraer) para adecuarse al tiempo de ciclo. Se calcula en los ciclos impares y se aplica siempre.


Fig. 2.28 Correcciones de offset y de rate del CSP (Clock Synchronization Process)

2.2. Wake Up del Bus Flexray
En Flexray, como en otros muchos sistemas electrónicos, es posible encontrarnos con ECUs y transceivers en estado sleep como método de ahorro de energía. Por eso, antes de iniciar una comunicación Flexray, es necesario un procedimiento de Wake Up que despierte todos los nodos. Para que este procedimiento funcione, el mínimo requerimiento es que todos los Transceiversse encuentren alimentados, aunque se encuentren en estado de baja energía. Si esto sucede, el Transceiver que reciba una orden de WakeUp (un Wake Up pattern formado por una cadena de símbolos WakeUp) por uno de sus canales del bus podrá comunicarse directamente con su host y despertarlo. El host será responsable de determinar si el otro canal está dormido y en cuyo caso será responsable de despertarlo.
Un hecho importante a considerar es que está prohibido intentar despertar los dos canales a la vez, puesto que en caso que hubiera un nodo fallando podría perturbar los dos canales y impedir la comunicación Flexray.
Teniendo todo esto en cuenta veamos un ejemplo de como se despertaría una red de 4 nodos y dos canales:


Fig. 2.29 Flujo de secuencia del Wake Up del bus Flexray


Como vemos el nodo 4 sólo está conectado a un canal, en este caso el B. Esta situación se puede dar siempre que el nodo no sea crítico.
1. Siempre ha de haber un host que tome la iniciativa de iniciar la comunicación debido a un evento externo.
2. Se inicializa el CC con los parámetros de configuración deseados.
3. El host despierta sus dos transceivers (Canal A y Canal B)
4. El host lanza la orden al CC de que pase al estado de WakeUP. El CC genera un Wake-up pattern que es enviado al transceiver del canal A para que sea transmitido por el bus.

5. Todos los transceivers del canal A se despiertan por el wake-up pattern y a la vez despiertan a sus hosts.
6. Los hosts 2 y 3 de despiertan.
7. Los hosts 2 y 3 despiertan sus CCs y los inicializan.
8. Los hosts 2 y 3 chequean si los transceivers del Canal B se han despertado. En caso contrario los despiertan.
9. Una vez que los transceivers del canal B están despiertos, los hosts verifican que los 2 canales estén despiertos. Si el canal B no está despierto, dan la orden a sus CCs para que envíen un Wake-up pattern al canal B. Esto hace despertar los transceivers que no se habían despertado en ese canal.
10. El host del nodo 4, que sólo estaba conectado al Canal B es despertado.
11. El host del nodo 4 despierta a su CC.
Una vez que los 2 canales han sido despertados se puede empezar la fase de start-up, el establecimiento de la conexión Flexray. Es importante destacar que en la fase de Wake Up intervienen tanto transceivers, CC y host. Ninguno de estos puede efectuar el Wake-up por sí sólo.

2.3. Startup del bus Flexray

Una vez despertados los nodos con el procedimiento de Wake-up, el paso siguiente inmediato es el de Startup, con el objetivo de establecer la conexión sincronizando todos los nodos. Es el momento de introducir otro concepto, el Coldstart node.
Los nodos Coldstart, suelen ser los mismos que los nodos encargados de enviar las tramas de sincronía. De hecho, por obligación un nodo Coldstart ha de estar configurado para enviar tramas de sincronía. Al igual que pasaba con los Sync nodes, ha de haber un mínimo de 2 Coldstart nodes en una red de 2 nodos y un mínimo de 3 en una red de más nodos.
Los nodos Coldstart son los encargados de tomar la iniciativa en la fase de Startup. Distinguimos dos tipos: el Leading Coldstart node y el Following Coldstart node. En un principio todos los Coldstart nodes competirán por iniciar la comunicación pero sólo habrá uno que ganará y este será el Leading Coldstart node. El resto se convertirán automáticamente en Following Coldstart nodes. El mecanismo para asignar el Leading Coldstart node es el siguiente:
Todos los nodos Coldstart después del wake-up, enviarán un CAS (Collision Avoidance Symbol) al bus. El primero que envíe este símbolo será el Leading

Coldstart node. El resto, recibirán el CAS y interpretarán que ya hay un Leading Coldstart node.
El proceso de startup tiene una serie de fases. Veamos con un la ayuda de un diagrama ejemplo el funcionamiento:



Fig. 2.30 Cronograma de la fase de Start Up del bus Flexray


Partimos de una situación ficticia de 3 nodos, 2 son Coldstart y el otro no. (En realidad en una red de 3 nodos deberían ser los 3 Coldstart, el ejemplo sólo sirve para ilustrar el funcionamiento)
1. Los nodos vienen de ser despertados en la fase de Wake-up. Así pues, pasan al estado ready del POC y de allí los nodos Coldstart A y B toman la iniciativa.
2. El primer estado por el que pasan los nodos A y B es el Coldstart listen. En este estado han de escuchar el canal para ver si hay algún otro nodo Coldstart que haya enviado ya un CAS. Cuando al nodo A se le acaba el tiempo de espera y no ha recibido un CAS, envía un CAS al bus para que el resto de nodos sepan que ya hay un “Leading Coldstart node”. Así pues, el resto de nodos Coldstart tomarán el rol de Following Coldstart nodes. El nodo C no es Coldstart y por tanto no interviene de momento.
3. Una vez determinado el Leading Coldstart node, éste ha de tomar la iniciativa empezando a enviar tramas de start-up que son a la vez tramas de sincronía. El resto de nodos va sincronizándose conforme al nodo A. Al cabo de 4 tramas de start-up los nodos Following Coldstart nodes se integran en la red y empiezan a enviar también sus tramas de start-up.
4. Una vez, todos los Coldstart nodes están integrados, el resto de nodos se integran en la red pasando todos a normal active y pueden empezar a enviarse tramas de datos. Es importante notar que el nodo C no envía ninguna trama de sincronía, si no que con las tramas que han ido enviando los nodos Coldstart se ha ido sincronizando.
Finalmente, después de la fase de Wake-up y la fase de Start-up, ya tenemos la conexión Flexray entre todos los nodos operativa.

CONCLUSIÓN

El protocolo Flexray está llamado a ser el estándar de facto para las aplicaciones X-by-Wire en un futuro cercano. Si bien hoy la mayoría de ECUs del vehículo se comunican a través del bus CAN, en pocos años empezarán a convivir los dos buses. Su uso se irá incrementando poco a poco y con la posible llegada de los motores eléctricos al automóvil su inclusión puede ser muy importante.
Del estudio del bus Flexray se sacan conclusiones interesantes. Su carácter determinístico y su tolerancia a fallos permiten a los diseñadores abrir sus horizontes hacia el diseño electrónico de aplicaciones críticas del automóvil. El protocolo mantiene ciertas similitudes con CAN sobre todo en su capa física como son el carácter diferencial del mismo y las etapas de salida. Esto hace que el diseño hardware para un ingeniero experimentado en CAN no sea una gran dificultad teniendo en cuenta las pequeñas diferencias. A nivel lógico es bastante diferente, hecho que sí que reportará más trabajo al ingeniero de software.
De todas maneras, así como el controlador de CAN se ha acabado incorporando en la mayoría de microcontroladores de automoción, un hecho similar pasará con Flexray, simplificando así el diseño, el software y el ahorro de espacio y precio de la PCB.
El diseño de un prototipo ilustrativo de esta tecnología nos ha permitido experimentar el arranque de un bus nuevo, adquirir know-how de la tecnología y crear una aplicación de alto nivel basada en ella. Este hecho permite a la empresa FICOSA estar preparada para el día en que los clientes empiecen a demandar esta tecnología. Análogamente, los clientes que visiten el show-room de FICOSA podrán apreciar esta nueva tecnología y entender sus virtudes y las necesidades de seguridad que puede satisfacer.
Como líneas futuras de investigación, se pueden crear buses más complejos, con un número mayor de ECUs, incluyendo Active Stars o incluso Bus Guardians. Este hecho permitiría crear aplicaciones más complejas de alto nivel para sacar el máximo rendimiento al bus. El uso de la PCB-FLEXRAY aquí diseñada puede allanar el terreno gracias a su versatilidad para comunicarse con una gran cantidad de microcontroladores.


BIBLIOGRAFÍA
1.    Lorenz, Steffen (2010). "The FlexRay Electrical Physical Layer Evolution" (PDF). Automotive 2010. Retrieved 16 February 2015.
2.    "How FlexRay Works". Freescale Semiconductor. Retrieved 21 March 2014.
3.    Scoltock, James (1 December 2013). "Milestones: Flexray". Automotive Engineer. Retrieved 16 February 2015.
4.    Regler, Richard; Schlinkheider, Jörg; Maier, Markus; Prechler, Reinhard; Berger, Eduard; Pröll, Leo (2011). "Intelligent electrics / electronics architecture". ATZextra worldwide 15 (11): 246–251. doi:10.1365/s40111-010-0269-9 (inactive 15 June 2015).
5.    Davis, Matt (2 February 2010). "2011 Audi A8 4.2 FSI First Drive". Retrieved 16 February 2015.
6.    Scoltock, James (16 April 2013). "Mercedes-Benz E-Class". Automotive Engineer. Retrieved 16 February 2015.
7.    "FlexRay Introduction". Retrieved 16 February 2015.
8.    Hammerschmidt, Christoph (18 June 2010). "Beyond FlexRay: BMW airs Ethernet plans". EE Times. Retrieved 16 February 2015.


RESUMEN

1. Capa física
En este apartado vamos a describir los puntos más importantes y relevantes de la capa física del protocolo Flexray.
1.1. Arquitectura de un nodo
Un nodo Flexray está formado esencialmente por un microcontrolador, un periférico llamado Communication Controller, 2 transceivers y una fuente de alimentación.
El microcontrolador es el propio de la ECU, el cual seguramente realiza otras funciones externas propias de la ECU y que cada cierto tiempo envía y recibe una trama de información al bus Flexray. Para ello se comunica con el Communication Controller (CC), que no es más que un periférico hardware que gestiona en todo momento el protocolo. Es decir, el microcontrolador no se encarga de la pila del protocolo, si no que lo gestiona todo el CC.
Así pues, el CC se comunica a su vez con los transceivers que se encargan de transformar los datos lógicos a niveles eléctricos de Bus. Flexray dispone de 2 canales de comunicación, lo que requiere un transceiver para cada canal.
Entre los diferentes bloques mencionados existen líneas optativas de señalización para determinadas situaciones. Esto será explicado más adelante con más detalle.
Por tanto el hardware que se espera de un nodo o ECU responde al siguiente esquema:
1.2. Topologías de red.
Flexray permite un amplio abanico de topologías de red. El hecho de tener 2 canales independientes aporta además otro grado de libertad, pudiendo hacer para cada canal una configuración de nodos diferente.
La interconexión básica entre dos nodos responde al siguiente esquema:
Como podemos apreciar, es similar a cualquier protocolo diferencial como podría ser CAN. En el capítulo 3 entraremos en más detalle en el hardware asociado a la terminación de los nodos.
En el caso que conectemos más nodos podemos hacerlo de manera pasiva o de manera activa. Veamos antes de empezar a ver diferentes ejemplos de topologías otro elemento de red importante en Flexray como es el Active Star. El siguiente esquema nos da una idea:
Como vemos, podemos asociar el concepto de Active Star (AS) al de un hub repetidor de bus. En el apartado 2.1.5. se describe el concepto de AS con más detalle.
Así pues combinando estos elementos entre sí y para cada canal obtenemos una flexibilidad substancial de crear diferentes topologías de red, ya sean básicas o híbridas.
Para cada una de ellas existen algunas limitaciones que hay que cumplir para el correcto funcionamiento del bus tales como longitud máxima del bus, número máximo de stubs, número máximo de Active Stars... Estos parámetros son típicos de todos los buses y tienen como causa principal los retardos que se producen en el bus.

1.2.1. Topologías básicas

1.2.1.1 Linear passive bus

Es la topología más básica y una de las más usadas. Se puede apreciar como es posible que un nodo se conecte a los dos canales (por ejemplo en el caso que este nodo representara una función crítica del sistema) mientras que otros nodos se conectan a uno de los dos canales.
Cabe recalcar que existe una variante del Passive Bus que es la Passive Star la cual tiene las mismas limitaciones que el anterior. Eso sí se limita el uso de la Passive Star a un máximo de 1 ‘splice’ (empalme). La idea de la Passive Star es que todos los nodos se unen en un solo punto. Veamos un ejemplo:

1.2.1.2 Topologías con Active Stars

Estas topologías hacen uso del elemento repetidor Active Star. Este elemento de bus es capaz de desacoplar eléctricamente las diferentes ramas a las cual está conectado, además de regenerar la señal aunque por otro lado introduce retardos. Se les puede dotar de cierta inteligencia consiguiendo un ruteado del mensaje, todo y que esto acumularía aún más retardo. También pueden desconectar una rama de la red si detectan un mal funcionamiento. Las limitaciones en este caso son:

1.2.2. Topologías híbridas

Es posible crear una red a base de la unión de topologías básicas, todo y que no es muy recomendable ya que son topologías no estándar y poco probadas. En estos casos, las limitaciones son una mezcla de las topologías básicas que entrañe. La gran ventaja de estas topologías es su versatilidad.

1.3. Morfología de datos a nivel físico

Flexray es un bus diferencial, lo que quiere decir que se basa en la diferencia de señales del bus para determinar el dato enviado. Las salidas del transceiver son BP y BM y la información relativa uBus = BP-BM.
El transceiver es el encargado de gestionar la trama lógica que le llega del Communication Controller y traducirla a los niveles eléctricos correspondientes del bus y viceversa.

1.3.1. Datos a nivel eléctrico.

Los diferentes símbolos que podemos encontrar en el bus son:

Idle_LP: Estado del bus en baja energía cuando no circula corriente por el mismo y el transceiver fuerza un 0 a la salida.

Idle: Estado del bus cuando no circula corriente por el bus pero el transceiver fuerza un determinado voltaje para BP y BM.
Data_1: La información lógica 1 se traduce a una diferencia positiva entre BP y BM (uBus>0)
Data_0: La información lógica 1 se traduce a una diferencia negativa entre BP y BM (uBus<0)

Los estados Idle_LP y Idle sirven para determinar que el canal está libre. Más adelante, veremos como se gestiona este aspecto ya que en ello intervienen elementos de protocolo de capa superior. Además de estos estados, por el Bus pueden circular lo que en el protocolo Flexray se llaman Símbolos y que realizan funciones especificas. Los veremos en el siguiente apartado.

1.3.2. Datos a nivel lógico.

El transceiver traduce de niveles eléctricos a niveles lógicos en ambos sentidos. Para eso, dispone de una entrada Vdig (Voltaje digital) para adecuarse a la tensión de operación del CC. Veámoslo en el siguiente ejemplo:  
Si la diferencia entre BP y BM (uBus) es positiva se traducirá como un uno lógico mientras que si es negativa en un cero lógico. Si detecta el bus libre (uBus cercano a 0) lo traducirá como un uno lógico. Una capa superior será la responsable de interpretar esta información. Finalmente, el tiempo de bit dependerá de la velocidad a la que esté transmitiendo los datos, que en el caso de Flexray puede ser de 1 a 10Mbps.
Además de éstos, existen en Flexray 3 símbolos especiales:
WUS (Wake Up Symbol): Sirve para despertar los nodos de una red. Morfológicamente es una sucesión de ceros determinada seguida de otra de unos. Los Wake Up Symbols suelen ir en secuencias de Wake Up Patterns. Su función la describiremos más adelante cuando hablemos de la capa lógica Flexray. Veamos su morfología:



MTS (Media Access Test Symbol): Este símbolo sirve para realizar procesos de depuración y su morfología es la misma que el WUS.
CAS (Collision Avoidance Symbol): Sirve para sincronizar una red y evitar colisiones en la fase de establecimiento de la conexión. Su morfología es un conjunto de ceros seguidos durante un tiempo determinado. Veremos su función cuando hablemos de la capa lógica del protocolo.

1.3.3 Trama física

La trama Física en Flexray sigue la siguiente morfología:
TSS (Transmission Start Sequence): Antes de iniciar la comunicación se inserta un periodo de ceros determinado de manera de aviso al resto de nodos. La TSS es un parámetro importante, sobre todo en el uso de Active Stars, ya que les ayuda a configurar sus entradas y salidas antes de iniciar la comunicación.
FSS (Frame Start Sequence): Posteriormente a la TSS se inserta un bit a 1 para compensar posibles errores de cuantización.
BSS (Byte Start Sequence): Al principio de cada Byte enviado se inserta un 1 lógico seguido de un 0. Esto nos sirve para sincronizar así como también nos ayuda a determinar si el canal está libre o se están enviando datos.
Cuando el canal está libre, el receptor lo interpreta como un seguido de unos. Si una capa superior detecta que hay muchos unos seguidos determinará que el canal está libre, ya que en el caso contrario cada 8 unos seguidos se tendría que encontrar forzadamente un cero debido al BSS.
FES (Frame End Sequence): Es el indicador de final de trama. Como veremos en la capa lógica del protocolo, en Flexray existen tramas estáticas y tramas dinámicas con longitud variable. En el caso de que la trama sea dinámica, se añade posteriormente al FES lo que se denomina el DTS (Dynamic Trailing Sequence) y que sirve para evitar una prematura detección de canal libre.

Los datos pues se envían denotando el principio de trama, el final y en grupos de Bytes empezando por el MSB (Most significant bit) y acabando en el LSB (Least significant bit).
Finalmente, veamos algunas capturas de tramas reales del Bus para apreciar con más detalle toda esta información:
En esta captura podemos apreciar una trama estática clásica perteneciente a la línea BP. Empieza con un TSS y cada 8 bits se incluye un BSS. Finalmente acaba en un FES. Podemos apreciar también los niveles eléctricos. Vidle= 2.5V y BP varía entre máximo y mínimo 1200mV.
En esta otra trama podemos apreciar el final de trama con el FES y como después, al cabo de un número prefijado de unos se queda el canal libre.
Finalmente, vemos en este caso una trama dinámica y como justo después del FES encontramos el DTS que evita que el canal quede libre prematuramente.
En el anexo 1 “Capturas y estadísticas del bus Flexray” se pueden encontrar un gran conjunto de capturas interesantes del bus.

1.4. Algoritmos Majority Voting y de Bit Strobing.

Las señales eléctricas del bus son traducidas a niveles lógicos por el transceiver y éste los envía al CC. Para muestrear correctamente estos datos y evitar errores el CC efectúa dos operaciones importantes antes de pasar los datos a una capa superior: son el Majority Voting i el Bit Strobing.

1.4.1 Majority Voting

Su funcionamiento es sencillo de entender. Como su propio nombre indica se basa en una votación por mayoría.
El CC toma 8 muestras por cada bit proveniente del transceiver. En una ventana de 5 muestras guarda los últimos resultados y la salida zVotedVal es igual a la mayoría de unos o ceros acumulado en la ventana en ese momento.
Esto tiene 2 consecuencias. Sí que es cierto que introducimos un retardo de 3 muestras a la salida. No obstante, el beneficio es grande. Gracias a este método se eliminan glitches de hasta 2 muestras de duración, haciendo pues la señal más robusta.

1.4.2. Bit Strobing

Una vez los datos han pasado por el mecanismo de Majority Voting, pasan al mecanismo de Bit Strobing. Su función es la de sincronizarse con la trama de entrada y muestrear en el instante óptimo de muestreo.
El CC tiene un contador de muestreo que cuenta en módulo 8. Parece lógico e intuitivo pensar en que de las 8 muestras que toma de cada bit que le llega, el instante óptimo de muestreo esté en la 4 o 5 posición, asegurando así que un pequeño jitter no produzca un muestreo erróneo.
Otro punto a considerar es la sincronización del contador para que empiece a contar al inicio del bit. Así pues, en cada flanco de bajada se resetea este contador. Como hemos comentado anteriormente, la trama física Flexray tiene cada 8 bits un BSS el cual fuerza un flanco de bajada. De esta manera al inicio de cada bit se resetia el contador y se toma la 5 muestra a partir de ese momento. Ésta será la muestra que se pasará a la capa superior.
1.5. Concepto de Active Star.
En el apartado 1.2.1. (Topologías de red) hemos visto por encima las Active Star. En concreto hemos visto como podemos crear una red con elementos activos funcionando como repetidores. Esto implica 2 ventajas esenciales:
• Aislamos las diferentes ramas de bus conectadas a la estrella, con lo que si se genera un fallo en una rama no se transmite al resto de ramas.
• Regenera la señal eléctrica.

Los dos principales inconvenientes serían:
• Estos elementos introducen retardos.
• Supone un coste extra de hardware y de espacio.

Así pues, todo dependerá de la solución requerida en cada caso.
Otro aspecto importante es que las Active Star pueden incorporar o no un CC. Es decir, podemos encontrar que un nodo se comportara como Active Star. Esto dotaría de este elemento de red de una cierta inteligencia, pagando el precio de un elevado retardo. Veamos una solución usando esta idea:
Otra solución sin CC es la que propone Phillips con su transceiver TJA1080. Su gran ventaja es la facilidad de uso.
Como vemos, el transceiver incorpora unos pines llamados TRXD0 y TRXD1 los cuales uniéndolos con los del resto de transceivers forman la Active Star.

1.6. Concepto de Bus Guardian.

Antes de nada hay que comentar, que el concepto de Bus Guardian aún está en desarrollo.
La idea es la de aportar otro elemento de red al bus Flexray con la intención de incrementar su condición de “Fault-Tolerant”. Su función es la de permitir transmitir al resto del bus única y exclusivamente al nodo que tiene programado en su memoria como que le toca enviar en ese preciso instante. La memoria del Bus Guardian, pues, se ha de programar en tiempo de diseño.

El Bus Guardian se concibe pues como un elemento de red dotado de cierta inteligencia que aporta seguridad y protección contra fallos como podrían ser babbling idiot o cortocircuitos en el bus.
Está pensado exclusivamente para aplicaciones muy críticas. Tanto es así, que podríamos programar el Bus Guardian de manera que sólo protegiera determinadas tramas que nos interesaran por diseño. Veamos un esquema de red integrando un Bus Guardian
Como vemos haría falta un BG por canal. Para poder hacer estas funciones, el BG debe de estar sincronizado con el protocolo, con lo cual necesitará un reloj propio y incorporar capas superiores a la física en su pila.

2.2 Capa lógica

La capa lógica del protocolo está gestionada por el CC. Encima de la capa lógica encontraríamos la capa de aplicación controlada por el uC de la ECU.
Por ejemplo, en un sistema de Brake-by-Wire, el uC de la ECU gestionaría los sensores que determinarían la posición de frenado, las máquinas de estados que determinarían el flujo del programa y la información que hay que enviar al CC (por SPI o bus paralelo) para que llegue a través de FLEXRAY a la ECU que controla el sistema de actuadores.
Es decir, el uC se abstrae totalmente de la gestión del protocolo Flexray, cuya misión recae en el CC. A la máquina de estados principal del CC se le llama POC (Protocol Operation Control) y es la que controla los procesos más importantes de Flexray. En este capítulo estudiaremos estos procesos y veremos los mecanismos que dispone Flexray para despertar la red (Wake Up) y para comenzar la comunicación (Start UP).

2.1. Protocol Operation Control (POC)

El POC es la máquina de estados principal del protocolo. Decide en todo momento en qué estado se encuentra el protocolo y reacciona a las órdenes del uC realizando los cambios necesarios en los siguientes subprocesos, llamados “core mechanisms”:
• Coding and Decoding
• Frame and Symbol processing
• Media Access Control
• Clock Synchronization.

Inmediatamente después de recibir energía. El CC controller entra en el estado de POC OPERATIONAL y empieza a funcionar el POC. Lo podemos apreciar en el siguiente diagrama de estados:
Una vez que el POC está operativo puede cambiar de estado debido a las órdenes que le lleguen del host o por condiciones de error detectadas en el protocolo. Veamos el diagrama de estados principal del POC y qué función desempeña cada estado
Default config: Estado por defecto al entrar en el POC. En este estado se inicializa la configuración por defecto.
Config: Estado de configuración. En este estado se entrará siempre que se requiera configurar de nuevo algún parámetro.
Ready: Estado por el cual hay que pasar para realizar una nueva configuración, así pues despertar el nodo si es necesario (wake up), o volver a iniciar la comunicación con la nueva configuración aplicada (startup)
Wakeup: Estado cuya función principal es despertar la red.
Startup: Estado cuya función principal es la de iniciar la comunicación en la red.
Normal active: Modo normal de operación en el cual hay comunicación fluida Flexray.
Normal passive: Estado al cual se llega si se detectan leves errores en la comunicación En caso de recuperarse de esos errores puede volver a pasar a normal active. En caso contrario, pasará al estado HALT.
Halt: Estado al que se llega si se detecta error grave en la comunicación, o por orden directa del host. Para volver a comunicarse, hará falta realizar de nuevo la secuencia de estados desde el inicio del POC.
A continuación describiremos los principales procesos controlados por el POC y que son llamados los “core mechanisms”, ya que son la base de FLEXRAY.

2.1.1 Coding and decoding

El subproceso Coding and decoding se encarga de realizar las funciones de Codificar y Decodificar las tramas. Forman parte de este proceso los mecanismos Majority Voting y Bit Strobing vistos en el apartado 2.1.4.1. y 2.1.4.2. para decodificar las tramas. Hay que añadir que la forma de codificarlas también lo vimos en el apartado 2.1.3.3.
Lo que vamos a ver a continuación son los campos a nivel lógico que conforman la trama Flexray.
En un primer nivel podemos distinguir entre 3 bloques: Cabecera, Datos y CRC. Como vemos la trama puede variar entre 8 y 262 bytes.
El significado de los campos de cabecera es el siguiente:
Reserved bit: Bit reservado del protocolo para futuros usos.
Payload Preamble indicator: Sirve para indicar que los primeros bytes del segmento de datos también son de cabecera. Esto se usa para tareas de mantenimiento y gestión de la red o para indicadores en las tramas dinámicas.
Null Frame Indicator: Indica si la trama lleva datos o no. A veces, por ejemplo en tramas de sincronismo, se envía una trama para mantener el  sincronismo pero no lleva datos asociados. Cabe indicar que la situación contraria se puede dar. Es decir, se puede enviar una trama de sincronía que además contenga datos.
Sync Frame Indicator: Indica si la trama es de sincronismo. Estas tramas que sirven para sincronizar todos los nodos a la base de tiempos global de Flexray.
Startup Frame Indicator: Indica si es una trama de Startup. Es decir, si es una trama de inicio de comunicación. En el apartado 2.2.3. se describe su uso.
Frame ID: Identificador único de la trama asociado a un nodo. Define el slot en el cual se envía la trama.
Payload length: Define la longitud del campo de datos enviado con la trama.
Header CRC: CRC de cabecera. Sirve para agilizar el protocolo. Si un nodo detecta un error en el CRC de cabecera descarta directamente la trama.
Cycle Count: indica el ciclo de comunicación en el que nos encontramos.

2.1.1.1 Channel idle detection

Dentro del apartado coding and decoding cobra especial relevancia un subproceso llamado Channel idle detection el cual detecta si el canal está libre. Como comentamos en la capa física (apartado 2.1.3.2.), el Transceiver traducía los 3 símbolos eléctricos (1, 0 y libre) tan sólo a dos lógicos (1 y 0).
El mecanismo que usa Flexray para determinar si el canal está libre es contar el número de unos seguidos que se reciben y si pasa un determinado umbral, se considera el canal libre. Esto funciona ya que cualquier trama Flexray, lleva intercalado cada 8 bits un BSS (Byte Start Sequence) en el cual siempre hay un flanco descendiente, forzando un cero.

2.1.2. Frame and Symbol Processing

El proceso Frame and Symbol Processing, se encarga de recoger los datos de salida del “Coding and Decoding process”, comprobar errores tanto sintácticos, semánticos como de sincronización y en caso positivo pasar la información relevante al CHI (Controller Host Interface) para que el uC pueda leer el mensaje recibido.

2.1.3. Media Acces Control

El protocolo Flexray se basa en un ciclo de comunicación recurrente. Este ciclo está dividido en 4 segmentos:
Static Segment: El Static Segment está compuesto por slots de medida fija. Cada slot está asociado a una Frame ID. Por su parte cada Frame ID está asociada a un nodo, de manera que cada nodo sabe siempre en qué slot o slots le toca enviar. Este segmento es de carácter obligatorio y siempre se comporta igual. Es decir, las tramas estáticas siempre se envían.
Dynamic Segment: El Dynamic Segment está compuesto por dynamic slots la medida de los cuales es variable y se establece un orden de envío por prioridad de ID, similar al CAN. Es decir, si dos nodos en el segmento dinámico luchan por transmitir, ganará el de la ID más baja. Además el tamaño de la trama no es fijo, así que el primer nodo en coger el control del bus podría agotar el Dynamic Segment. Este segmento es de carácter opcional, a diferencia del estático.
Symbol Window: En el Symbol Window se pueden enviar los MTS para gestión de la red. Es de carácter opcional y raramente se usa.
Network Idle Time: Al final del ciclo se deja el canal un cierto tiempo libre para poder ajustar el tiempo de ciclo a la durada fija determinada. Este segmento es de carácter obligatorio.

En el siguiente diagrama se aprecian las diferentes posibilidades de configurar el ciclo de comunicación.

2.1.3.1. Unidades de tiempo en Flexray

Flexray es un protocolo basado en una base de tiempos global. Con lo cual la gestión del tiempo es crítica para el acceso al medio. Por ello tiene diferentes unidades de tiempo:
Microtick: Unidad de tiempo básica dependiente el oscilador local de cada nodo.
Macrotick: Unidad de tiempo básica de la red. Todos los nodos tienen el mismo valor de Macrotick. Así pues si dos nodos tienen un oscilador local diferente tendrán diferente número de microticks por macrotick, pero al final el valor de macrotick será el mismo para todos.
Cycle: Es una unidad de tiempo propia de la red y es el tiempo del ciclo de comunicación medido en macroticks.

Para ver más clara la diferencia entre estos tres conceptos fijémonos en el siguiente diagrama:
Una vez visto los diferentes segmentos que forman el ciclo de Flexray y entendidas las unidades básicas de tiempo, veamos como está dividido un ciclo de comunicación en unidades de tiempo:
El Static Segment, está dividido en un número fijo de static slots que a su vez están formados por un número fijo de macroticks. Al inicio de cada Static Slot, el mecanismo ‘Clock Synchronization’ marca el instante en el cual ha se ha de empezar a transmitir ese slot. A este instante, se le llama Static Slot Action Point y es de vital importancia dada la naturaleza TDMA del protocolo.
En el Dynamic Segment ocurre algo parecido pero en este caso se habla de Dynamic Slots, formados por minislots y guiados por el Minislot Action point. Esta diferencia entre Static slots y minislots radica en que en el segmento dinámico las tramas no tienen por qué tener una medida estándar y cabe aprovechar al máximo las unidades de tiempo, reduciendo su duración en macroticks.
En el Symbol Window y el Network idle Time el tiempo se mide directamente en macroticks.

2.1.4. Clock Synchronization

Flexray es un protocolo determinístico basado en la división del tiempo en ranuras donde cada nodo sabe en qué ranura puede enviar y en cual no. Dada esta descripción, se puede entender la gran importancia de mantener todos los nodos sincronizados constantemente. De lo contrario, fácilmente un nodo no sincronizado podría al transmitir invadir la ranura del vecino y provocar un fallo general de comunicación. Es por eso, que el proceso Clock Synchronization cobra gran relevancia en el protocolo Flexray.
Todo y que cada nodo dispone de su propio oscilador, Flexray funciona con una base de tiempos global a nivel de red. Esto lo consigue gracias a las tramas de sincronismo que envían un mínimo de 2 nodos en una red de 2 ECUs o 3 en una red de 3 o más ECUs. Estos nodos, llamados Coldstart nodes, son muy importantes tanto en el inicio de la comunicación como en el sincronismo de la red. Suelen tener osciladores muy precisos y marcan el tiempo al cual se han de ir adaptando el resto de nodos.
La sincronización del reloj se basa en 2 subprocesos importantes:

2.1.4.1. Clock Synchronization Process.

El Clock Synchronization Process (CSP) recoge los valores de las tramas de sincronía enviadas por los diferentes Coldstart nodes de la red, los compara con los que él había predecido y hace una estimación del valor correcto. El resultado lo pasa al Macrotick Generation Process.

2.1.4.2. Macrotick Generation Process

El Macrotick Generation Process (MTG), como indica su nombre, es el encargado de generar el macrotick y del control de tiempos como el tiempo de ciclo o el tiempo de slot. Así pues, con los datos que le pasa el CSP, efectúa las correcciones necesarias para mantener el sincronismo del nodo:
·         Correcciones de Offset: Indica el número de microticks que hace falta añadir al NIT (Network idle Time) para que el ciclo de comunicación Flexray comience en el momento adecuado. Se calcula cada ciclo y se corrige en el NIT de los ciclos impares.
·         Correcciones de Rate: Indica el número de microticks por macrotick que hay que añadir (o substraer) para adecuarse al tiempo de ciclo. Se calcula en los ciclos impares y se aplica siempre.

2.2. Wake Up del Bus Flexray
En Flexray, como en otros muchos sistemas electrónicos, es posible encontrarnos con ECUs y transceivers en estado sleep como método de ahorro de energía. Por eso, antes de iniciar una comunicación Flexray, es necesario un procedimiento de Wake Up que despierte todos los nodos. Para que este procedimiento funcione, el mínimo requerimiento es que todos los Transceiversse encuentren alimentados, aunque se encuentren en estado de baja energía. Si esto sucede, el Transceiver que reciba una orden de WakeUp (un Wake Up pattern formado por una cadena de símbolos WakeUp) por uno de sus canales del bus podrá comunicarse directamente con su host y despertarlo. El host será responsable de determinar si el otro canal está dormido y en cuyo caso será responsable de despertarlo.
Un hecho importante a considerar es que está prohibido intentar despertar los dos canales a la vez, puesto que en caso que hubiera un nodo fallando podría perturbar los dos canales y impedir la comunicación Flexray.
Teniendo todo esto en cuenta veamos un ejemplo de como se despertaría una red de 4 nodos y dos canales:
Como vemos el nodo 4 sólo está conectado a un canal, en este caso el B. Esta situación se puede dar siempre que el nodo no sea crítico.
1. Siempre ha de haber un host que tome la iniciativa de iniciar la comunicación debido a un evento externo.
2. Se inicializa el CC con los parámetros de configuración deseados.
3. El host despierta sus dos transceivers (Canal A y Canal B)
4. El host lanza la orden al CC de que pase al estado de WakeUP. El CC genera un Wake-up pattern que es enviado al transceiver del canal A para que sea transmitido por el bus.

5. Todos los transceivers del canal A se despiertan por el wake-up pattern y a la vez despiertan a sus hosts.
6. Los hosts 2 y 3 de despiertan.
7. Los hosts 2 y 3 despiertan sus CCs y los inicializan.
8. Los hosts 2 y 3 chequean si los transceivers del Canal B se han despertado. En caso contrario los despiertan.
9. Una vez que los transceivers del canal B están despiertos, los hosts verifican que los 2 canales estén despiertos. Si el canal B no está despierto, dan la orden a sus CCs para que envíen un Wake-up pattern al canal B. Esto hace despertar los transceivers que no se habían despertado en ese canal.
10. El host del nodo 4, que sólo estaba conectado al Canal B es despertado.
11. El host del nodo 4 despierta a su CC.
Una vez que los 2 canales han sido despertados se puede empezar la fase de start-up, el establecimiento de la conexión Flexray. Es importante destacar que en la fase de Wake Up intervienen tanto transceivers, CC y host. Ninguno de estos puede efectuar el Wake-up por sí sólo.

2.3. Startup del bus Flexray

Una vez despertados los nodos con el procedimiento de Wake-up, el paso siguiente inmediato es el de Startup, con el objetivo de establecer la conexión sincronizando todos los nodos. Es el momento de introducir otro concepto, el Coldstart node.
Los nodos Coldstart, suelen ser los mismos que los nodos encargados de enviar las tramas de sincronía. De hecho, por obligación un nodo Coldstart ha de estar configurado para enviar tramas de sincronía. Al igual que pasaba con los Sync nodes, ha de haber un mínimo de 2 Coldstart nodes en una red de 2 nodos y un mínimo de 3 en una red de más nodos.
Los nodos Coldstart son los encargados de tomar la iniciativa en la fase de Startup. Distinguimos dos tipos: el Leading Coldstart node y el Following Coldstart node. En un principio todos los Coldstart nodes competirán por iniciar la comunicación pero sólo habrá uno que ganará y este será el Leading Coldstart node. El resto se convertirán automáticamente en Following Coldstart nodes. El mecanismo para asignar el Leading Coldstart node es el siguiente:
Todos los nodos Coldstart después del wake-up, enviarán un CAS (Collision Avoidance Symbol) al bus. El primero que envíe este símbolo será el Leading

Coldstart node. El resto, recibirán el CAS y interpretarán que ya hay un Leading Coldstart node.
El proceso de startup tiene una serie de fases. Veamos con un la ayuda de un diagrama ejemplo el funcionamiento:

Partimos de una situación ficticia de 3 nodos, 2 son Coldstart y el otro no. (En realidad en una red de 3 nodos deberían ser los 3 Coldstart, el ejemplo sólo sirve para ilustrar el funcionamiento)
1. Los nodos vienen de ser despertados en la fase de Wake-up. Así pues, pasan al estado ready del POC y de allí los nodos Coldstart A y B toman la iniciativa.
2. El primer estado por el que pasan los nodos A y B es el Coldstart listen. En este estado han de escuchar el canal para ver si hay algún otro nodo Coldstart que haya enviado ya un CAS. Cuando al nodo A se le acaba el tiempo de espera y no ha recibido un CAS, envía un CAS al bus para que el resto de nodos sepan que ya hay un “Leading Coldstart node”. Así pues, el resto de nodos Coldstart tomarán el rol de Following Coldstart nodes. El nodo C no es Coldstart y por tanto no interviene de momento.
3. Una vez determinado el Leading Coldstart node, éste ha de tomar la iniciativa empezando a enviar tramas de start-up que son a la vez tramas de sincronía. El resto de nodos va sincronizándose conforme al nodo A. Al cabo de 4 tramas de start-up los nodos Following Coldstart nodes se integran en la red y empiezan a enviar también sus tramas de start-up.
4. Una vez, todos los Coldstart nodes están integrados, el resto de nodos se integran en la red pasando todos a normal active y pueden empezar a enviarse tramas de datos. Es importante notar que el nodo C no envía ninguna trama de sincronía, si no que con las tramas que han ido enviando los nodos Coldstart se ha ido sincronizando.
Finalmente, después de la fase de Wake-up y la fase de Start-up, ya tenemos la conexión Flexray entre todos los nodos operativa.




MAPA MENTAL