Inicio Instrumentación Acotación del arbitraje del bus CAN utilizando un osciloscopio

Acotación del arbitraje del bus CAN utilizando un osciloscopio

 

Introducción
El bus CAN diferencial, muy utilizado en automóviles para el control del tren y el cuerpo motriz, se basa en la transmisión asíncrona de paquetes de datos procedentes de múltiples nodos del sistema. Debido a la naturaleza asíncrona de la transmisión de paquetes, a menudo se producen colisiones de datos cuando dos o más nodos inician la transmisión al mismo tiempo… o prácticamente al mismo tiempo. Cuando se producen colisiones, aunque hay un proceso de arbitraje bit a bit que determina qué mensaje CAN tiene mayor prioridad para continuar la transmisión de datos, la transmisión de los mensajes de menor prioridad se puede demorar. Además, pueden producirse errores del bus CAN en función del nivel de carga del bus, así como de la frecuencia de aparición relativa de colisiones de datos. En este artículo se exponen y valoran los aspectos siguientes:
• Revisión del proceso de arbitraje bit a bit de CAN.
• Cómo identificar fácilmente qué mensajes CAN descodificados simbólicamente incluyen arbitraje utilizando la velocidad de actualización de forma de onda rápida de un osciloscopio.
• Cómo efectuar la sincronización en mensajes CAN que incluyen arbitraje utilizando el disparo de mensajes de nivel simbólico de un osciloscopio en combinación con disparo de zona.
• Cómo determinar la aparición relativa de mensajes CAN que incluyen arbitraje utilizando la adquisición de memoria segmentada de un osciloscopio con descodificación simbólica de CAN-dbc y etiquetado de tiempo.
Arbitraje bit a bit
En la Figura 1 se muestra cómo funciona el arbitraje bit a bit para determinar qué marco transmitido tiene mayor prioridad para seguir transmitiendo bits cuando dos o más marcos empiezan a transmitir datos prácticamente en la misma instancia de tiempo. El bus CAN diferencial básicamente se comporta como una red eléctrica “AND cableada” lógica cuando se monitoriza/visualiza en un formato de bit dominante bajo. 
En el formato de bit dominante bajo, los niveles bajos se interpretan como “ceros” mientras que los niveles altos se interpretan como “unos”. Si todos los bits transmitidos son altos (unos), entonces el bus es alto. Si uno o más de los bits transmitidos simultáneamente son bajos (ceros), que es el estado dominante, entonces el bus es bajo. 
 El nodo transmisor con el valor de ID de marco más bajo siempre ganará el arbitraje. En este ejemplo en concreto, el ID de marco del Nodo 2 consta de más ceros dentro de los bits más significativos del campo de ID de 11 bits. Esto significa que este marco (del Nodo 2) tiene el ID de marco más bajo y siempre ganará al competir contra estos ID de marco específicos de los Nodos 1 y 3, que tienen valores de ID de marco más elevados. 
Los nodos de transmisión no solo transmiten bits, sino que también realizan el muestreo de bits cerca del extremo de cada tiempo de bit (el muestreo se realiza habitualmente cerca del punto de tiempo de bit del 75 %). Si transmiten un “uno”, pero luego efectúan el muestreo de un “cero”, saben entonces que debe haber uno o más nodos que transmitan “ceros”, que tienen prioridad. Por ejemplo, durante el bit n.º 6 el Nodo 1 transmitió un “uno”, pero luego efectuó el muestreo de un “cero” del bus diferencial. Así que al comienzo del bit n.º 5, el Nodo 1 renunció al control del bus en favor de los demás nodos transmisores. En este punto, el Nodo 1 debe esperar hasta el final del marco que se está transmitiendo actualmente hasta la siguiente oportunidad para intentar transmitir nuevamente sus datos. 
Aunque el arbitraje bit a bit funciona, el inconveniente respecto a los sistemas de bus serie asíncronos basados en arbitraje bit a bit, como CAN, es que en ocasiones la comunicación crítica puede verse demorada. Además, si la carga del bus es elevada (ciclo de carga elevada del tiempo de transmisión de marcos respecto al tiempo de bus total, incluido el tiempo de inactividad), pueden producirse niveles elevados de contención del bus, lo cual aumente las tasas de errores de bits (BER) teóricas, así como el tiempo de recuperación de errores. Habitualmente los ingenieros automovilísticos quieren mantener la carga del bus de su sistema CAN en un 30 % o menos. Con la creciente complejidad electrónica de los automóviles actuales, muchas redes automovilísticas están pasando a CAN-FD para reducir la carga del bus, y/o al bus FlexRay síncrono/disparado por tiempo, en que el arbitraje y la carga del bus dejan de ser un problema. 
Descubramos ahora cómo identificar y acotar cuándo se produce arbitraje utilizando un osciloscopio con memoria digital (DSO, Digital Storage Oscilloscope).
Identificar cuándo se produce arbitraje
Así pues, ¿qué aspecto tiene el arbitraje? Si regresamos a la Figura 1, el trazo rojo es una representación “lógica” del bus CAN diferencial. Alto es alto, bajo es bajo, y no hay nada en medio, ni encima ni debajo. Este es el aspecto que tendría el bus diferencial si utilizara un analizador lógico o analizador de protocolo para ver esta información. Pero no es el aspecto que tiene en un osciloscopio. 
En la Figura 2 se muestra un ejemplo de captura y visualización de un marco CAN en un osciloscopio que tiene una velocidad de actualización de forma de onda muy rápida. En este ejemplo en concreto, hemos configurado el osciloscopio para que se dispare con un determinado mensaje y luego hemos descodificado el bus simbólicamente importando un archivo .dbc que defina esta red CAN en particular. El mensaje con el que se disparaba el osciloscopio en este ejemplo estaba etiquetado como “Brake_Torque”, que se relaciona directamente con el ID de marco 0 x 211(HEX) o 010 0001 0001(Binario). El arbitraje se produjo en ocasiones durante este mensaje, como se demuestra por los bits de nivel bajo inferiores que se pueden observar cerca del inicio del marco/mensaje. Para explicar por qué sucede (bits bajos inferiores), analicemos primero el final del marco. 
Al final de cada marco debería haber un bit de reconocimiento cuando todos los demás nodos del sistema reconocieran que el marco recién transmitido era válido. Cuando todos los nodos tiran del bus para conducirlo a un nivel bajo dominante, dado que múltiples nodos tiran del bus simultáneamente, se arrastra más corriente, lo cual provoca que el bus descienda a un nivel bajo inferior. 
El mismo fenómeno se produce al inicio del marco si más de un nodo trata inicialmente de obtener acceso al bus. De hecho, en este ejemplo de medida, podemos ver efectivamente tres niveles bajos diferenciados cerca del inicio del marco. Eso significa que hay por lo menos tres nodos luchando por la dominación del bus; pero en última instancia el mensaje: Brake_Torque siempre triunfa, ya que es el mensaje que disparábamos y supervisábamos en este ejemplo de medida. Después de familiarizarnos con algunos de los bits más significativos del campo ID, el ID de marco 0 x 211 asume el pleno control y, a continuación, la amplitud de los niveles bajos dominantes se asienta en los niveles que genera el ID de marco 0 x 211 por sí solo (un nivel bajo normal). Así pues, ¿con qué frecuencia se produce arbitraje durante este mensaje en particular (Brake_Torque)? 
Disparo en caso de arbitraje
El primer paso para determinar la frecuencia de aparición de arbitraje es configurar el osciloscopio para que únicamente se sincronice (dispare) cuando aparezca el mensaje: Brake_Torque; pero únicamente en caso de arbitraje. Eso significa que el osciloscopio ha de poder filtrar las apariciones de este mensaje cuando no se produce arbitraje.
El disparo en el ID de marco: 0x211(HEX) es relativamente sencillo cuando se utiliza un osciloscopio con una opción de descodificación/disparo de CAN. Muchos de los osciloscopios que hay en el mercado actualmente disponen de esta capacidad. Y es incluso más fácil disparar en un nivel de “mensaje” de mayor abstracción si el osciloscopio tiene la capacidad de importar un archivo .dbc para disparar y descodificar en el bus CAN simbólicamente. Son menos los osciloscopios que hay en el mercado actualmente que disponen de esta capacidad. Pero si su osciloscopio dispone de esta capacidad, simplemente seleccione el nombre del mensaje en la lista de mensajes válidos y definidos en contraposición a la introducción de una cadena de bits esotéricos para efectuar el disparo. Sin embargo, el disparo en el ID de marco: 0 x 211(HEX) o mensaje: Brake_Torque, pero solo cuando se produce arbitraje, es difícil o imposible con la mayoría de los osciloscopios disponibles actualmente en el mercado. Pero no solo es posible, sino que además es extremadamente fácil si el osciloscopio dispone de capacidad de disparo de zona. 
 En la Figura 3 se muestra un ejemplo del osciloscopio que se dispara ahora exclusivamente con el mensaje: Brake_Torque, pero únicamente cuando se produce arbitraje. Primero el osciloscopio se configuró para que se disparara con el mensaje: Brake_Torque. El disparo se acotó todavía más dibujando una zona (recuadro) únicamente alrededor de los bits de nivel más bajo cerca del inicio de este marco utilizando la pantalla táctil capacitiva del osciloscopio. Obsérvese el recuadro sombreado en amarillo cerca de la esquina inferior izquierda de la pantalla del osciloscopio. El acotador de zona se seleccionó entonces como “Debe intersectar”(Must Intersect).  Si observa más de cerca los primeros bits de este marco en esta imagen de la pantalla, podrá ver que los niveles bajos dominantes siempre son un nivel bajo inferior (nunca un nivel bajo normal). Eso significa que el osciloscopio filtra los marcos que no incluyen arbitraje. Si observa nuevamente la Figura 2, puede ver que las amplitudes de los primeros bits (durante la fase de arbitraje) mostraban tanto niveles bajos normales (bits no arbitrados), como niveles bajos inferiores (bits arbitrados). Ello se debe a que el osciloscopio simplemente se disparaba con el mensaje: Brake_Torque sin utilizar la capacidad de disparo de zona para acotar todavía más los bits de arbitraje.
Tenga en cuenta que si hubiésemos deseado que el osciloscopio se disparara únicamente con este mensaje en concreto, pero solo cuando no se produjera arbitraje, podríamos haber seleccionado “No debe intersectar” (Must Not Intersect) como acotador de zona. En este caso, el osciloscopio habría filtrando los bits de nivel bajo inferiores arbitrados y luego solo habría mostrado marcos con bits de ID no arbitrados.
Ahora que tenemos el osciloscopio configurado para que solo se dispare en este marco (mensaje: Brake_Torque), pero únicamente cuando se produzca arbitraje, vamos a comentar cómo acotar la frecuencia de aparición de arbitraje utilizando el modo de adquisición de memoria segmentada del osciloscopio. Tenga en cuenta que la memoria segmentada está disponible en muchos de los osciloscopios actuales, aunque a menudo recibe otro nombre (memoria segmentada, modo de secuencia, FastFrame, modo de historial, etc.).
Uso de la memoria segmentada para acotar la frecuencia de aparición de arbitraje
Un método de “fuerza bruta” para acotar con qué frecuencia se produce arbitraje durante un determinado mensaje consistiría en obtener un osciloscopio con memoria extremadamente profunda y luego capturar un flujo largo de transmisión continua de datos de CAN. A continuación la tarea consistiría en desplazarse manualmente por los datos capturados y buscar visualmente los bits arbitrados dentro de un marco en concreto, para luego medir el tiempo entre las apariciones. Pero este método es lento y tedioso; además, requiere la compra o alquiler de un carísimo osciloscopio de altas prestaciones con cientos de megabytes de memoria de adquisición. Sin embargo, hay una manera mejor. La captura de un flujo continuo de datos de CAN transmitidos es un uso poco eficaz de la memoria de adquisición del osciloscopio. La adquisición de la memoria segmentada optimiza la memoria de su osciloscopio. Puede configurar el osciloscopio para que capture de forma selectiva solo el marco/mensaje de interés mientras consume una pequeña porción de la memoria de adquisición del osciloscopio para cada una de las apariciones consecutivas del mensaje. Esto básicamente amplía el rango temporal total que el osciloscopio puede capturar.
En la Figura 4 se muestra un ejemplo de la captura de 100 apariciones consecutivas del mensaje: Brake_Torque, pero solo cuando se producía arbitraje (utilizando el disparo de zona como acotador de arbitraje del marco). El listador de protocolo simbólico de la mitad superior de la pantalla del osciloscopio nos indica el tiempo entre cada aparición. Tenga en cuenta que también podríamos haber configurado el listador de protocolo para que mostrara el tiempo absoluto de cada aparición de arbitraje respeto al primer evento capturado. También tenemos la posibilidad de desplazarnos por cada marco individual con el fin de ver la calidad de cada forma de onda digitalizada.  En esta lista de 100 apariciones consecutivas del mensaje: Brake_Torque que incluye arbitraje, el último marco capturado (segmento n.º 100) se produjo casi 5 segundos después del primer marco capturado (segmento n.º 1). Capturar tanta cantidad de datos de forma de onda utilizando la adquisición continua (no segmentada) del osciloscopio habría requerido más de 300 M de puntos de memoria. 
Resumen
Una herramienta de medida crítica utilizada por la mayoría de los ingenieros del sector automovilístico para acotar la capa física del bus CAN diferencial es un osciloscopio de almacenamiento digital. Esperamos que este artículo le haya presentado y mostrado algunas de las nuevas técnicas de medida para probar y depurar sistemas automovilísticos que puede que anteriormente no conociera. Como se ha demostrado en este documento, acotar la frecuencia de aparición de arbitraje CAN dentro de un marco/mensaje particular requirió las capacidades de medida siguientes del osciloscopio:
• Una velocidad de actualización de forma de onda rápida para capturar apariciones poco frecuentes de arbitraje
• Disparo de mensaje/marco CAN para sincronizar las adquisiciones en mensajes/marcos determinados
• Disparo de zona para aislar/sincronizar la adquisición del osciloscopio solo en los marcos/mensajes que presentan arbitraje
• Adquisición de memoria segmentada con etiquetado de tiempo preciso para capturar selectivamente apariciones múltiples y consecutivas de mensajes/marcos con arbitraje