# Controller area network

El bus CAN (Controller Area Network en anglés) és un bus estàndard dissenyat per vehicles per comunicar microcontroladors i dispositius per comunicar-se amb altres aplicacions sense un ordinador (host). És un protocol basat en missatges inicialment dissenyat per a automòbils tot i que s'utilitza en altres aplicacions.
És un bus sèrie desenvolupat per Robert Bosch GmbH per a l'automòbil. Va ésser presentat juntament amb Intel el 1985. L'objectiu era reduir la quantitat de cables dels vehicles (hi havia fins a 2 km de cables en un vehicle) posant en comunicació diversos òrgans de comandament del vehicle amb un únic bus i no amb línies dedicades, reduint el pes del cablejat. Les normes CAN cobreixen del model OSI els nivells 1 (físic) i 2 (enllaç). El bus CAN ha estat normalitzat com a ISO 11898.
Hi ha dues normes. Aquestes dues normes són compatibles permetent que circulin missatges d'ambdues en un mateix bus.

## El CAN estàndard o CAN 2.0 A

    L'Identificador d'Objecte és d'11 bits permetent vehicular 2048 tipus de missatges.

## El CAN ampliat o CAN 2.0 B

    L'Identificador d'Objecte és de 29 bits, cosa que permet vehicular 536.870.912 tipus de missatges.
L'accés al bus segueix l'estàndard CSMA/CD+AMP (Accés Múltiple per detecció de portadora (ang. Carrier Sense), Detecció de Col·lisió i Arbitratge de Prioritat dels Missatges). L'encapçalament de la trama reflecteix la prioritat del missatge, permetent l'ús del bus CAN en xarxes de Temps Real.
CANopen és l'estàndard per a aplicacions del bus CAN en les capes del model OSI per damunt de les del bus (de Xarxa a Aplicació).

## Aplicacions
### Automoció

Els cotxes d'avui dia tenen aproximadament unes 70 Unitats de Control Electrònic per diversos subsistemes, entre altres el ABS, la transmissió, l'airbag, les portes, finestres, etc. Per aquesta raó i perquè en els automòbils hi ha molt de soroll es va dissenyar el bus CAN expressament per automòbils.

### Ciclisme

El protocol canBus s'utilitza des del 2009 en el sistema de canvi de marxes del Shimano Di2.

### Industria

Avui dia el bus CAN s'utilitza en els sistemes autònoms bàsicament perquè és barat.

### Entreteniment

També s'utilitza en alguns videojocs de simulació de cotxes.

## Història

Al febrer de 1986 Robert Bosch introdueix el bus serie Controller Area Network(CAN) al congrés Society of Automotive Engineers (SAE). Aquest va ser el començament d'un dels millors protocols de comunicació de tots els temps. Avui dia tots els automòbils del món estan equipats amb un CANbus.

### Cronologia

* 2000: Desenvolupament del TTCAN.

## Característiques

* Prioritat de missatges.
* Temps de resposta garantit.
* Configuració flexible.
* Recepció per multidifusió (Multicast) amb sincronització.
* Sistema robust, consistència de dades.
* Sistema multi-Master.
* Detecció i senyalització d'errors.
* Detecció automàtica de trames errònies.
* Detecció entre errors puntuals i fallades permanents dels nodes de la xarxa i desconnexió automàtica dels nodes defectuosos

## Arquitectura

El bus CAN és un bus serial estàndard multi-master per a connexions entre ECUs també anomenades nodes. És necessitem dos o més nodes en una xarxa CAN per poder-se comunicar. La complexitat del node pot anar des d'un simple dispositiu d'entrada sortida fins a un sistema encastat amb una interfície CAN i un software sofisticat.
Tots els nodes estan comunicats amb els altres amb 2 cables. Els cables són dos parells trenats.
L'ISO 11898-2, també anomenada "high speed CAN" utilitza busos lineals acabats amb resistors de 120 oms.
El bus CAN ultraràpid s'utilitza habitualment en l'automoció i la indústria on els bus va d'un medi a un altre. La tolerància a fallades del bus CAN fa que sovint s'utilitzi quan grups de nodes han de comunicar-se.
Cada node ha de tindre com a mínim:
* Una unitat central de procés, ja sigui un microprocessador o un host.
** Els sensors i actuadors poden ser connectats al processador host.
* Un controlador CAN, sovint incorporat al microcontrolador.
** El controlador guardara els missatges que rep per parts fins que tingui el missatge sencer.
** Després enviara el missatge al controlador CAN pel bus quan el BUS estigui disponible.
* Un transceptor, definit per l'ISO 11898-2/3.
** Transforma les dades del nivell de BUScan al nivell del controlador CAN perquè aquest ho pugui llegir.
** També fa el process invers, transforma les dades del nivell del controlador CAN al nivell del BUScan.
Cada node està capacitat per enviar i rebre missatges, però no ho pot fer simultàniament. Cada missatge consisteix en una id que representa la prioritat del missatge, les dades, un CRC, uns slot per al ACK i alguna sobrecàrrega més que també forma part del missatge. Un missatge és posat al bus per un node i rebut per tots els altres.

## Capes
### Capa d'aplicació.
#### Capa objecte.

* Filtratge de missatges.
* Maneig de l'estat i dels missatges.

### Capa de transferència.

La majoria dels estàndards CAN estan aplicats a la capa de transferència. La capa de transferència rep les dades de la capa física i les transmet a la capa objecte. La capa de transferència és responsable de les següents qüestions:
* Confinament de fallades.
* Detecció d'errors.
* Validació dels missatges.
* Acknowledgement.
* Arbitratge.
* Enquadrament dels missatges.
* Taxa de transferència i temporització.
* Informació de l'enrutament.

### Capa física.

És la capa de més baixa nivell del bus CAN, en el seu estàndard ISO 11898 s'especifiquen totes les seves característiques detalladament.

## Trames

La xarxa CAN pot ser configurada amb dos tipus de formats per als missatges (Trames): l'estàndard o format base (descrit al CAN 2.0 A i al CAN 2.0 B) i el format estès (descrit només en el CAN 2.0 B). L'única diferència entre els dos formats és que l'estàndard suporta una longitud d'11 bits per l'identificador mentre que el format estès suporta fins a 29 bits per l'identificador, 11 bits per l'identificador base i 18 per l'identificador estès.
El bus CAN té 4 tipus de frames:

### Trama de dades

Té dos formats:
* Format base: amb 11 bits per l'identificador.
* Format estès: amb 29 bits per l'identificador.
El bus CAN requereix la implementació del format estàndard i pot acceptar el format estès.

### Trama remota

* Hi ha dos diferències entre la trama de dades i la trama remota, la primera és que el RTR-BIT és transmès com un bit dominant en la trama de dades i la segona és que la trama remota no té el camp per a les dades.
RTR = 0 ; Dominant en la trama de dades.
RTR = 1 ; Recessius en la trama remota.

#### Trama d'error

La trama d'error consisteix en dos camps diferents:
* El primer camp ve donat per la superposició de l'ERROR FLAG (6-12 bits dominants/recessius) contribuïts de diferents nodes.
* El segon camp és l'ERROR DELIMITER (8 bits recessius).
Hi hi dos tipus de flags d'erros:
* Indicador d'error actiu: sis bits dominants transmesos pel node que ha detectat un error a la xarxa amb l'estat d'error actiu.
* Indicador d'error passiu: sis bits recessius transmesos pel node que ha detectat un error a la xarxa amb l'estat d'error passiu,

### Trama de sobrecàrrega

La trama de sobrecàrrega conté dos camps el flag de sobrecàrrega i el delimitador de sobrecàrrega. Hi ha dos tipus de condició de sobrecàrrega:
* Les condicions internes d'un receptor que requereix una espera per la pròxima trama de dades o la pròxima trama remota.
* Detecció d'un bit dominant durant l'intermedi.

## Estàndards

* ISO 11898-1: Capa de dades i senyalització física CAN.
* ISO 11898-2: Control d'accés ultraràpid CAN.
* ISO 11898-3: Interfície de baixa velocitat i tolerant a fallades CAN.
* ISO 11898-4: temps de comunicació CAN.
* ISO 11898-5: Alta velocitat amb accés mig i mode de baix consum CAN.
* ISO 11898-6: Accés d'alta velocitat amb funcions d'atenció selectiva CAN.
* ISO 11992-1: Transport tolerant a fallades CAN.
* ISO 11783-2: 250 kbit/s, estàndard d'agricultura.
* ISO 15765-2: També anomenat ISO-TP, és un estàndard per control i maneig de missatges més llargs de 8 bits.
* SAE J1939-11: 250 kbit/s, Parell trenat apantallat (STP).
* SAE J1939-15: 250 kbit/s, parell trenat no apantallat (UTP)
* SAE J2411: CAN d'un sol fil (SWC).