# Controller Area Network

As redes CAN (Controller Area Network), as quais são um tipo de NCS (Network Controller System), consistem em redes que abrangem um espaço geográfico de uma Personal Area Network às LAN (Local Area Network) dependendo do propósito a ser utilizado. Pelo fato das CANs basearem-se na aplicação de sistemas real-time (sistemas em que as informações são transmitidas em tempo real) é necessário um controle rígido de erros e garantia de recebimento de mensagens.
As CANs baseiam-se no conceito do uso de mensagens geradas por broadcast contendo um dispositivo central controlador de mensagens.
É também um padrão de barramento que possibilita a comunicação de microcontroladores e dispositivos entre si sem a necessidade de um computador host.
É suportada desde a versão 2.6.25 do núcleo Linux.

## Os 4 Pilares Principais da CAN

Baseada nesses 4 pilares as CANs trabalham com uma topologia da rede física em estrela e lógica em barramento, enviando suas mensagens em broadcast.
1º Implementação de Hardware:
O meio de transmissão para as redes CAN influencia diretamente no funcionamento e no envio correto das mensagens, uma vez que estas precisam ser confiáveis e em alta velocidade.
A topologia física da rede também precisa ser analisada com cuidado. O comprimento de cada ramo do "Chicote Elétrico" deve seguir a norma CAN, do contrário, a propagação das mensagens pode ser prejudicada.
2º Simples Transmissão:
As CANs devem funcionar mesmo caso haja falha no link, assim, uma CAN transmitindo por 2 pares de cabo é capaz de operar normalmente somente com 1 par.
3º Controle de Erro:
O controle de erro do protocolo CAN é o mais interessante e principal característica desse tipo de rede. Como as CANs são utilizadas em sistemas sensíveis a falha o controle de erro é feito pelos próprios dispositivos.
4º Ótimo confinamento de falhas:
A danificação de um dispositivo pode resultar no envio de mensagens de erro na rede, assim, prejudicando a largura de banda.
Este mecanismo de controle de erros garante que as mensagens sinalizadoras de eventos críticos possam ser enviadas com sucesso garantindo a integridade do sistemas. Apesar de as mensagens serem enviadas em broadcast, as colisões não são destrutivas como nas redes Ethernet, sendo em todas as mensagens transmitidas com um bit recessivo e outro dominante ao qual tem prioridade na transmissão. Quando duas mensagens são enviadas no meio, a mensagem com maior prioridade continua a ser transmitida enquanto a com o bit recessivo, de menor prioridade, é abortada a transmissão pelo dispositivo originador do sinal.
As mensagens bloqueadas são retransmitidas pelo controlador central.

## O problema do jitter

Uma vez que o objetivo de sistemas baseados em tempo-real seja garantir o envio de mensagens dos sensores, serão sempre transmitidos antes das respectivas metas temporais o envio de mensagens consecutivas pertencentes a um mesmo fluxo, o que pode significar um atraso no envio de informações do respectivo sensor, representado pela escalonabilidade da mensagem, pois uma vez que todos os dispositivos compartilham de um mesmo meio físico há a divisão do tempo (balanceamento) de uso do barramento, esse fenômeno apresentado pela escalonabilidade é o jitter, o qual é solucionado pelas metas temporais.

## As mensagens

São 4 os tipos de mensagens trafegando nas redes CAN. São elas:
Mensagens enviadas quando o sistema esta num estado funcional:
+ Data Frame
+ Remote Frame
Mensagens enviadas quando o sistema esta num estado característico de erro:
+ Overload Frame
+ Error Frame

## Data Frame

Tipo de mensagem enviada na rede para transportar informações correntes do sistemas, dados normais. Por exemplo; em sistemas automotivos serve para sinalizar o estado da temperatura do óleo (sensor que deve enviar informações constantes).

## Remote Frame

Mensagem enviada solicitando informação do sistema, ou seja, quando um dispositivo precisa verificar se há água no reservatório do sistema de limpeza do pára-brisa este envia uma mensagem para o controlador do reservatório solicitando o estado atual do mesmo.

## Overload Frame

Mensagem que serve para indicar um estado ocupado do sensor, ou seja, quando um dispositivo envia uma mensagem de Remote Frame para um dispositivo ocupado é retornado uma mensagem Overload indicando congestionamento do dispositivo.

## Error Frame

Mensagem característica quando um dispositivo indica que não foi possível enviar uma mensagem de controle por ser recessiva. Este tipo de mensagem também serve para indicar que o dispositivo apresenta falhas.
Para o sucesso das informações de controle é necessário portanto que cada mensagem contenha um número de controle diferente, assim, possibilitando, com a ajuda do bit recessivo/dominante, o envio das mensagens críticas.