Histórico
Conceitos Básicos
Camadas de Rede
Mensagens - Tipos de quadros
Transferência de mensagens
Codificação,Temporização e Sincronização
Detecção, controle e sinalização de erros
Dicionário de dados
Arquitetura
Conclusão
Referências bibliográficas
Perguntas

Detecção, controle e sinalização de erros


Detecção de erros

Qualquer node pode detectar erros e transmitir error frames, existem dois tipos de flag para erros:

Flag ativa: transmitida com status de dominante avisa a todos os outros nodes da existência de erros na mensagem transmitida, a transmissão é abortada e o transmissor reenvia automaticamente a mensagem. Importante notar que devido aos bits da flag serem do tipo dominante elas destroem o conteúdo do barramento, seu comprimento mínimo é de 6 bits (propositalmente quebrando as regras de stuffing) e no máximo 12.

Flag passiva: é transmitida como bits do tipo recessivo, por isso não destrói o conteúdo do barramento.

Tipos de Erro

Existem 5 tipos de erro:

1. Erro de bit: ao mesmo tempo que uma unidade envia bits ao barramento, ela também o monitora, um erro de bit ocorre quando o bit lido é diferente do bit enviado ( com exceço dos bits de arbitraço e ACK, que naturalmente devido ao processo podem ser modificados)

2. Erro de stuffing: na sexta ocorrência de um bit repetido não é inserido um bit de stuffing ( em campos onde stuffing pode ocorrer).

3. Erro de ACK: este erro é detectado pelo transmissor, o campo de acknowledgement permanece no estado recessivo, indicando que nenhum node recebeu a mensagem, nesse caso também ocorrem reenvios.

4. Erro de formato: quando bits â??ilegaisâ? são encontrados em campos que possuem regulaço sobre o formato, por exemplo um bit dominante no campo de final de frame.

5. Erro de CRC: detectado pelo receptor, ocorre quando o receptor termina o cálculo de CRC e compara com o campo de CRC da mensagem, se forem diferentes ocorreu erro e a mensagem deve ser retransmitida.

Isolamento

     Existe dentro do protocolo CAN um protocolo de isolamento de falhas; evitando que unidades defeituosas ou erráticas impactem ou impossibilitem o funcionamento da rede. Por exemplo, considere dois erros que podem ocorrer e atrapalhariam o bom funcionamento do sistema:

â? Erro de transmissão : um node com defeito envia uma mensagem de prioridade alta para o barramento, que possui um erro no frame, todas as outras unidades detectam o erro e a mensagem deve ser reenviada, o erro não é corrigido, visto que o problema é na unidade, e a mesma mensagem é reenviada o tempo todo, devido a sua alta prioridade ( que a faz ganhar todas as arbitrações), o sistema deixa de funcionar.
â? Erro de recepço: novamente, um node defeituoso recebe um frame sem erros, mas começa a emitir error frames, o transmissor começa a reenviar novamente a mensagem, mas o receptor defeituoso continua sinalizando erro, assim a mensagem é transmitida vez após vez, e nodes de prioridade menor nunca conseguiriam acesso ao barramento.

     O protocolo de isolamento de falhas evita que situações de erro como as descritas acima ocorram e impactem o funcionamento da rede, faz isso por estabelecer três estados:
1. Erro ativo: um node pode ficar em erro ativo se os erros forem esporádicos, esse estado exerce influência no barramento, pois suas flags de erro são do tipo dominante.
2. Erro passivo: um node fica em erro passivo quando os erros ocorrem muitas vezes com frequência alta.
3. Bus off: se for detectado falha irreparável pela própria rede (precisando da interferência do usuário), o driver de output da unidade de controle é desligado do barramento.
Dois contadores armazenam os erros de transmissão e de recepço, fazem a contabilidade dos erros, toda vez que um erro ocorre o contador soma ( podendo ser +1 ou +8 de acordo com uma tabela), se a transmissão ocorre sem erros o contador subtrai (-1 ou -8 de acordo com a tabela), se o número de erros exceder um limite (normalmente 127) o node passa de erro ativo para erro passivo, deixando de exercer influência no barramento. Se a contagem de erros ultrapassar 256, o node passa de erro passivo para bus off, seu driver de output é desligado e é preciso interferência do usuário para reconectar o node. Esse isolamento de falhas garante que o sistema continue funcionando, mesmo que algum node apresente problemas.

     O campo de CRC é outro fator que garante a robustez do sistema, o campo é formado por um espaçador e um CRC de 16 bits. O CRC é calculado de acordo com a mensagem a ser transmitida, o transmissor realiza os cálculos e grava o resultado no campo CRC do frame, ao chegar no receptor, este realiza o mesmo cálculo baseado no conteúdo da mensagem, e compara o resultado obtido com o campo de CRC da mensagem, se forem iguais não ocorreu erros na transmissão da mensagem e o receptor continua a processar a mensagem, se os valores forem diferentes, ocorreu erro, e a mensagem deve ser retransmitida.
A documentaço da BOSCH determina como deve ser realizado o cálculo do CRC, na prática é uma divisão de polinômios, algo que os computadores sabem fazer muito bem, a especificaço é a seguinte:
polinômio divisor: x^ 15 + x^ 14 +x^ 10 +x^ 7 +x^ 4 +x^ 3 +1 (vetor binário:110001001001101)
polinômio dividendo: bits dos seguintes campos; bit de começo de frame , campo de arbitraço , campo de controle , e campo de dados ( se presente), seguido por 15 zeros.
CRC: é o polinômio resto.
Importante ressaltar que uma vez detectado um erro na mensagem, essa é destruída e um comando de retransmissão é enviado, dessa forma evitasse que os nodes trabalhem com informações incorretas.

Universidade Federal do Rio de Janeiro - UFRJ
Departamento de Engenharia Eletrônica e de Computaço - DEL
Autores: Marina Lacerda, Tamine Alves e Yan Nascimento