Detecção, controle e sinalizaçã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.
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.
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