# Controller Area Network (CAN) Bus Protocol
[TOC]
## Descripción de CAN
Estándar de comunicación tipo CSMA/CD+CR, serial, diferencial y descentralizado.
Forma parte de múltiples stacks de protocolos.
Este documento se centra en High Speed CAN 2.0 ISO 11898-2
### Características
* Sencillo, minimiza complejidad de cableado, programación sencilla.
* Estandarizado
* Adaptable, capaz de trabajar con par trenzado o solo con uno (ópticos o radio).
* Estructura de campos de bits definidos.
* Gran cantidad de nodos, hasta 110.
* Priorización de mensajes
* Hot-Swappable, nodos que tienen fallas se desconectan; agregar nodos no afecta al sistema.
* Velocidad Flexible, 2 redes CAN: una rápida de 1Mbps y otra lenta pero tolerante a fallos.
* Orientado a mensajes, no a direcciones.
* Multicast, todos los nodos acceden a un bus central de forma simultanea.
* Broadcasting, la información se envia a todos los destinos simultaneamente.
* Detección y señalización de errores, 5 mecanismos y capacidad de retransmisión.
### Posición en modelo OSI
**Figura 2: Modelo OSI**
CAN es protocolo de capa física y de enlace.
## Protocolo
### Topología de una red CAN
**Figura de red física**
Usualmente consiste en 2 cables diferenciales (CAN High y CAN Low), pero es posible ocupar solo uno.
Los nodos se conectan directamente a la red, quedando paralelos entre si.
La red puede encontrarse en 2 posibles estados:
* **Estado Recesivo (1 Lógico)**: Señales en modo de alta impedancia, voltajes de ~2.5 [V] tanto para CANH y CANL.
* **Estado Dominante (0 Lógico)**: señales traspasan umbrales pre-definidos. señal CANH se eleva a 3.5 [V], señal CANL baja a 1.5 [V].
Esta red es soporta *hot-swapping*, los nodos pueden conectarse y desconectarse sin perturbar la red.
### Nodo de red
Los nodos se interconectan en paralelo y cada uno escucha la red simultaneamente.
Son capaces de detectar el uso del canal, entonces si el bus esta ocupado no transmiten.
En caso de colisión, es posible detectarlo y retransmitir el mensaje.
Cada nodo tiene un ID,
* ID Estandar (CAN 2.0-A): 11 bits
* ID extendido (CAN 2.0-B): 29 bits
La prioridad de un mensaje se determina por el ID, menor valor tiene mayor prioridad.
Todos los nodos participan en el proceso de transmisión a nivel de bit.
**Transmisión correcta**: Nodos receptores indican Acnowledge.
**Transmisión fallida**: Nodos receptores indican error, se reintenta la transmisión.
## Protocolo
### Topología de una red CAN
**Figura de red física**
Usualmente consiste en 2 cables diferenciales (CAN High y CAN Low), pero es posible ocupar solo uno.
Los nodos se conectan directamente a la red, quedando paralelos entre si.
La red puede encontrarse en 2 posibles estados:
* **Estado Recesivo (1 Lógico)**: Señales en modo de alta impedancia, voltajes de ~2.5 [V] tanto para CANH y CANL.
* **Estado Dominante (0 Lógico)**: señales traspasan umbrales pre-definidos. señal CANH se eleva a 3.5 [V], señal CANL baja a 1.5 [V].
Esta red es soporta *hot-swapping*, los nodos pueden conectarse y desconectarse sin perturbar la red.
### Nodo de red
Los nodos se interconectan en paralelo y cada uno escucha la red simultaneamente.
Son capaces de detectar el uso del canal, entonces si el bus esta ocupado no transmiten.
En caso de colisión, es posible detectarlo y retransmitir el mensaje.
Cada nodo tiene un ID,
* ID Estandar (CAN 2.0-A): 11 bits
* ID extendido (CAN 2.0-B): 29 bits
La prioridad de un mensaje se determina por el ID, menor valor tiene mayor prioridad.
Todos los nodos participan en el proceso de transmisión a nivel de bit.
**Transmisión correcta**: Nodos receptores indican Acnowledge.
**Transmisión fallida**: Nodos receptores indican error, se reintenta la transmisión.
## Frames o Tramas
En CAN se definen 4 tipos de frame:
* Data Frame: Transmisión de datos
* Remote Frame: Solicitud de datos a otro nodo
* Error Frame: Indica detección de una transmisión fallida.
* Overload Frame: Solicitud para detener la tranmisión, buffers llenos.
### Data Frame
Es la transmisión de datos útiles.
Contiene:
- campo de identificación de 11 o 29 bits (standard o extended)
- campos de identificación de errores de transmisión
- entre 0 y 8 bytes de información.
| Campo | Descripción | Tamaño (bits) |
|---------|----------------------------------|---------------|
| SOF | Start of Frame | 1 |
| ID | CAN Identifier | 11-29 |
| RTR | Remote Transmisión Request | 1 |
| Control | | 6 |
| Datos | | 0-64 |
| CRC | Cyclic Redundant Check, Checksum | 16 |
| ACK | Acknowledge, acuso de recibo | 2 |
| EOF | End of Frame | 7 |
### Remote Frame
Solicitud de datos, un nodo solicita a otro el envío de información.
Similar a trama datos, con 2 diferencias:
- Marca el bit RTR Remote Transfer Request.
- No contiene datos.
### Error Frame
Detección de un error en el bus.
Generado por un nodo, ocasiona que el resto repitan el mensaje de error.
Los campos son:
1. Error Flag: Indicador de Error
2. Delimitador de error, permite a los nodos reiniciar la comunicación.
### Overload Frame
Tipo particular de error.
Se genera por un receptor que no puede aceptar mensajes por nula disponibilidad de buffers de recepción.
El objetivo es proporcionar un retraso adicional entre mensajes.
**Figura 3: CAN Standard Data Frame**
## Manejo de Errores
CAN ocupa un sistema de confinamiento en los nodos que presentan muchas fallas.
Además, cada nodo tiene un par de contadores de errores, estos permiten definir un estado y en caso de entrar en uno crítico, desconectarse.
### Registros de errores
* Transmit Error Counter (TEC): número de errores de transmisión.
* Receive Error Counter (REC): número de errores de recepción.
transmisión exitosa: disminuye TEC en ? unidad.
recepción exitosa: ?
Error en transmisión aumenta TEC en 8 unidades.
Error en recepción aumenta REC en 1 unidad.
### Estados de nodo
En base al valor que tengan los contadores, un nodo puede conocer su estado.
#### Error Active (TEC <= 127 & REC <= 127)
Operación normal, toma parte en comunicación y propagación de errores.
Detección de error => transmisión Active Error Frame
#### Error Pasive (TEC > 127 | REC > 127)
Participa en comunicación pero debe esperar secuencia adicional de bits recesivos para transmitir.
Detección de error => transmisión Passive Error Frame (no incrementan contadores de otros nodos)
#### Buss Off: (TEC > 255)
Desconexión del bus.
No se transmite ni propagan errores.
Recuperación requiere solucionar falla desde Host e iniciar secuencia de reinicialización.
## Higher Layer Protocols (HLPs)
CAN proporciona herramientas para transferir pequeños paquetes de un nodo a otro. No es adecuado para proyectos que requieran manejo de red o envio de paquetes grandes, es por ello que se definen protocolos de alto nivel.
Los HLP permiten:
- Dar significado a los paquetes
- Facilitar incorporación de nuevos nodos.
- Estandarizar requerimientos y respuestas a implementar por dispositivos.
Algunas iniciativas de HLS:
- CANOpen
- DeviceNet
- CanKingdom
En industria automotriz es común que cada compañia desarrolla su propio protocolo, por ello existe gran variedad.
### Ejemplo: SAE J1939
Protocolo de alto nivel que proporciona mejoras en gestión de red, como envio de paquetes grandes.
Se diseña para trabajar sobre enlace CAN 2.0 extendido y es utilizado en industria de maquinaria pesada.
Soporta:
- Velocidad de operación de 250 [Kbps]
- comunicación P2P
- Mensajes broadcast
- Mensajes de hasta 1785 bytes.
El driver Kely KLS-H ocupa este protocolo.
## Capa Física
Señales diferenciales poseen voltaje de modo común ~2.5[V]
En general, redes compatibles tanto con dispositivos de 5 [V] y 3.3 [V].
### Cables
* Par trenzado blindado o no de impedancia característica 120 [Ω]
* bus terminado en extremos de impedancia de carga 120 [Ω].
### Conectores
Permiten enlazar a nodos al bus.
No existe una especificación, pero el formato usual es conector DB-9 con pin 3 y 5 transportando señales CANL y CANH respectivamente.
### Relación distancia-velocidad
A menor distancia, mayor tasa de transmisión.
Se considera un máximo de 1 km.
Hay una tabla de velocidades.
## Implementación CAN Controller: MCP2515
Implementa estandar CAN2.0B
velocidad máxima 1[Mb/s].
Conexión con el Host: SPI de 10 [MHz]
Contiene registros de configuración de parámetros de implementación, carga y almacenamiento de mensajes.
El host puede leerlos y escribirlos.
Implementa sistema de filtrado y máscaras.
Solo ciertos IDs ingresan el mensaje.
Un pin dedicado indica al host la recepción de algo.
host debe determinar si es mensaje o suceso de error en bus.
contiene 3 buffers de transmisión donde cargar mensajes para ser enviados posteriormente.
En caso de que existan múltiples buffers con mensajes cargados y se solicite la transmisión, el buffer mayor será el primero en enviar.
contiene 2 buffers de recepción con sistema de filtrado independiente.
Puede detectar y notificar transiciones de estado en base a TEC y REC.
## CSMA/CD+CR
Es la clasificación del algoritmo de acceso al medio compartido usado por CAN.
CSMA: Carrier Sense Multiple Access/Acceso Múltiple con detección de portadora,
Collision Detection: detección de colisión
Collision Resolution: Resolución de colisión
### Características
* Acceso múltiple, todos los nodos tienen la misma oportunidad de transmitir mensaje
* Detección de Portadora, todos los nodos pueden ver si el bus esta siendo utilizado.
* Detección de Colisión, los nodos detectan cuando dos nodos transmiten simultaneamente.
* Resolución de Colisión, se identifica la trama de mayor prioridad y se reenvia.
### Arbitraje CR
El método de arbitraje que utiliza CR para identificar la trama de mayor prioridad se basa en una topologı́a eléctrica que aplica una funcion lógica determinista a cada bit, que se resuelve con la prioridad del nivel definido como bit de tipo dominante.
Definiendo el bit dominante como equivalente al valor lógico ’0’ y bit recesivo al nivel lógico ’1’ se trata de una función AND de todos los bits transmitidos simultáneamente.
Cada transmisor escucha continuamente el valor presente en el bus, y se retira cuando ese valor no coincide con el que dicho transmisor ha forzado.
Mientras hay coincidencia la transmisión continua, finalmente el mensaje con identificador de máxima prioridad sobrevive.
Los demás nodos reintentarán la transmisión lo antes posible.