Comunicación CAN

Comunicación CAN

CAN (Controller Area Network) es un protocolo basado en una topología BUS, en la que hay un emisor y uno o varios receptores. La información a intercambiar se descompone en mensajes que se encapsulan en tramas. Cada mensaje tiene un identificador único. Algunas de sus características son:

  • Gestión de prioridades
  • Garantía de tiempos de latencia
  • Detección y señalización de errores, con retransmisión automática de tramas erróneas
  • Robustez en cuanto a consistencia de datos

Can fue desarrollado por la empresa BOSCH y su uso inicial estaba destinado al área de la automoción. Se distinguen 2 tipos:

  • Red de alta velocidad (Hasta 1Mbit/s): En cada extremo utiliza resistencias de 120 Ω
  • Red de baja velocidad tolerante a fallos (<= 125 Kbit/s): En cada extremo utiliza resistencias con valores próximos y superiores a los 100 Ω

Transmisión:

Se lleva a cabo por 2 cables trenzados (CAN_H o CAN high, y CAN_L o CAN low). El bus tiene 2 estados:

  • Recesivo: los dos cables del bus se encuentran al mismo nivel de tensión, siempre entre -2 y 7 V
  • Dominante: los dos cables del bus tienen una diferencia de tensión de al menos 1,5 V, y debe estar entre 1,5 y 3 V.

Esta transmisión con tensiones diferenciales le otorga protección contra las interferencias. El estándar CAN, a diferencia de otros como el USB, no especifica ningún tipo de conector. Sin embargo, hay varios formatos comúnmente aceptados como el conector D-sub de 9 pines, con la señal CAN_L en el pin 2 y la señal CAN_H en el pin 7.

d-sub_9_pines

La longitud de la línea de transmisión limita el ancho de banda según la siguiente relación:

Longitud del bus (m) Tasa de transferencia (kbit/s)
40 1000
100 500
200 250
500 100
1000 50

Sincronización:

Puesto que el bus CAN no utiliza señal de reloj separada, hay diferencia en la tasa de transferencia real de los distintos nodos, y es necesario un método de sincronización. El controlador CAN espera que una transición del bus de recesivo (valor lógico 1) a dominante (valor lógico 0) ocurra en un determinado intervalo de tiempo. Si esto no ocurre, el controlador reajusta la duración del siguiente bit en consecuencia. Para entenderlo mejor vamos a explicar los segmentos en los que se descompone cada bit nominal:

  • Segmento de sincronización: es el intervalo de tiempo en el que se supone que ocurren las transiciones de recesivo a dominante.
  • Segmento de propagación: es el intervalo de tiempo que compensa los retardos de propagación a lo largo de la línea.
  • Segmentos de fase 1 y 2: Se usan para llevar a cabo la resincronización de los nodos. El segmento de fase 1 puede ser alargado o el 2 acortado para la resincronización. El punto de muestreo del bit se encuentra inmediatamente después del segmento de fase 1 (habitualmente cerca del 75 % de la duración total del bit).

Arbitraje:

El estado inactivo del bus es el estado recesivo (valor lógico 1). Cuando dos nodos intentan transmitir bits diferentes se denomina colisión y el valor del bit dominante prevalece sobre el valor del bit recesivo. En ese caso el nodo que intentaba transmitir el valor recesivo detecta la colisión y pasa a modo pasivo, es decir, deja de transmitir para escuchar lo que transmite el otro nodo. Por esta razón es importante que todos los nodos estén sincronizados y muestreen todos los bits del bus simultáneamente. El arbitraje se produce durante la transmisión de los primeros bits de una trama, que coinciden con el identificador del mensaje. Al final del proceso de arbitraje solo debe quedar un nodo con el control del bus. Por ello cada nodo debe manejar identificadores únicos. Cuando un nodo pierde el arbitraje aplaza la transmisión de su trama. Conociendo los identificadores de todos las tramas que intentan ser transmitidas, se puede establecer el orden en el que son transmitidas. Así, una trama CAN con identificador más bajo (mayor número de bits dominantes en las primeras posiciones) tiene más prioridad que una trama con identificador más alto.

Tipos de trama:

Existen cuatro tipos de trama CAN:

  • Trama de datos (data frame)
  • Trama remota (remote frame)
  • Trama de error (error frame)
  • Trama de sobrecarga (overload frame)

Trama de datos

Una trama de datos CAN puede ser de uno de los dos siguientes formatos:

  • Formato base: con identificador de 11 bits.
  • Formato extendido: con identificador de 29 bits. El estándar dice que un controlador CAN debe aceptar tramas en formato base, y puede o no aceptar tramas en formato extendido. Pero en cualquier caso debe tolerar tramas en formato extendido. Es decir, que si un controlador está configurado para que solo acepte tramas en formato base no debe lanzar un error cuando reciba una trama en formato extendido, sino que simplemente no transmitirá el mensaje al procesador central.

Formato Base:

Nombre del campo Longitud (bits) Finalidad
Inicio de trama 1 Marca el comienzo de una transmisión
Identificador - ID 11 Un identificador (único) que también representa la prioridad de la trama
Petición de transmisión remota - RTR (cian) 1 Dominante (0) para tramas de datos y recesivo (1) para tramas de peticiones remotas
Bit de extensión de identificador - IDE 1 Dominante (0) para el formato base (identificador de 11 bits)
Bit reservado (r0) 1 Bit reservado. Debe ser dominante (0), pero aceptado tanto dominante como recesivo
Código de longitud de datos - DLC 4 Número de bytes de datos en el mensaje, entre 0 y 8. Si este campo es mayor que 8 el mensaje será de 8 bytes como máximo de cualquier modo
Campo de datos 0–64 (0-8 bytes) Datos de la trama (la longitud del campo viene dada por el código de longitud de datos o DLC)
CRC 15 Verificación por redundancia cíclica. Código que verifica que los datos fueron transmitidos correctamente
Delimitador CRC 1 Debe ser recesivo (1)
Hueco de acuse de recibo - ACK 1 El transmisor emite recesivo (1) y cualquier receptor emite dominante (0)
Delimitador ACK 1 Debe ser recesivo (1)
Fin de trama EOF 7 Debe ser recesivo (1)

Formato Extendido:

En el formato extendido los dos campos de identificador se combinan para formar el identificador de 29 bits. El formato de la trama es el siguiente:

Nombre del campo Longitud (bits) Finalidad
Inicio de trama 1 Demarca el comienzo de una transmisión
Identificador A - ID_A 11 Primera parte del identificador (único) que también representa la prioridad de la trama
Sustituto de transmisión remota - SRR 1 Debe ser recesivo (1)
Bit de extensión de identificador - IDE 1 Recesivo (1) para el formato extendido (identificador de 29 bits)
Identificador B - ID_B 18 Segunda parte del identificador (único) que también representa la prioridad de la trama
Petición de transmisión remota - RTR 1 Dominante (0) para tramas de datos y recesivo (1) para tramas de peticiones remotas
Bits reservados (r1, r0) 2 Bit reservado. Debe ser dominante (0), pero aceptado tanto dominante como recesivo
Código de longitud de datos - DLC 4 Número de bytes de datos en el mensaje, entre 0 y 8. Si este campo es mayor que 8 el mensaje será de 8 bytes como máximo de cualquier modo
Campo de datos 0–64 (0-8 bytes) Datos de la trama (la longitud del campo viene dada por el código de longitud de datos o DLC)
CRC 15 Verificación por redundancia cíclica. Código que verifica que los datos fueron transmitidos correctamente
Delimitador CRC 1 Debe ser recesivo (1)
Hueco de acuse de recibo - ACK 1 El transmisor emite recesivo (1) y cualquier receptor emite dominante (0)
Delimitador ACK 1 Debe ser recesivo (1)
Fin de trama - EOF 7 Debe ser recesivo (1)

Para asegurar que hay suficientes transiciones recesivo-dominante y garantizar así la sincronización, un bit de polaridad opuesta es insertado después de cinco bits consecutivos de la misma polaridad. Los bits insertados son eliminados por el receptor. Esto ocurre en todos los campos de la trama, excepto en el CRC, el acuse de recibo ACK, y el fin de trama. Cuando un nodo detecta seis bits consecutivos iguales en un campo susceptible lo considera un error y emite un error activo.