Diferencia entre revisiones de «Bus CAN»

De El Museo de los 8 Bits
Ir a la navegación Ir a la búsqueda
m (1 revisión importada)
Sin resumen de edición
 
Línea 1: Línea 1:
== CAN (''Controller Area Network'') ==
'''CAN''' (siglas del inglés '''''Controller Area Network''''') es un [[protocolo de comunicaciones]] desarrollado por la firma alemana [[Robert Bosch GmbH]], basado en una [[topología]] [[bus de datos|bus]] para la transmisión de mensajes en entornos distribuidos. Además ofrece una solución a la gestión de la comunicación entre múltiples [[CPU]]s (unidades centrales de proceso).
CAN  es un protocolo de comunicaciones desarrollado por la firma alemana Robert Bosch GmbH, basado en una topología bus para la transmisión de mensajes en ambientes distribuidos, además ofrece una solución a la gestión de la comunicación entre múltiples CPUs (unidades centrales de proceso).


El protocolo de comunicaciones CAN proporciona los siguientes beneficios:
El protocolo de comunicaciones CAN proporciona los siguientes beneficios:
*Es un protocolo de comunicaciones normalizado, con lo que se simplifica y economiza la tarea de comunicar subsistemas de diferentes fabricantes sobre una red común o bus.
* Ofrece alta inmunidad a las interferencias, habilidad para el autodiagnóstico y la reparación de errores de datos.
*El procesador anfitrión (''host'') delega la carga de comunicaciones a un periférico inteligente, por lo tanto el procesador anfitrión dispone de mayor tiempo para ejecutar sus propias tareas.
* Es un protocolo de comunicaciones normalizado, con lo que se simplifica y economiza la tarea de comunicar subsistemas de diferentes fabricantes sobre una red común o bus.
*Al ser una red multiplexada, reduce considerablemente el cableado y elimina las conexiones punto a punto,excepto en los enganches.
* El procesador anfitrión (''[[host]]'') delega la carga de comunicaciones a un periférico inteligente, por lo tanto el procesador anfitrión dispone de mayor tiempo para ejecutar sus propias tareas.
* Al ser una red multiplexada, reduce considerablemente el cableado y elimina las conexiones punto a punto, excepto en los enganches.


Para simplificar aun más la [[electrónica]] del coche se puede utilizar una subred más simple, que se conecta a la red CAN, llamada [[Local Interconnect Network|LIN]].
== Historia y evolución del protocolo CAN ==
 
El desarrollo del protocolo CAN comenzó en 1983 en la empresa Robert Bosch GmbH (comúnmente conocida como Bosch). El protocolo fue oficialmente lanzado en 1986 en el congreso de la [[Sociedad de Ingenieros Automotrices]] (SAE) en [[Detroit]]. Los primeros controladores CAN llegaron al mercado en 1987 de la mano de [[Intel]] y [[Philips]].<ref name="can-cia">{{cita web | url = http://www.can-cia.org/can-knowledge/can/can-history/ | título = CAN History | editorial = CAN in Automation }}</ref>
 
Bosch publicó posteriormente varias versiones de la especificación CAN, siendo la última de ellas la especificación CAN 2.0, publicada en 1991. Esta especificación consta de dos partes; la parte A para el formato estándar y la parte B para el formato extendido. Un dispositivo CAN que usa el formato estándar utiliza identificadores de 11 bits y es comúnmente referido como dispositivo CAN&nbsp;2.0A. Un dispositivo CAN que usa el formato extendido utiliza identificadores de 29 bits y es comúnmente referido como dispositivo CAN&nbsp;2.0B. Los estándares CAN&nbsp;2.0A/B y otros documentos de referencia relacionados con CAN son de acceso libre a través de Bosch.<ref>[http://www.bosch-semiconductors.de/en/ubk_semiconductors/ip_modules_3/produkttabelle_ip_modules/can_literature_1/can_literature.html Bosch Semiconductor CAN Literature] {{Wayback|url=http://www.bosch-semiconductors.de/en/ubk_semiconductors/ip_modules_3/produkttabelle_ip_modules/can_literature_1/can_literature.html |date=20140819090626 }}</ref>
 
En 1993 se publicó el estándar ISO&nbsp;11898 del bus CAN y ha sido a partir de ese momento un estándar de la [[Organización Internacional para la Normalización]]. Actualmente el bus CAN está estandarizado por las siguientes normas:
 
*ISO 11898-1:2015, ''Part 1: Data link layer and physical signalling''
*ISO 11898-2:2016, ''Part 2: High-speed medium access unit''
*ISO 11898-3:2006. ''Part 3: Low-speed, fault-tolerant, medium-dependent interface. Este estándar ha sido revisado y confirmado en 2015''
*ISO 11898-4:2004, ''Part 4: Time-triggered communication. Este estándar ha sido revisado y confirmado en 2013''
*ISO 11898-5:2007, ''Part 5: High-speed medium access unit with low power mode''
*ISO 11898-6:2013, ''Part 6: High-speed medium access unit with selective wake-up functionality''
*ISO 16845:2016, ''Conformance test plan''
 
En 2011 Bosch, en cooperación con los fabricantes de automóviles y otros expertos del bus CAN, comenzó a desarrollar la siguiente generación del CAN: el protocolo CAN&nbsp;FD (''flexible data-rate''). El CAN&nbsp;FD es compatible hacia atrás, es decir, un controlador CAN&nbsp;FD es capaz de comprender un mensaje CAN clásico (o CAN&nbsp;2.0). Por el contrario, un controlador CAN clásico destruye un mensaje CAN&nbsp;FD emitiendo un mensaje de error. El nuevo CAN&nbsp;FD es capaz de transmitir datos más rápido que  1&nbsp;Mbps (la velocidad máxima del CAN clásico). Ambos protocolos, el CAN clásico y el CAN&nbsp;FD, están estandarizados en la norma ISO/DIS&nbsp;11898-1.<ref>{{cita web|título=CAN knowledge|url=http://www.can-cia.de/can-knowledge/|editorial=CAN in Automation|idioma=inglés|fechaacceso=19 de agosto de 2015}}</ref><ref name=FD>{{cita web|título=CAN FD - The basic idea|url=http://www.can-cia.de/can-knowledge/can/can-fd/|editorial=CAN in Automation|idioma=inglés|fechaacceso=19 de agosto de 2015}}</ref>


== Principales características de CAN ==
== Principales características de CAN ==
CAN se basa en el modelo productor/consumidor, el cual es un concepto, o paradigma de comunicaciones de datos, que describe una relación entre un productor y uno o más consumidores.
CAN se basa en el modelo productor/consumidor, el cual es un concepto, o paradigma de comunicaciones de datos, que describe una relación entre un productor y uno o más consumidores.
CAN es un protocolo orientado a mensajes, es decir la información que se va a intercambiar se descompone en mensajes, a los cuales se les asigna un identificador y se encapsulan en tramas para su transmisión. Cada mensaje tiene un identificador único dentro de la red, con el cual los nodos deciden aceptar o no dicho mensaje. Dentro de sus principales características se encuentran:
CAN es un protocolo orientado a [[mensaje (informática)|mensajes]], es decir la información que se va a intercambiar se descompone en mensajes, a los cuales se les asigna un identificador y se [[encapsulación|encapsulan]] en tramas para su transmisión. Cada mensaje tiene un identificador único dentro de la red, con el cual los [[nodo (informática)|nodos]] deciden aceptar o no dicho mensaje. Dentro de sus principales características se encuentran:
 
* Prioridad de mensajes.
* Garantía de [[tiempo de latencia|tiempos de latencia]].
* Flexibilidad en la configuración.
* Recepción por multidifusión (''[[multicast]]'') con sincronización de tiempos.
* Sistema robusto en cuanto a consistencia de datos.
* Sistema multimaestro.
* Detección y señalización de errores.
* Retransmisión automática de tramas erróneas
* Distinción entre errores temporales y fallos permanentes de los nodos de la red, y desconexión autónoma de nodos defectuosos.
 
CAN fue desarrollado inicialmente para aplicaciones en los [[automóvil]]es y por lo tanto la plataforma del protocolo es resultado de las necesidades existentes en el área de la automoción. La [[Organización Internacional para la Estandarización]] (ISO, ''International Organization for Standardization'') define dos tipos de redes CAN: una red de alta velocidad (hasta 1 Mbit/s), bajo el estándar ISO 11898-2, destinada para controlar el motor e interconectar las [[centralita electrónica|unidades de control electrónico]] (ECU); y una red de baja velocidad tolerante de fallos (menor o igual a 125 kbit/s), bajo el estándar ISO 11519-2/ISO 11898-3, dedicada a la comunicación de los dispositivos electrónicos internos de un automóvil como son control de puertas, techo corredizo, luces y asientos.
 
==Tipos de bus CAN==
 
La especificación de los buses CAN está recogida en el conjunto de estándares ISO&nbsp;11898. Dicha especificación define las dos primeras capas, la [[capa física]] y la [[capa de enlace de datos]], del [[modelo OSI]] de interconexión de sistemas. Sobre la base de dichos estándares, los buses CAN se pueden clasificar en dos tipos:
*CAN de alta velocidad (hasta 1&nbsp;Mbit/s).
*CAN de baja velocidad tolerante de fallos (hasta 125&nbsp;kbit/s).
 
=== CAN de alta velocidad ===
 
'''ISO&nbsp;11898-2''', también llamado CAN de alta velocidad, usa un único bus lineal terminado en cada extremo con sendas resistencias de 120&nbsp;Ω. Es importante que el valor de las resistencias de terminación coincida con la [[impedancia característica]] del bus, definida en 120&nbsp;Ω, para evitar reflexiones en la línea que podrían perturbar la comunicación. Con esta configuración la velocidad del bus es de un máximo de 1&nbsp;Mbit/s.
 
[[Archivo:CAN ISO11898-2 Network.png|thumb|centro|700px|Bus CAN de alta velocidad. ISO 11898-2]]
 
==== Extensiones del CAN de alta velocidad ====
 
La Organización Internacional para la Normalización (ISO) ha definido unas extensiones opcionales de la capa física del bus CAN de alta velocidad (ISO&nbsp;11898-2). Dichas extensiones están descritas en sus respectivos estándares y son útiles para sistemas con requisitos específicos. También definen la compatibilidad con ISO&nbsp;11898-2.
 
*'''ISO&nbsp;11898-5''' especifica la capa física con tasas de transmisión de hasta 1&nbsp;Mbit/s para sistemas que requieren bajo consumo de energía cuando no hay comunicaciones activas en el bus de datos. ISO&nbsp;11898-5 representa una extensión de ISO&nbsp;11898-2 y aquellas implementaciones que cumplan cualquiera de estas dos normas, es decir, los nodos CAN de alta velocidad con y sin bajo consumo de energía, son interoperables entre sí y pueden coexistir en la misma red.<ref>{{cita web|título=ISO 11898-5:2007|url=http://www.iso.org/iso/catalogue_detail.htm?csnumber=41284|editorial=International Organization for Standardization|fechaacceso=22 de agosto de 2015}}</ref>
 
*'''ISO&nbsp;11898-6''' es una extensión de ISO&nbsp;11898-2 y de ISO&nbsp;11898-5. Esta extensión especifica la capa física de un bus CAN de hasta 1&nbsp;Mbit/s, proporcionando un método selectivo de activación de nodos (''wake-up'') usando tramas CAN configurables. Las implementaciones de ISO&nbsp;11898-6, ISO&nbsp;11898-2 e ISO&nbsp;11898-5 son interoperables y se pueden usar en una misma red simultáneamente.<ref>{{cita web|título=ISO 11898-6:2013|url=http://www.iso.org/iso/catalogue_detail.htm?csnumber=59165|editorial=International Organization for Standardization|fechaacceso=22 de agosto de 2015}}</ref>
 
=== CAN de baja velocidad tolerante de fallos ===
 
'''ISO&nbsp;11898-3''', también llamado CAN de baja velocidad tolerante de fallos, puede utilizar un bus lineal, un bus en estrella o múltiples buses en estrella conectados por un bus lineal. El bus está terminado en cada nodo por una fracción de la resistencia de terminación total. La resistencia de terminación total debería ser un valor próximo a 100&nbsp;Ω, pero no inferior a 100&nbsp;Ω. Este estándar permite velocidades de hasta 125&nbsp;kbit/s.
 
[[Archivo:CAN ISO11898-3 Network.png|700px|miniaturadeimagen|centro|Bus CAN de baja velocidad tolerante de fallos. ISO 11898-3]]
 
=== CAN FD (''flexible data-rate'') ===
 
En 2011 Bosch comenzó a trabajar en una evolución del CAN. En 2012 lanzó CAN FD 1.0, que ofrece un aumento de la tasa de transferencia después del arbitraje. De momento (2015), solo se ha definido la capa de enlace de datos del CAN FD. La frecuencia se puede multiplicar hasta por 8 y el número máximo de bytes por trama aumenta, siendo posible transmitir una mayor cantidad de datos en el mismo tiempo.<ref name=FD /> La especificación está recogida en el borrador de norma ISO/DIS&nbsp;11898-1:2015.
 
== Capa física ==
 
Define los aspectos del medio físico para la transmisión de datos entre nodos de una red CAN, las características materiales y eléctricas y la transmisión del flujo de bits a través del bus.
 
===Niveles de tensión del bus===
 
[[Archivo:Canbus levels.svg|miniaturadeimagen|Niveles de tensión del bus CAN]]
La transmisión de señales en un bus CAN se lleva a cabo a través de dos cables trenzados. Las señales de estos cables se denominan CAN_H (''CAN high'') y CAN_L (''CAN low'') respectivamente. El bus tiene dos estados definidos: estado dominante y estado recesivo. En estado recesivo, los dos cables del bus se encuentran al mismo nivel de tensión (''common-mode voltage''), mientras que en estado dominante hay una diferencia de tensión entre CAN_H y CAN_L de al menos 1,5&nbsp;V. La transmisión de señales en forma de tensión diferencial, en comparación con la transmisión en forma de tensiones absolutas, proporciona protección frente a interferencias electromagnéticas.
 
La tensión en modo común puede estar, según la especificación, en cualquier punto entre -2 y 7&nbsp;V. La tensión diferencial del bus (la diferencia entre CAN_H y CAN_L) en modo dominante debe estar entre 1,5 y 3&nbsp;V. No se especifica, en cambio, que la tensión de modo común, cuando el bus está en modo recesivo, deba estar comprendida entre la tensión de CAN_L y la tensión de CAN_H cuando el bus está en modo dominante. Esto permite la conexión directa entre nodos que operen a distintas tensiones, e incluso nodos que sufran diferencia de tensión entre sus respectivas tierras.<ref>{{cita web|título=AN228: A CAN Physical Layer Discussion|url=http://ww1.microchip.com/downloads/en/AppNotes/00228a.pdf|editorial=Microchip Technology Inc.|fecha=2002|fechaacceso=22 de agosto de 2015}}</ref><ref>{{cita web|título=SLLA337: Overview of 3.3V CAN Transcievers|url=http://www.ti.com/lit/an/slla337/slla337.pdf|editorial=Texas Instruments Inc.|fecha=2013|fechaacceso=22 de agosto de 2015}}</ref>
 
===Cable y conectores===
[[Archivo:DE-9 Male.svg|miniaturadeimagen|Conector [[D-sub]] de 9 pines (DE-9)]]
Los distintos nodos de un bus CAN deben estar interconectados mediante un par de cables trenzados con una [[impedancia característica]] de 120&nbsp;Ω, y puede ser [[cable apantallado]] o sin apantallar. El cable trenzado proporciona protección frente a interferencias electromagnéticas externas. Y si, además, está apantallado, la protección será mayor pero a cambio de un incremento en el coste del cable.
 
El estándar CAN, a diferencia de otros estándares como el [[USB]], no especifica ningún tipo de conector para el bus y por lo tanto cada aplicación puede tener un conector distinto. 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.
 
Las propiedades de la línea de transmisión limitan el ancho de banda de los datos. Orientativamente, se aceptan los siguientes valores como límite de longitud del bus en función de la tasa de transferencia:<ref>{{cita web|título=SLLA 270: Controller Area Network physical layer requirements|url=http://www.ti.com/lit/an/slla270/slla270.pdf|editorial=Texas Instruments Inc.|fecha=2008|fechaacceso=22 de agosto de 2015}}</ref>
{| class="wikitable col1cen col2cen" style="margin: 1em auto 1em auto;"
|-
! Longitud del bus<br>(m) !! Tasa de transferencia<br>(kbit/s)
|-
| 40 || 1000
|-
| 100 || 500
|-
| 200 || 250
|-
| 500 || 100
|-
| 1000 || 50
|}
 
=== Sincronización de bits ===
 
Todos los nodos de un bus CAN deben trabajar con la misma tasa de transferencia nominal. Dado que el bus CAN no usa una señal de reloj separada, factores como la [[deriva de reloj]] y la tolerancia de los [[oscilador]]es causan que haya una diferencia entre la tasa de transferencia real de los distintos nodos. Por ello es necesario un método de sincronización entre los nodos. La sincronización es especialmente importante en la fase de arbitraje ya que durante el arbitraje cada nodo debe ser capaz de observar tanto los datos transmitidos por él como los datos transmitidos por los demás nodos.
 
El requisito mínimo para un bus CAN es que dos nodos, estando en sendos extremos de la red con el máximo retardo de propagación entre ellos, y cuyos controladores CAN tienen unas frecuencias de reloj en los límites opuestos de la tolerancia de frecuencia especificada, sean capaces de recibir y leer correctamente todos los mensajes transmitidos por la línea. Esto incluye que todos los nodos muestreen el valor correcto de cada bit.<ref>{{cita web|título=AN1798: CAN bit timing requirements|url=http://www.freescale.com/files/microcontrollers/doc/app_note/AN1798.pdf|editorial=Freescale Semiconductor|fechaacceso=22 de agosto de 2015}}</ref>
 
El controlador CAN espera que una transición del bus de recesivo a dominante ocurra en un determinado intervalo de tiempo. Si la transición no ocurre en el intervalo esperado, el controlador reajusta la duración del siguiente bit en consecuencia. Dicho ajuste se lleva a cabo dividiendo cada bit en intervalos o ''cuantos'' de tiempo (del latín ''quantum'') y asignando los intervalos a los cuatro segmentos de cada bit: sincronización, propagación, segmento de fase 1 y segmento de fase 2.
[[Archivo:CAN Bit Timing2.svg|marco|Ejemplo de cuantificación de un bit CAN con 10 ''cuantos'' de tiempo por bit|centro]]
*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. El punto de muestreo se encuentra habitualmente cerca del 75&nbsp;% de la duración total del bit.
 
La configuración de los segmentos del bit se hacen sobre la base de la frecuencia de reloj de cada controlador CAN. Los segmentos se configuran individualmente para cada controlador en un mismo bus. A efectos prácticos, la configuración de los segmentos del bit supone un compromiso entre la tasa de transferencia y tolerancia de los osciladores.
 
== Capa de enlace de datos ==
 
El protocolo CAN proporciona un acceso multimaestro al bus con una resolución determinista de las colisiones. La capa de enlace de datos define el método de acceso al medio así como los tipos de tramas para el envío de mensajes.
 
===Acceso al medio (arbitraje)===
 
La especificación del CAN usa los términos “dominante” y “recesivo” para referirse a los bits, donde un bit dominante equivale al valor lógico 0 y un bit recesivo equivale al valor lógico 1. 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 los primeros bits de una trama o mensaje, durante la transmisión de lo que se conoce como 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 para intentarlo de nuevo cuando finalice la trama actual. Conociendo los identificadores de todos las tramas que intentan ser transmitidas, se puede establecer de manera determinista 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====
[[Archivo:CAN-Bus-frame in base format without stuffbits.svg|marco|center|Trama CAN en formato base con las tensiones eléctricas del bus y sin bits de relleno]]
El formato de la trama es el siguiente:
{| class="wikitable"
|- "
! Nombre del campo !! Longitud (bits) !! Finalidad
|-
| Inicio de trama || 1 || Demarca el comienzo de una transmisión.
|-
| bgcolor=lime | Identificador - ID (verde) || 11 || Un identificador (único) que también representa la prioridad de la trama.
|-
| bgcolor=cyan | 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.
|-
| bgcolor=yellow | Código de longitud de datos - DLC (amarillo)|| 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.
|-
| bgcolor=red | Campo de datos (rojo) || 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:
 
{| class="wikitable"
|- "
! 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).
|}
 
===Trama remota===


*Prioridad de mensajes.
Generalmente los datos se transmiten como trama de datos. Sin embargo, es posible que un nodo requiera unos datos desde otro nodo. En ese caso, el primero puede enviar una trama remota para pedir el envío de algún dato. El nodo que requiere la información envía entonces una trama con una petición de transmisión remota (RTR = 1; recesivo). Las tramas remotas o de petición de transmisión remota solo se diferencian de las tramas de datos en que las tramas remotas no tienen campo de datos.
*Garantía de tiempos de latencia.
*Flexibilidad en la configuración.
*Recepción por multidifusión (''multicast'') con sincronización de tiempos.
*Sistema robusto en cuanto a consistencia de datos.
*Sistema multimaestro.
*Detección y señalización de errores.
*Retransmisión automática de tramas erróneas
*Distinción entre errores temporales y fallas permanentes de los nodos de la red, y desconexión autónoma de nodos defectuosos.


CAN fue desarrollado, inicialmente para aplicaciones en los automóviles y por lo tanto la plataforma del protocolo es resultado de las necesidades existentes en el área de la automoción. La Organización Internacional para la Estandarización (ISO, ''International Organization for Standarization'') define dos tipos de redes CAN: una red de alta velocidad (hasta 1 Mbps), bajo el estándar ISO 11898-2, destinada para controlar el motor e interconectar la unidades de control electrónico (ECU); y una red de baja velocidad tolerante a fallos (menor o igual a 125 Kbps), bajo el estándar ISO 11519-2/ISO 11898-3, dedicada a la comunicación de los dispositivos electrónicos internos de un automóvil como son control de puertas, techo corredizo, luces y asientos.
===Trama de error===


== Protocolo de comunicaciones CAN ==
La trama de error es una trama especial que viola las reglas de formato de las tramas CAN. Se transmite cuando un nodo detecta un mensaje erróneo, y provoca que los demás nodos también transmitan una trama de error. Un complejo mecanismo de contadores de error integrado en el controlador asegura que un nodo no bloquee el bus con continuas tramas de error.


CAN es un protocolo de comunicaciones serie que soporta control distribuido en tiempo real con un alto nivel de seguridad y multiplexación.
===Trama de sobrecarga ===


El establecimiento de una red CAN para interconectar los dispositivos electrónicos internos de un vehículo tiene la finalidad de sustituir o eliminar el cableado. Las ECUs, sensores, sistemas antideslizantes, etc. se conectan mediante una red CAN a velocidades de transferencia de datos de hasta 1 Mbps.
Es similar a la trama de error en cuanto a que viola el formato de las tramas CAN. Es transmitida por un nodo que se encuentra muy ocupado y el bus proporciona entonces un retardo extra entre tramas.


De acuerdo al modelo de referencia OSI (''Open Systems Interconnection''), la arquitectura de protocolos CAN incluye tres capas: '''física''', '''de enlace de datos''' y '''aplicación''', además de una capa especial para gestión y control del nodo llamada '''capa de supervisor'''.
===Separación entre tramas===


*'''Capa física:''' define los aspectos del medio físico para la transmisión de datos entre nodos de una red CAN, los más importantes son niveles de señal, representación, sincronización y tiempos en los que los bits se transfieren al bus. La especificación del protocolo CAN no define una capa física, sin embargo, los estándares ISO 11898 establecen las características que deben cumplir las aplicaciones para la transferencia en alta y baja velocidad.
Las tramas de datos y remotas  están separadas por al menos tres bits recesivos (1). Después de eso, si se detecta un bit dominante (0), es considerado como el inicio de una nueva trama. Las tramas de error y de sobrecarga no respetan el espaciado entre tramas.


*'''Capa de enlace de datos:''' define las tareas independientes del método de acceso al medio, además debido a que una red CAN brinda soporte para procesamiento en tiempo real a todos los sistemas que la integran, el intercambio de mensajes que demanda dicho procesamiento requiere de un sistema de transmisión a frecuencias altas y retrasos mínimos. En redes multimaestro, la técnica de acceso al medio es muy importante ya que todo nodo activo tiene los derechos para controlar la red y acaparar los recursos. Por lo tanto la capa de enlace de datos define el método de acceso al medio así como los tipos de tramas para el envío de mensajes
===Bits de relleno (''bit stuffing'')===


Cuando un nodo necesita enviar información a través de una red CAN, puede ocurrir que varios nodos intenten transmitir simultáneamente. CAN resuelve lo anterior al asignar prioridades mediante el identificador de cada mensaje, donde dicha asignación se realiza durante el diseño del sistema en forma de números binarios y no puede modificarse dinámicamente. El identificador con el menor número binario es el que tiene mayor prioridad.
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. Esta práctica es necesaria debido a la [[Códigos NRZ|codificación sin vuelta a cero]] del protocolo CAN. Los bits insertados son eliminados por el receptor.


El método de acceso al medio utilizado es el de Acceso Múltiple por Detección de Portadora, con Detección de Colisiones y Arbitraje por Prioridad de Mensaje (CSMA/CD+AMP, ''Carrier Sense Multiple Access with Collision Detection and Arbitration Message Priority''). De acuerdo con este método, los nodos en la red que necesitan transmitir información deben esperar a que el bus esté libre (detección de portadora); cuando se cumple esta condición, dichos nodos transmiten un bit de inicio (acceso múltiple). Cada nodo lee el bus bit a bit durante la transmisión de la trama y comparan el valor transmitido con el valor recibido; mientras los valores sean idénticos, el nodo continúa con la transmisión; si se detecta una diferencia en los valores de los bits, se lleva a cabo el mecanismo de arbitraje.
Todos los campos de la trama son rellenados a excepción del delimitador CRC, el acuse de recibo ACK, y el fin de trama. Cuando un nodo detecta seis bits consecutivos iguales en un campo susceptible de ser rellenado lo considera un error y emite un error activo. Un error activo consiste en seis bits consecutivos dominantes y viola la regla de relleno de bits.


CAN establece dos formatos de tramas de datos (''data frame'') que difieren en la longitud del campo del identificador, las tramas estándares (''standard frame'') con un identificador de 11 bits definidas en la especificación CAN 2.0A, y las tramas extendidas (''extended frame'') con un identificador de 29 bits definidas en la especificación CAN 2.0B.
La regla de los bits de relleno implica que una trama puede ser más larga de lo esperado si se suman los bits teóricos de cada campo de la trama.


Para la transmisión y control de mensajes CAN, se definen cuatro tipos de tramas: de datos, remota (''remote frame''), de error (''error frame'') y de sobrecarga (''overload frame''). Las tramas remotas también se establecen en ambos formatos, estándar y extendido, y tanto las tramas de datos como las remotas se separan de tramas precedentes mediante espacios entre tramas (''interframe space'').
[[Archivo:CAN-Frame mit Pegeln mit Stuffbits.png|marco|centro|Trama CAN antes y después de la adición de bits de relleno (en morado)]]


En cuanto a la detección y manejo de errores, un controlador CAN cuenta con la capacidad de detectar y manejar los errores que surjan en una red. Todo error detectado por un nodo, se notifica inmediatamente al resto de los nodos.


*'''Capa de supervisor:''' La sustitución del cableado convencional por un sistema de bus serie presenta el problema de que un nodo defectuoso puede bloquear el funcionamiento del sistema completo. Cada nodo activo transmite una bandera de error cuando detecta algún tipo de error y puede ocasionar que un nodo defectuoso pueda acaparar el medio físico. Para eliminar este riesgo el protocolo CAN define un mecanismo autónomo para detectar y desconectar un nodo defectuoso del bus, dicho mecanismo se conoce como aislamiento de fallos.
==Protocolos basados en CAN==


*'''Capa de aplicación:''' Existen diferentes estándares que definen la capa de aplicación; algunos son muy específicos y están relacionados con sus campos de aplicación. Entre las capas de aplicación más utilizadas cabe mencionar CAL, CANopen, DeviceNet, SDS (''Smart Distributed System''), OSEK, CANKingdom.
Los estándares del bus CAN solo especifican las dos primeras capas, la capa física y la capa de enlace de datos, según el modelo OSI. Puesto que CAN no incluye tareas de capas superiores tales como direccionamiento, control de acceso, transporte de bloques de datos mayores que una trama, etc., han ido surgiendo protocolos en capas superiores basados en CAN, sobre todo en la [[capa de aplicación]].  


Cabe mencionar los siguientes:
* [[ARINC 825]] (para la aviación)
* [[CANaerospace]] (para la aviación)
* [[CAN Kingdom]]
* [[CANopen]] (para automatización industrial)
* [[CAN Calibration Protocol|CCP]] / [[Universal Measurement and Calibration Protocol|XCP]]
* [[DeviceNet]] (para automatización industrial)
* [[EnergyBus]] (para vehículos eléctricos)
* [[GMLAN]] (de [[General Motors]])
* [[ISO 15765-4]]
* [[ISO 11783]] o ISOBUS (para la agricultura)
* [[ISO 14229]]
* [[J1939|SAE J1939]] (para vehículos pesados)
* [[ISO 11992]] (para tráileres pesados)
* [[MilCAN]]
* [[NMEA 2000]] (para la industria marina)
* [[OSEK]]
* [[RV-C]] (para vehículos recreacionales)
* [[SafetyBUS p]] (para la automatización industrial)
* [[SmartCraft]]
* Smart Distributed System (SDS)
* [[Very Simple Control Protocol|VSCP]] (para la [[inmótica|automatización de edificios]])


== Otros protocolos de comunicación ==
== Véase también ==
* [[IEC 62196]]
;Protocolos de comunicación para el automóvil:
* [[FlexRay]]
* [[Local Interconnect Network|LIN]]
* [[MOST]]


*[[RS-232]]
;Protocolos de comunicación genéricos:
*[[RS-485]]
* [[RS-232]]
* [[RS-485]]


== Referencias ==
{{listaref}}


==Enlaces externos==
== Enlaces externos ==
{{commonscat|CAN bus}}
* http://www.canbus.galeon.com/electronica/canbus.htm
* http://www.canbus.galeon.com/electronica/canbus.htm
* http://www.iespana.es/mecanicavirtual/canbus.htm
* http://www.can-cia.org/
* http://www.can-cia.org/can/
* [https://canlist.org/ Plataforma independiente de la discusión CANLIST] (en inglés)
* [http://www.diagnostix.at/espanol/Enchufe_OBD_Generalidades_OBD2_2x2_EOBD_Interface_KWP2000_ECU.html Enchufe OBD CAN-BUS], Enchufe OBD: Generalidades CAN-BUS
* [http://www.kvaser.com/about-can/the-can-protocol/ CAN Protocolo Tutorial] (en inglés)
* [http://www.diagnostix.at/espanol/Ocupacion_de_los_enchufes_en_los_BMW_Scanner_Auto_OBD2_OBD1_2x2_EOBD_20_PIN.html BMW CAN-CUS], Ocupación de los enchufes en los BMW CAN-BUS
* [http://www.diagnostix.at/espanol/Ocupacion_de_los_enchufes_2x2_VAG_COM_Adapter_OBD_Software_Diagnostic_Laptop_Notebook.html 2x2 VAG CAN-BUS], Ocupación de los enchufes 2x2 VAG CAN-BUS


{{wp}}
{{wp}}
[[Categoría:Componentes del automóvil]]
[[Categoría:Componentes del automóvil]]
[[Categoría:Buses]]
[[Categoría:Buses seriales]]
[[Categoría:Robert Bosch GmbH]]


[[ar:موصل كان]]
[[ar:موصل كان]]

Revisión actual - 15:56 31 dic 2021

CAN (siglas del inglés Controller Area Network) es un protocolo de comunicaciones desarrollado por la firma alemana Robert Bosch GmbH, basado en una topología bus para la transmisión de mensajes en entornos distribuidos. Además ofrece una solución a la gestión de la comunicación entre múltiples CPUs (unidades centrales de proceso).

El protocolo de comunicaciones CAN proporciona los siguientes beneficios:

  • Ofrece alta inmunidad a las interferencias, habilidad para el autodiagnóstico y la reparación de errores de datos.
  • Es un protocolo de comunicaciones normalizado, con lo que se simplifica y economiza la tarea de comunicar subsistemas de diferentes fabricantes sobre una red común o bus.
  • El procesador anfitrión (host) delega la carga de comunicaciones a un periférico inteligente, por lo tanto el procesador anfitrión dispone de mayor tiempo para ejecutar sus propias tareas.
  • Al ser una red multiplexada, reduce considerablemente el cableado y elimina las conexiones punto a punto, excepto en los enganches.

Historia y evolución del protocolo CAN

El desarrollo del protocolo CAN comenzó en 1983 en la empresa Robert Bosch GmbH (comúnmente conocida como Bosch). El protocolo fue oficialmente lanzado en 1986 en el congreso de la Sociedad de Ingenieros Automotrices (SAE) en Detroit. Los primeros controladores CAN llegaron al mercado en 1987 de la mano de Intel y Philips.[1]

Bosch publicó posteriormente varias versiones de la especificación CAN, siendo la última de ellas la especificación CAN 2.0, publicada en 1991. Esta especificación consta de dos partes; la parte A para el formato estándar y la parte B para el formato extendido. Un dispositivo CAN que usa el formato estándar utiliza identificadores de 11 bits y es comúnmente referido como dispositivo CAN 2.0A. Un dispositivo CAN que usa el formato extendido utiliza identificadores de 29 bits y es comúnmente referido como dispositivo CAN 2.0B. Los estándares CAN 2.0A/B y otros documentos de referencia relacionados con CAN son de acceso libre a través de Bosch.[2]

En 1993 se publicó el estándar ISO 11898 del bus CAN y ha sido a partir de ese momento un estándar de la Organización Internacional para la Normalización. Actualmente el bus CAN está estandarizado por las siguientes normas:

  • ISO 11898-1:2015, Part 1: Data link layer and physical signalling
  • ISO 11898-2:2016, Part 2: High-speed medium access unit
  • ISO 11898-3:2006. Part 3: Low-speed, fault-tolerant, medium-dependent interface. Este estándar ha sido revisado y confirmado en 2015
  • ISO 11898-4:2004, Part 4: Time-triggered communication. Este estándar ha sido revisado y confirmado en 2013
  • ISO 11898-5:2007, Part 5: High-speed medium access unit with low power mode
  • ISO 11898-6:2013, Part 6: High-speed medium access unit with selective wake-up functionality
  • ISO 16845:2016, Conformance test plan

En 2011 Bosch, en cooperación con los fabricantes de automóviles y otros expertos del bus CAN, comenzó a desarrollar la siguiente generación del CAN: el protocolo CAN FD (flexible data-rate). El CAN FD es compatible hacia atrás, es decir, un controlador CAN FD es capaz de comprender un mensaje CAN clásico (o CAN 2.0). Por el contrario, un controlador CAN clásico destruye un mensaje CAN FD emitiendo un mensaje de error. El nuevo CAN FD es capaz de transmitir datos más rápido que 1 Mbps (la velocidad máxima del CAN clásico). Ambos protocolos, el CAN clásico y el CAN FD, están estandarizados en la norma ISO/DIS 11898-1.[3][4]

Principales características de CAN

CAN se basa en el modelo productor/consumidor, el cual es un concepto, o paradigma de comunicaciones de datos, que describe una relación entre un productor y uno o más consumidores. CAN es un protocolo orientado a mensajes, es decir la información que se va a intercambiar se descompone en mensajes, a los cuales se les asigna un identificador y se encapsulan en tramas para su transmisión. Cada mensaje tiene un identificador único dentro de la red, con el cual los nodos deciden aceptar o no dicho mensaje. Dentro de sus principales características se encuentran:

  • Prioridad de mensajes.
  • Garantía de tiempos de latencia.
  • Flexibilidad en la configuración.
  • Recepción por multidifusión (multicast) con sincronización de tiempos.
  • Sistema robusto en cuanto a consistencia de datos.
  • Sistema multimaestro.
  • Detección y señalización de errores.
  • Retransmisión automática de tramas erróneas
  • Distinción entre errores temporales y fallos permanentes de los nodos de la red, y desconexión autónoma de nodos defectuosos.

CAN fue desarrollado inicialmente para aplicaciones en los automóviles y por lo tanto la plataforma del protocolo es resultado de las necesidades existentes en el área de la automoción. La Organización Internacional para la Estandarización (ISO, International Organization for Standardization) define dos tipos de redes CAN: una red de alta velocidad (hasta 1 Mbit/s), bajo el estándar ISO 11898-2, destinada para controlar el motor e interconectar las unidades de control electrónico (ECU); y una red de baja velocidad tolerante de fallos (menor o igual a 125 kbit/s), bajo el estándar ISO 11519-2/ISO 11898-3, dedicada a la comunicación de los dispositivos electrónicos internos de un automóvil como son control de puertas, techo corredizo, luces y asientos.

Tipos de bus CAN

La especificación de los buses CAN está recogida en el conjunto de estándares ISO 11898. Dicha especificación define las dos primeras capas, la capa física y la capa de enlace de datos, del modelo OSI de interconexión de sistemas. Sobre la base de dichos estándares, los buses CAN se pueden clasificar en dos tipos:

  • CAN de alta velocidad (hasta 1 Mbit/s).
  • CAN de baja velocidad tolerante de fallos (hasta 125 kbit/s).

CAN de alta velocidad

ISO 11898-2, también llamado CAN de alta velocidad, usa un único bus lineal terminado en cada extremo con sendas resistencias de 120 Ω. Es importante que el valor de las resistencias de terminación coincida con la impedancia característica del bus, definida en 120 Ω, para evitar reflexiones en la línea que podrían perturbar la comunicación. Con esta configuración la velocidad del bus es de un máximo de 1 Mbit/s.

Bus CAN de alta velocidad. ISO 11898-2

Extensiones del CAN de alta velocidad

La Organización Internacional para la Normalización (ISO) ha definido unas extensiones opcionales de la capa física del bus CAN de alta velocidad (ISO 11898-2). Dichas extensiones están descritas en sus respectivos estándares y son útiles para sistemas con requisitos específicos. También definen la compatibilidad con ISO 11898-2.

  • ISO 11898-5 especifica la capa física con tasas de transmisión de hasta 1 Mbit/s para sistemas que requieren bajo consumo de energía cuando no hay comunicaciones activas en el bus de datos. ISO 11898-5 representa una extensión de ISO 11898-2 y aquellas implementaciones que cumplan cualquiera de estas dos normas, es decir, los nodos CAN de alta velocidad con y sin bajo consumo de energía, son interoperables entre sí y pueden coexistir en la misma red.[5]
  • ISO 11898-6 es una extensión de ISO 11898-2 y de ISO 11898-5. Esta extensión especifica la capa física de un bus CAN de hasta 1 Mbit/s, proporcionando un método selectivo de activación de nodos (wake-up) usando tramas CAN configurables. Las implementaciones de ISO 11898-6, ISO 11898-2 e ISO 11898-5 son interoperables y se pueden usar en una misma red simultáneamente.[6]

CAN de baja velocidad tolerante de fallos

ISO 11898-3, también llamado CAN de baja velocidad tolerante de fallos, puede utilizar un bus lineal, un bus en estrella o múltiples buses en estrella conectados por un bus lineal. El bus está terminado en cada nodo por una fracción de la resistencia de terminación total. La resistencia de terminación total debería ser un valor próximo a 100 Ω, pero no inferior a 100 Ω. Este estándar permite velocidades de hasta 125 kbit/s.

Bus CAN de baja velocidad tolerante de fallos. ISO 11898-3

CAN FD (flexible data-rate)

En 2011 Bosch comenzó a trabajar en una evolución del CAN. En 2012 lanzó CAN FD 1.0, que ofrece un aumento de la tasa de transferencia después del arbitraje. De momento (2015), solo se ha definido la capa de enlace de datos del CAN FD. La frecuencia se puede multiplicar hasta por 8 y el número máximo de bytes por trama aumenta, siendo posible transmitir una mayor cantidad de datos en el mismo tiempo.[4] La especificación está recogida en el borrador de norma ISO/DIS 11898-1:2015.

Capa física

Define los aspectos del medio físico para la transmisión de datos entre nodos de una red CAN, las características materiales y eléctricas y la transmisión del flujo de bits a través del bus.

Niveles de tensión del bus

Niveles de tensión del bus CAN

La transmisión de señales en un bus CAN se lleva a cabo a través de dos cables trenzados. Las señales de estos cables se denominan CAN_H (CAN high) y CAN_L (CAN low) respectivamente. El bus tiene dos estados definidos: estado dominante y estado recesivo. En estado recesivo, los dos cables del bus se encuentran al mismo nivel de tensión (common-mode voltage), mientras que en estado dominante hay una diferencia de tensión entre CAN_H y CAN_L de al menos 1,5 V. La transmisión de señales en forma de tensión diferencial, en comparación con la transmisión en forma de tensiones absolutas, proporciona protección frente a interferencias electromagnéticas.

La tensión en modo común puede estar, según la especificación, en cualquier punto entre -2 y 7 V. La tensión diferencial del bus (la diferencia entre CAN_H y CAN_L) en modo dominante debe estar entre 1,5 y 3 V. No se especifica, en cambio, que la tensión de modo común, cuando el bus está en modo recesivo, deba estar comprendida entre la tensión de CAN_L y la tensión de CAN_H cuando el bus está en modo dominante. Esto permite la conexión directa entre nodos que operen a distintas tensiones, e incluso nodos que sufran diferencia de tensión entre sus respectivas tierras.[7][8]

Cable y conectores

Conector D-sub de 9 pines (DE-9)

Los distintos nodos de un bus CAN deben estar interconectados mediante un par de cables trenzados con una impedancia característica de 120 Ω, y puede ser cable apantallado o sin apantallar. El cable trenzado proporciona protección frente a interferencias electromagnéticas externas. Y si, además, está apantallado, la protección será mayor pero a cambio de un incremento en el coste del cable.

El estándar CAN, a diferencia de otros estándares como el USB, no especifica ningún tipo de conector para el bus y por lo tanto cada aplicación puede tener un conector distinto. 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.

Las propiedades de la línea de transmisión limitan el ancho de banda de los datos. Orientativamente, se aceptan los siguientes valores como límite de longitud del bus en función de la tasa de transferencia:[9]

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

Sincronización de bits

Todos los nodos de un bus CAN deben trabajar con la misma tasa de transferencia nominal. Dado que el bus CAN no usa una señal de reloj separada, factores como la deriva de reloj y la tolerancia de los osciladores causan que haya una diferencia entre la tasa de transferencia real de los distintos nodos. Por ello es necesario un método de sincronización entre los nodos. La sincronización es especialmente importante en la fase de arbitraje ya que durante el arbitraje cada nodo debe ser capaz de observar tanto los datos transmitidos por él como los datos transmitidos por los demás nodos.

El requisito mínimo para un bus CAN es que dos nodos, estando en sendos extremos de la red con el máximo retardo de propagación entre ellos, y cuyos controladores CAN tienen unas frecuencias de reloj en los límites opuestos de la tolerancia de frecuencia especificada, sean capaces de recibir y leer correctamente todos los mensajes transmitidos por la línea. Esto incluye que todos los nodos muestreen el valor correcto de cada bit.[10]

El controlador CAN espera que una transición del bus de recesivo a dominante ocurra en un determinado intervalo de tiempo. Si la transición no ocurre en el intervalo esperado, el controlador reajusta la duración del siguiente bit en consecuencia. Dicho ajuste se lleva a cabo dividiendo cada bit en intervalos o cuantos de tiempo (del latín quantum) y asignando los intervalos a los cuatro segmentos de cada bit: sincronización, propagación, segmento de fase 1 y segmento de fase 2.

Ejemplo de cuantificación de un bit CAN con 10 cuantos de tiempo por bit
  • 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. El punto de muestreo se encuentra habitualmente cerca del 75 % de la duración total del bit.

La configuración de los segmentos del bit se hacen sobre la base de la frecuencia de reloj de cada controlador CAN. Los segmentos se configuran individualmente para cada controlador en un mismo bus. A efectos prácticos, la configuración de los segmentos del bit supone un compromiso entre la tasa de transferencia y tolerancia de los osciladores.

Capa de enlace de datos

El protocolo CAN proporciona un acceso multimaestro al bus con una resolución determinista de las colisiones. La capa de enlace de datos define el método de acceso al medio así como los tipos de tramas para el envío de mensajes.

Acceso al medio (arbitraje)

La especificación del CAN usa los términos “dominante” y “recesivo” para referirse a los bits, donde un bit dominante equivale al valor lógico 0 y un bit recesivo equivale al valor lógico 1. 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 los primeros bits de una trama o mensaje, durante la transmisión de lo que se conoce como 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 para intentarlo de nuevo cuando finalice la trama actual. Conociendo los identificadores de todos las tramas que intentan ser transmitidas, se puede establecer de manera determinista 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

Trama CAN en formato base con las tensiones eléctricas del bus y sin bits de relleno

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 - ID (verde) 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 (amarillo) 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 (rojo) 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).

Trama remota

Generalmente los datos se transmiten como trama de datos. Sin embargo, es posible que un nodo requiera unos datos desde otro nodo. En ese caso, el primero puede enviar una trama remota para pedir el envío de algún dato. El nodo que requiere la información envía entonces una trama con una petición de transmisión remota (RTR = 1; recesivo). Las tramas remotas o de petición de transmisión remota solo se diferencian de las tramas de datos en que las tramas remotas no tienen campo de datos.

Trama de error

La trama de error es una trama especial que viola las reglas de formato de las tramas CAN. Se transmite cuando un nodo detecta un mensaje erróneo, y provoca que los demás nodos también transmitan una trama de error. Un complejo mecanismo de contadores de error integrado en el controlador asegura que un nodo no bloquee el bus con continuas tramas de error.

Trama de sobrecarga

Es similar a la trama de error en cuanto a que viola el formato de las tramas CAN. Es transmitida por un nodo que se encuentra muy ocupado y el bus proporciona entonces un retardo extra entre tramas.

Separación entre tramas

Las tramas de datos y remotas están separadas por al menos tres bits recesivos (1). Después de eso, si se detecta un bit dominante (0), es considerado como el inicio de una nueva trama. Las tramas de error y de sobrecarga no respetan el espaciado entre tramas.

Bits de relleno (bit stuffing)

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. Esta práctica es necesaria debido a la codificación sin vuelta a cero del protocolo CAN. Los bits insertados son eliminados por el receptor.

Todos los campos de la trama son rellenados a excepción del delimitador CRC, el acuse de recibo ACK, y el fin de trama. Cuando un nodo detecta seis bits consecutivos iguales en un campo susceptible de ser rellenado lo considera un error y emite un error activo. Un error activo consiste en seis bits consecutivos dominantes y viola la regla de relleno de bits.

La regla de los bits de relleno implica que una trama puede ser más larga de lo esperado si se suman los bits teóricos de cada campo de la trama.

Trama CAN antes y después de la adición de bits de relleno (en morado)


Protocolos basados en CAN

Los estándares del bus CAN solo especifican las dos primeras capas, la capa física y la capa de enlace de datos, según el modelo OSI. Puesto que CAN no incluye tareas de capas superiores tales como direccionamiento, control de acceso, transporte de bloques de datos mayores que una trama, etc., han ido surgiendo protocolos en capas superiores basados en CAN, sobre todo en la capa de aplicación.

Cabe mencionar los siguientes:

Véase también

Protocolos de comunicación para el automóvil
Protocolos de comunicación genéricos

Referencias

  1. «CAN History». CAN in Automation.
  2. Bosch Semiconductor CAN Literature Archivado 2014-agosto-19 en la Wayback Machine.
  3. «CAN knowledge» (en inglés). CAN in Automation. Consultado el 19 de agosto de 2015.
  4. 4,0 4,1 «CAN FD - The basic idea» (en inglés). CAN in Automation. Consultado el 19 de agosto de 2015.
  5. «ISO 11898-5:2007». International Organization for Standardization. Consultado el 22 de agosto de 2015.
  6. «ISO 11898-6:2013». International Organization for Standardization. Consultado el 22 de agosto de 2015.
  7. «AN228: A CAN Physical Layer Discussion». Microchip Technology Inc. (2002). Consultado el 22 de agosto de 2015.
  8. «SLLA337: Overview of 3.3V CAN Transcievers». Texas Instruments Inc. (2013). Consultado el 22 de agosto de 2015.
  9. «SLLA 270: Controller Area Network physical layer requirements». Texas Instruments Inc. (2008). Consultado el 22 de agosto de 2015.
  10. «AN1798: CAN bit timing requirements». Freescale Semiconductor. Consultado el 22 de agosto de 2015.

Enlaces externos

Atribución

Este artículo proviene originalmente de Wikipedia
que lo licencia simultáneamente bajo las licencias

Creative Commons Reconocimiento - CompartirIgual 3.0
y la licencia de documentación libre GNU v.1.2 y posteriores
El Museo de los 8 Bits lo integra en su wiki bajo cc-by-sa-3.0

Creative Commons License
GNU head