\chapter{PROTOCOLO CAN - CONTROLLER AREA NETWORK}

\label{cap:linux}
\vspace{-2cm}

	
	
	
\section{Introdução}
	
Para supervisionar o controle e a aquisição de dados (SCADA) são utilizadas as redes \textit{Foundation Fieldbus} [9], a \textit{Profibus} [10] e a CAN. O protocolo CAN apresenta-se como uma alternativa viável para o desenvolvimento de sistemas de automação industrial. A utilização de objetos distribuídos em conjunto com os outros barramentos industriais traz algumas dificuldades relacionadas como no modelo de controle geralmente utilizado por eles. O barramento \textit{Fundation Fieldbus}, por exemplo, apesar de permitir o uso de modelos cliente/servidor e "\textit{publisher/subscriber}", utiliza-se do conceito de blocos funcionais padronizados que dificulta a utilização de orientação a objetos no mesmo. Já com relação ao \textit{Profibus}, tem-se que a utilização de mestres e escravos com comunicação ponto a ponto restringe o uso de objetos distribuídos, já que a autonomia dos mesmos é uma das características que se deseja preservar.

Diferentemente da comunicação ponto a ponto geralmente utilizada pelos outros barramentos, o CAN possui a característica de \textit{broadcast}  que pode ser convenientemente explorada pelos sistemas de automação industrial. Além disso, a priorização de mensagens utilizada no barramento CAN oferece algumas propriedades de tempo-real que podem ser convenientemente aproveitadas. O barramento CAN oferece ainda a possibilidade de se definir um protocolo de alto nível para as aplicações, de acordo com as necessidades do usuário, já que o seu padrão básico cobre somente as duas primeiras camadas do padrão ISO/OSI [11]. 

Assim, quanto à utilização de objetos distribuídos, tem-se que o barramento CAN apresenta-se como uma alternativa bastante adequada, já que este oferece muita liberdade ao projetista, para a utilização de qualquer modelo de controle e padrão de comunicação desejado. Por último, seu custo é suficientemente baixo para ser utilizado em micro-controladores, o que favorece o desenvolvimento de sistemas de automação com controle distribuído. 

A rede CAN teve amplo sucesso e popularidade em muitas e variadas indústrias. Inicialmente desenvolvida para ser utilizada em barramentos de instrumentação de automóveis, a sua utilização tem evoluído ao longo da última década, para incluir aplicações tão variadas como construção e automação HVAC (\textit{Heating, Ventilation and Air Conditioning}), sistemas de controle de fábricas e dispositivos médicos. Para criar uma fundamentação teórica, este capítulo fornece uma visão geral do protocolo CAN e apresenta um breve estudo do formato dos pacotes e protocolos que este protocolo utiliza. 
	
\section{Definição do Protocolo CAN (\textit{Controller  Area Network})}
	
O barramento CAN é um protocolo de comunicação serial desenvolvido inicialmente para aplicações automotivas que, recentemente, vem sendo utilizado em sistemas de automação industrial. O protocolo CAN é baseado na técnica de CSMA/CR (\textit{Carrier Sense Multiple Access/Collision Resolution}), às vezes, também chamado de CSMA/CD+AMP (\textit{Carrier Sense Multiple Access/Collision  Detection and Arbitration on Message Priority}), de acesso ao meio de transmissão. Isto significa que sempre que ocorrer uma colisão entre duas ou mais mensagens, a de mais alta prioridade terá o acesso ao meio físico assegurado e prosseguirá a transmissão. 

As características básicas dos pacotes que trafegam pelo barramento CAN são: 8 bytes de dados, velocidade de até 1 Mbit/s, priorização das mensagens, recepção \textit{multicast}   com sincronização, detecção de erros e sinalização e retransmissão automática de mensagens corrompidas. Todas estas características propiciam simplicidade, alta confiabilidade e segurança, além de baixo custo. A primeira versão do protocolo CAN 2.0A [1] especificava somente mensagens do tipo padrão com identificadores de 11 bits enquanto que o CAN 2.0B [1] admite também mensagens estendidas com identificadores de 29 bits. O protocolo CAN foi adotado em 1993 com o padrão mundial ISO11898, pela \textit{International Standardization Organization}. 

O protocolo é usualmente implementado em um controlador na forma de um circuito integrado, mas também podem ser encontrados no mercado microcontroladores de 8, 16 e 32 bits com controladores CAN integrados. Os controladores CAN e os microcontroladores com controladores CAN integrados são fabricados por um grande número de indústrias tais como Intel, Motorola, Philips, Siemens e Texas Instruments, resultando em torno de 50 circuitos integrados de 15 fabricantes diferentes. A utilização do protocolo CAN, na indústria automobilística, resultou numa produção em grande escala de controladores CAN, atualmente na casa dos milhões ao ano [11]. 

A afirmação e o crescimento do protocolo CAN está fortemente baseado na organização dos fabricantes em torno de associações tais como a CiA (CAN \textit{in Automation}) assim como na existência de uma série de ferramentas de software para  o desenvolvimento, simulação, configuração e monitoração de aplicações bem como na disponibilidade de hardware na forma de placas de controle, placas ISA, PCI e outros [11]. 
	
\section{Características Gerais do Barramento CAN}
	
De acordo com o modelo OSI/ISO, o padrão CAN 2.0B, apresentado na Tabela 2, é constituído somente de duas camadas: a Camada de Dados (\textit{Data Link Layer}) e a Camada Física (\textit{Physical Layer}). As características do barramento CAN podem ser resumidas por [11]: 

\begin{itemize}
\item Baseado no conceito de \textit{broadcast};
\item	Um esquema de arbitragem não destrutiva (\textit{bitwise arbitration}) descentralizada, baseada na adoção dos níveis "dominante" e "recessivo", é usado para controlar o acesso ao barramento;
\item	As mensagens de dados são pequenas (no máximo oito bytes de dados) e são conferidas por \textit{checksum}; 
\item	Não há endereço explícito nas mensagens. Em vez disso, cada mensagem carrega um identificador que controla sua prioridade no barramento e que pode servir como uma identificação do conteúdo da mesma;
\item	Utiliza um elaborado esquema de tratamento de erros que resulta na retransmissão das mensagens que não são apropriadamente recebidas;
\item	Fornece meios efetivos para isolar falhas e remover nós com problemas do barramento; 
\item	Oferece meios para filtragem das mensagens;
\item	O meio físico de transmissão pode ser escolhido de acordo com as necessidades. O mais comum é o par trançado, mas também podem ser utilizados outros meios de transmissão tais como fibra ótica e rádio frequência. 
\end{itemize}
	
	
	Tabela 2 - Camadas do padrão CAN 2.0B
	Camadas - OSI	Função	Especificação
	7	Aplicação	Especificado pelo projetista.
	6	Apresentação	Vazio
	5	Sessão	Vazio
	4	Transporte	Vazio
	3	Rede	Vazio
	2	Link de Dados	Coberto pelo CAN e padrão ISO.
	1	Física	Coberto pela ISO e parcialmente pelo CAN.
	
	

Uma das propriedades mais importantes do barramento é o esquema de arbitração binária (\textit{bitwise arbitration}) que fornece uma maneira de resolver colisão de mensagens. Sempre que dois nós começarem a transmitir mensagens ao mesmo tempo, o mecanismo de arbitragem garante que a mensagem de mais alta prioridade será enviada. Isto é conseguido através da definição de dois níveis de barramento chamados "recessivo" e "dominante". Um nível "dominante" sempre sobrescreve um nível "recessivo". Assim, enquanto um nó está enviando uma mensagem, ele compara o nível do bit transmitido com o nível monitorado no barramento. Se um nó tenta enviar um nível "recessivo" e detecta um "dominante", ele perde a arbitragem e interrompe o processo de transmissão. 

A taxa de transmissão, por sua vez, é limitada pelo comprimento do barramento utilizado. No caso do uso de par trançado, por exemplo, temos uma determinada relação entre a taxa de transmissão e o comprimento máximo do barramento, como mostra a Tabela 3. Essa limitação decorre da necessidade de sincronização entre as estações componentes do barramento a qual dá suporte ao esquema de arbitração binária. 
	
	Tabela 3 - Taxa de transmissão e comprimento do barramento
	Taxa (Kbit/s)	Distância Máxima (m).
	1000	40
	500	130
	250	270
	125	530
	100	620
	50	1300
	20	3300
	10	6700
	5	10000
	
	
	
\section{Quadros de uma Mensagem CAN }
	
O barramento CAN na sua versão 2.0B é formado por quatro tipos de quadros (\textit{frames}) para controlar a transferência de mensagens [1, 11]: 
\begin{itemize}
\item	Quadro de Dados (DataFrame);
\item	Quadro Remoto (RemoteFrame);
\item	Quadro de Erro (ErrorFrame);
\item	Quadro de Sobrecarga (Overload Frame).
\end{itemize}
	
	
\section{Definição do Quadro de Dados do Barramento CAN}
	
O Quadro de Dados leva dados do transmissor para os receptores e é composto de sete campos diferentes mostrados na Figura 2 [1, 11, 12]: 
	
	
	Figura 2 - Quadro de dados
	
\begin{itemize}
\item	Início do quadro (SOF): marca o início do quadro com um bit ?dominante? simples;
\item	Campo de arbitragem: no formato padrão (Figura 3), consiste de um identificador de 11 bits e do bit RTR, o qual indica se é um Quadro de Dados (RTR - "dominante") ou Quadro Remoto (RTR - "recessivo"). No formato estendido (Figura 4), é formado por um identificador de 29 bits, do bit SRR ("recessivo", substitui o bit RTR do formato padrão), bit IDE (identifica se o quadro é padrão, IDE - "dominante", ou estendido, IDE - "recessivo") e pelo bit RTR.
-	Campo de controle: no formato padrão é constituído do DLC (\textit{Data Length  Code}), que indica o número de bytes no campo de dados, e dos bits IDE e r0 (reservado). No formato estendido, é formado pelo DLC e pelos bits reservados r1e r0. 
\item	Campo de dados: consiste dos dados a serem transmitidos pelo Quadro de Dados. 
\item	Campo CRC: contém a sequência de CRC (\textit{Cyclic Redundancy Code}) de 15 bits seguida por um delimitador (1bit).
\item	Campo ACK: é composto pelo ACK Slot (1 bit) e Delimitador de ACK (1 bit). É utilizado pelos nós receptores, para indicar o correto recebimento de uma mensagem. 
\item	Fim do quadro: É formado por uma sequência de sete bits "recessivos" e serve para delimitar o quadro. 
\end{itemize}
	
	
	
	Figura 3 - Quadro de Dados Padrão
	
	
	Figura 4 - Quadro de Dados Estendido
	
	
	
\section{Definição do Quadro Remoto do Barramento CAN}
	
O Quadro Remoto, mostrado na Figura 5 é utilizado para requisitar dados. É formado pelos campos: Início do Quadro, Campo de Arbitragem, Campo de Controle, Campo de CRC, Campo de ACK e Fim do Quadro. No Quadro Remoto o bit RTR é "recessivo" e não há campo de dados. Este tipo de quadro é utilizado quando um nó deseja solicitar dados a outro nó. O nó que possuía informação responde, então, através de um Quadro de Dados com o mesmo identificador da solicitação [1, 11, 12]. 
	
	
	Figura 5 - Quadro Remoto
	
	
\section{Definição do Quadro de Erro do Barramento CAN}
	
Um Quadro de Erro é transmitido por um nó sempre que for detectado algum tipo de erro no barramento. Se um nó detectar um problema comum Quadro de Dados, por exemplo, isto será imediatamente indicado por um Quadro de Erro. O Quadro de Erro, como mostra a figura 6, é composto por dois campos [12]: 

\begin{itemize}
\item	\textit{Flags} de Erro: é formado pela superposição de \textit{Flags} de Erro provenientes de diferentes nós. O comprimento total pode variar de seis a doze bits. Existem dois tipos de \textit{Flags} de Erro: \textit{Flags} de Erro Ativos, que consistem de seis bits "dominantes" consecutivos, e \textit{Flags} de Erro Passivos, constituídos por seis bits "recessivos" consecutivos. 
\item	Delimitador de Erro: consiste de oito bits "recessivos". 
\end{itemize}

	
	Figura 6 - Quadro de Erro
	
	2.8.	Quadro de Sobrecarga (Overload Frame) do CAN
	
	Existem duas condições que levam à transmissão de um Quadro de Sobrecarga: 
	?	As condições internas de um receptor, o que requer um atraso até o próximo Quadro de Dados ou Quadro Remoto.
	?	Detecção de um bit ?dominante? no espaço entre dois quadros. 
	No máximo, dois Quadros de Sobrecarga podem ser gerados para atrasar o próximo Quadro de Dados ou Quadro Remoto. O Quadro de Sobrecarga, mostrado na figura 7, é formado pelos campos: 
	?	Flag de Sobrecarga: consiste de seis bits ?dominantes?.
	?	Delimitador de Sobrecarga: consiste de oito bits ?recessivos?.
	
	Figura 7 - Quadro de Sobrecarga
	
	
	
\section{Arbitração do Barramento CAN}

O processo de arbitragem ocorre sempre que dois ou mais nós iniciam uma transmissão exatamente ao mesmo tempo, após verificar que o barramento está desocupado. Um exemplo deste processo, onde se tem três estações N1, N2 e N3 concectadas a um barramento, pode ser visto na figura 8. Neste exemplo, vê-se que nada acontece até o bit cinco, onde os nós N1 e N3 transmitem bits "dominantes" ("0") e o nó N2 tenta transmitir um bit "recessivo". Por ter escrito um bit "recessivo" e lido um bit "dominante" no barramento, o nó N2 perde a arbitragem e passa somente a ler o barramento, emitindo bits "recessivos". Finalmente, no bit dois, o nó N1 perde a arbitragem para o nó N3, que possui um identificador com valor menor e, por isso, com maior prioridade do que os nós N1 e N2 [11, 12]. 
	
	
	Figura 8 - Processo de arbitragem no barramento CAN
	
	
O resultado deste processo de arbitragem é que a mensagem com a prioridade mais alta em pré consegue ser transmitida em atraso. Os nós N1 e N2, cujas mensagens perderam o processo de arbitragem, terão suas mensagens transmitidas depois que o nó três finalizar a sua transmissão. 
	
\section{Detecção e Sinalização de Erros }
	
São utilizados dois mecanismos de detecção de erros no nível de bits: monitoração e inserção de bits (\textit{bit stuffinng}). Já no nível de mensagens, são usados o \textit{Cyclic Redundancy Check} (CRC) e checagem dos quadros (\textit{Frame check}). A sinalização de qualquer erro detectado é feita através de um Quadro de Erro. 

A monitoração simultânea, por todos os nós, das mensagens que circulam no barramento permite a detecção de mensagens corrompidas. Desta maneira, os campos das mensagens são constantemente verificados de acordo com o tipo da mensagem, assim como o seu CRC. Caso algum nó detecte problemas com uma mensagem, ele indicará isso através de um Quadro de Erro. Tão logo seja possível, a mensagem será retransmitida garantindo, assim, que todas as mensagens serão corretamente recebidas por todos os nós. 
	
Há também mecanismos de proteção contra nós com algum tipo de falha. Dessa maneira, se um dos nós estiver constantemente indicando o recebimento de mensagens corrompidas, ele estará perturbando o barramento com sucessivas retransmissões de mensagens. Assim, um contador interno de erros existente em cada controlador CAN, força o nó a se desconectar quando um certo número de erros é atingido. 
	
\section{Filtragem de Mensagens }
	
Como dito anteriormente, o protocolo CAN é usualmente implementado na forma de um controlador que, usualmente, também se comunica com um microcontrolador. Assim, a maioria dos controladores de protocolo oferece um serviço de filtragem de mensagens que faz com que somente as mensagens como padrão de identificação pré-programado sejam armazenadas e sinalizadas no microcontrolador. Isso possibilita uma economia de tempo de leitura e processamento das mensagens recebidas, liberando o microprocessador para tarefas mais importantes, contanto que a filtragem seja corretamente configurada. Essa operação normalmente envolve a configuração de duas máscaras para o identificador das mensagens, de forma a selecionar as mensagens ou grupo de mensagens desejadas e descartar as não desejadas. 
	
	
\section{Interface com Microcontrolador }
	
Um nó é geralmente conectado a um barramento constituído de dois fios terminados em ambas as pontas por dois resistores. O controlador CAN pode estar diretamente conectado ao microcontrolador ou, como dito anteriormente, o microcontrolador pode possuir um controlador CAN internamente. A ligação do nó com o meio físico normalmente, se dá através de um \textit{transceiver}, o qual se comunica serialmente com o controlador através do pino de saída TX e do pino de entrada RX. A função do \textit{transceiver}, no caso do uso de par trançado, é transformar os bits que entram e saem do controlador em tensão diferencial a ser aplicada ao barramento. 

O modo de transmissão diferencial é utilizado para proporcionar imunidade a interferências eletromagnéticas ao barramento. A alimentação do \textit{transceiver} é feita com cinco volts e o nível "recessivo" corresponde a uma diferença de tensão menor do que 0,5V entre CAN\_H e CAN\_L, com a tensão em CAN\_H sendo normalmente maior do que CAN\_L. Já o nível "dominante" é detectado quando a diferença de tensão for de no mínimo 0,9V sendo que a tensão nominal neste estado é de 3,5V para CAN\_H e 1,5V para CAN\_L. Convém lembrar que os sinais dos pinos TX e RX possuem direções definidas enquanto que os sinais CAN\_H e CAN\_L não. O esquema deste tipo de conexão é mostrado na figura 9. 
	
	
	Figura 9 - Esquema para a interface do microcontrolador com o barramento CAN
	
\section{Camadas do Protocolo CAN}
	
Embora a especificação original refere-se às Camadas de Objeto e a de Transferência (TCP), as mais recentes implementações rompem os protocolos para a Camada Física (PHY) e para a Camada de Dados, com a Camada de Dados dividida para as camadas de Controle Lógico (LLC - \textit{Logical Link Control}) e (MAC - \textit{Medium Access Control}) Controle de Acesso ao Meio [13]. A tabela 4 mostra a organização e estrutura das camadas do CAN e as responsabilidades das camadas associadas. 
	
	Tabela 4 - Camadas CAN  e respectivas tarefas
	Camada	Todos os Nós	Nós Supervisores
	Aplicação (APP)	Programas de Usuário	
	Controle de Link Lógico (LLC)	Filtro de identificação, notificação de sobrecarga, gestão de recuperação.	Falha
	Controle de Acesso ao Meio (MAC)	Estrutura de codificação e formatação, detecção e sinalização de erro, confirmação.	Falha
	Física (PHY)	Tempo de bit, sincronização de codificação e decodificação de bits.	Gestão de falha no barramento
	
	
	\subsection{Camada Física do CAN }
	
A camada física trata de sincronização, codificação, bem como a ligação física entre dois nós de rede [14]. A camada física do protocolo CAN não foi especificada no modelo 2.0, mas, mais tarde, foi incorporada na especificação ISO 11898 [15]. Embora outros métodos de conexão são utilizados, o meio físico predominante para a comunicação é um simples par trançado, encerrado em cada extremidade com um resistor 124 Ohm. A especificação descreve o estado lógico do barramento como dominante e recessivo, em que o estado é o dominante com valor lógico "zero", que leva o barramento para o seu estado zero, independente de quantos lógicos "1" estão no barramento. Este mecanismo é utilizado para fornecer prioridade ao barramento mestre sobre nós subordinados e para a arbitragem entre os nós de igual valor. Se o barramento estiver livre, qualquer nó pode começar a transmitir uma nova mensagem. Se forem tentadas transmissões simultâneas, o conflito no barramento é resolvido usando os bits do campo identificador da mensagem. Todas as mensagens são recebidas no barramento (mas não são necessariamente transformados) por todos os nodos conectados a ele. Cada nó reconhece mensagens consistentes (correto) e mensagens inconsistentes. Isso garante a confiabilidade da ligação, fornecendo uma confirmação para o remetente. Em muitos dos casos, as camadas inferiores do CAN são implementadas em hardware com interrupções lógicas integradas que permitem a um modo de "\textit{sleep}" e com "\textit{wakeup}" automático, quando a atividade no barramento recomeça. 

A taxa de dados do CAN é condicionada por vários fatores: comprimento do barramento, frequência do oscilador e tolerância, velocidade do circuito condutor. Neste projeto, a taxa de dados exigidos pelo CAN cai bem abaixo do máximo de 1 Mbps, devido à taxa máxima do padrão IEEE 802.15.4 (250 kbps). No entanto, ainda é benéfica para fornecer a transmissão dos parâmetros adequados [13]. 

A taxa máxima de bits permitida pelo protocolo CAN é de 1 Mbps e diminui conforme o aumento do cabo. Em geral, para ambientes com baixo nível de ruído e taxa de dados, os critérios de amostragem podem ser relaxados e a tolerância do oscilador aumentada. Conforme o aumento da taxa de dados ou o aumento dos níveis de ruído, a amostragem é exigida normalmente e a tolerância do oscilador deve ser observada. 
	
\subsection{Camada de Controle de Acesso ao Meio - CAN }
	
A camada MAC é responsável pela codificação, formatação dos quadros de dados, detecção e sinalização de erros, e reconhecimentos. Cada nó ativo no barramento realiza acompanhamento, controle de redundância cíclica (CRC), "\textit{bit-stuffing}" e o controle dos quadros das mensagens. Erros globais e locais podem ser detectados por todos nós. Quando erros forem detectados, a mensagem é automaticamente anulada e retransmitida até que a operação tenha sucesso. 

Os quadros CAN são divididos em quatro categorias diferentes: quadro de dados, quadro remoto, quadro de erro e de sobrecarga. Um quadro de dados contém informações da mensagem. Um quadro remoto ocorre quando um nó solicita a outros nós a transmissão do quadro de dados com seu identificador. Quadros de erros é gerado quando um nó detecta algum erro. Os de sobrecarga são gerados quando ocorrem atrasos sucessivos no fornecimento de mais dados ou quadros remotos. Os sete campos da estrutura do quadro dados é mostrado na figura 10. O campo início (START) consiste de um único bit dominante e sua borda é utilizada como um gatilho para a sincronização dos restantes bits na armação. 
	
	
	Figura 10 - Estrutura do Frame de dados CAN
	
	
O campo de arbitragem (ARB) varia dependendo se o quadro possui formato padrão ou formato estendido, como mostrado na figura 11. 
	
	
	Figura 11 - Campo de arbitração padrão e estendido
	
	
O padrão do campo de arbitragem é utilizar identificador de 11 bits que constitui a base para a priorização das mensagens, o menor número ganha e pode transmitir. O quadro estendido utiliza um total de 29 bits para o identificador, mas apenas os primeiros 11 bits são utilizados para decisões de prioridade. O estado do bit RTR (transmissão remota do pedido) é determinado por um tipo de quadro. É dominante em quadro de dados e recessivo em quadro remoto. Devido ao bit SRR (pedido remoto substituto) poder ocupar a mesma posição que um RTR em um \textit{frame} padrão, colisões podem ocorrer nos 11 bits de identificação entre um quadro com formato padrão e um quadro com formato estendido. Neste caso, o quadro padrão tem a prioridade. A função do bit IDE (identificador extensão) varia com o formato do quadro. Em \textit{frames} com formato estendido, ela é usada no campo de arbitragem. No formato padrão, é usada como parte do campo de controle, que inclui alguns bits reservados, bem como 4 bits que correspondem ao código do comprimento dos dados. O código de comprimento de dados especifica o comprimento da mensagem em bytes, usando uma simples contagem binária, a partir de 0000(2) (0 bytes de dados) para 1000(2) (8 bytes de dados), em que "0" é um bit dominante e um "1" é um bit recessivo. O campo de dados no padrão pode conter dados de quadros estendidos, onde podem conter de zero a oito bytes de informação. O campo CRC contém a sequência CRC e o bit recessivo delimitador CRC. A sequência CRC é gerada utilizando todas as sequências de bits de quadros anteriores. 

A estrutura de um quadro remoto assemelha-se a um quadro de dados sem o campo de dados. É utilizado para solicitar uma transmissão de envio de dados para um receptor. Um quadro de erro contém um \textit{flag} de erro e oito bits delimitadores de erros recessivos. O campo de \textit{flag} de erro é a superposição de todos os \textit{flags} de erro que serão transmitidos. Um erro ativo é indicado por seis consecutivos bits dominantes; um \textit{flag} de erro passivo é indicado por seis consecutivos bits recessivos, ao menos que esses bits sejam substituídos por bits dominantes de outros nós, transmissão para \textit{flags} de erros ativos. Quadros de sobrecarga funcionam de forma semelhante ao quadros de erro; eles têm um campo de \textit{flag}  de sobrecarga que é a sobreposição de todos os \textit{flags} de nós seguido por um delimitador de oito bits recessivos. Além dos quatro tipos de quadros, quadro de dados e quadros remotos são separados por um espaço \textit{interframe}. 
	
	
	
\subsection{Camada de Controle Lógico - CAN }
	
As tarefas desempenhadas pela camada de Controle Lógico (LLC - \textit{Logical Link Control}) incluem identificadores de filtros, notificação de sobrecarga, recuperação e gerenciamento. Quando comparado com os protocolos de redes típicas, a característica típica da rede CAN é como os nós são endereçados. 

Ao invés de uma fonte específica do endereço de destino, os identificadores estão incluídos no pacote da mensagem. Este campo identificador é processado e encaminhado por todos os nós da rede. Os receptores utilizam filtros pré-configurados para decidir se pretende ou não agir, de acordo com uma mensagem. O filtro lógico realiza uma verificação (comparação) bit a bit do identificador de entrada no seu próprio banco de filtros. Se ocorrer uma correspondência, a mensagem é processada, caso contrário, a mensagem é ignorada. Se essa situação não é justificada, o sistema permite bits sem importância em um registrador de máscara para ser configurado, o que permite a fiscalização dos nós para recolher as mensagens a partir de muitos identificadores (subordinados), enquanto, ao mesmo tempo, impedem que subordinados se comuniquem uns com os outros. Esse mecanismo é conhecido como o modelo de processamento distribuído "patrão-trabalhador" [2], que são empregados em diversas áreas como: em automóveis ou ambientes industriais; onde muitos sensores distribuídos se comunicam com um controlador central. O campo de filtros possui um comprimento de 32 bits e pode ser configurado com dois, quatro ou oito filtros de aceitação. A escolha da configuração do  filtro padrão é baseada na definição de qual formato será utilizado (padrão ou estendido) sobre a organização da rede pretendida. 

A configuração de filtros adicionais permite acertos múltiplos, com uma possível configuração de filtros para cada banco. Este recurso é útil para implementar um grupo de hierarquias de comunicação dentro da rede. Devido a diversas possibilidades de configuração, uma terceira parte da aplicação [16] é frequentemente utilizada para definir um conjunto de filtro de parâmetros. 

Outra função fundamental da LLC é o \textit{bit-stuffing}. A fim de manter um número suficiente de transições (para a recuperação do \textit{clock} e para prevenir DC), não mais que cinco bits idênticos consecutivos são permitidos. O LLC do transmissor insere automaticamente um bit complementar no domínio após detectar cinco bits idênticos consecutivos. Essa ação ocorre apenas nos campos START, ARB, CTRL, DATA e Sequência CRC. O \textit{Bit-stuffing} não ocorre no delimitador CRC, ACK, ou no campo EOF. 

A falta de esquemas de gerenciamento de contenção e recuperação são baseados em contadores de erros individuais e o estado de erros de cada nó. Existem cinco tipos de erros que podem ocorrer durante uma transmissão: um \textit{bit error} ocorre quando um transmissor detecta um bit no barramento, que é diferente do bit que foi enviado; um \textit{stuff error} ocorre quando seis bits consecutivos idênticos são detectados em um campo; um \textit{CRC error} ocorre quando o cálculo do CRC recebido não corresponde à sequência do CRC transmitido; um \textit{form error} ocorre quando um campo contém mais bits do que o esperado e um \textit{acknowledgement error} ocorre quando um transmissor não detectar um ACK (resposta) depois de enviar uma mensagem. A validade de uma mensagem é interpretada de maneira diferente para transmissores e receptores. Um transmissor considera uma mensagem livre de erros, se não houver erros até o fim da transmissão do quadro. Para todos os erros que ocorrem, a mensagem é retransmitida automaticamente, com base em regras de prioridade. Um receptor considera uma mensagem livre de erros, se todos, exceto o último bit do frame, não estiverem corrompidos. 

Cada nó no barramento mantém dois contadores de erro - um receptor e um transmissor de erros. Além disso, para cada nó é atribuído um erro de três estados: ativo, passivo, ou barramento desativado. O estado ativo é o estado normal em que um nó ativo envia \textit{flags} de erro (dominante) após a detecção. Nós, no estado passivo, só podem enviar \textit{flags} passivos (recessivo). Um nó em um barramento inativo não pode enviar qualquer \textit{flags} de erro. Os contadores de erro são incrementados e decrementados tomando como base o tipo de erro detectado e o estado de cada nó. O estado de erro de cada nó é determinado pelo valor dos contadores de erro. Geralmente, nós com contadores de erro elevados são colocados no estado passivo ou excluídos do barramento. Se os contadores de erros dos nós são reduzidos para um nível aceitável, eles são autorizados a retornar ao barramento, assumindo o estado ativo. 



