resumo can
TRANSCRIPT
Luiz Roberto Guimarães Barbosa
Rede CAN
Belo Horizonte
Escola de Engenharia da UFMG
2003
1. Interface CAN
1.1. Histórico Por volta da década de 80, ocorreu um grande aumento no número de
componentes eletrônicos de controle e telemetria usados em veículos. Cresceu
também a quantidade e a espessura dos cabos de dados usados para conectar
todos esses componentes. Em certos casos, a rede de dados chegava a ter 10 km
de extensão, com cabos de cerca de 10cm de diâmetro, conforme visto em [17].
Reconfigurações na rede e manutenção nos nodos tomavam muito tempo e
mostravam-se fontes de erros.
Pensando nisso, o modelo de Controller Area Network (CAN) foi proposto
por Robert Bosch, em 1980, para interconexão de componentes de controle em
veículos [18]. A rede proposta apresenta significativas vantagens, e vem se
tornando a opção de facto para a montagem de uma rede de dados veicular.
A rede automotiva de dados CAN é padronizada mundialmente pela
resolução ISO 11898, gerada pela International Society of Organization. A
regulamentação específica que determina os diferentes tipos de redes CAN e
aplicabilidade de cada uma em diferentes veículos é regulamentada pela Society
of Automotive Enginneers (SAE). Utilizando como referência a definição em
camadas das redes de dados ISO/OSI, toda a especificação da rede CAN diz
respeito apenas aos níveis físico e de enlace (Figura 1).
Devido às suas excelentes características, a rede CAN vem sendo utilizada
também em aplicações industriais, com alto índice de sucesso. Isso se deve às
características extremamente robustas e confiáveis da rede. Uma vez que foi
proposta para um ambiente com alto nível de ruído induzido e grandes oscilações
de alimentação, sua aplicação em ambientes industriais é evidente.
A rede CAN possibilita as seguintes características:
• Prioridade de mensagens
• Tempos de latência garantidos
• Flexibilidade de configuração
• Recepção multinodo com re-sincronização
• Consistência dos dados
• Multimestre
• Detecção e sinalização de erro
• Distinção entre erros temporários e falhas permanentes em nodos
A rede CAN é um protocolo de múltiplo acesso com detecção de portadora
e de colisão e arbitragem na prioridade da mensagem (CSMA/CD+AMP). A
detecção de portadora especifica que todo nodo que deseja transmitir deve antes
verificar se o barramento está livre, e se o estiver, iniciar a transmissão. Colisões
são detectadas e resolvidas de forma não destrutiva (processo explicado na seção
Nível Físico, logo abaixo). A arbitragem do barramento é definida pela mensagem
e não pelos nodos. Isso garante que mensagens vitais sejam transmitidas em
detrimento de mensagens não tão importantes.
Existem atualmente três principais tipos de redes CAN em uso. As
diferenças entre elas são principalmente em taxa de transferência de dados no
barramento e em tamanho do campo de identificação. Com a versão 2.0A são
possíveis até 2048 números identificadores. Com a versão 2.0B, são possíveis até
537 milhões de números de identificação diferentes[19].
Nomenclatura Padrão Taxa máxima Identificador
CAN baixa-velocidade ISO 11519 125kbps 11 bits
Versão 2.0A ISO
11898:1993
1Mbps 11 bits
Versão 2.0B ISO
11898:1995
1Mbps 29 bits
Tabela 1– Tipos de rede CAN
O protocolo de comunicação CAN segue o padrão ISO 11898 e tem
conformidade com o modelo OSI, definido em camadas.
Figura 1– Arquitetura padrão da rede CAN 1.2. Nível físico da rede:
Figura 2– Lógica do barramento CAN Um dos conceitos mais importantes no nível físico da rede CAN é o de
dominância de bit. A dominância de bit é semelhante à dominância genética, onde
a presença de um gene dominante inibe o efeito de um gene recessivo. Na
dominância de bit, o bit recessivo é o estado de repouso da rede. A rede CAN
utiliza um meio de transmissão diferencial, no qual é avaliada a diferença de
tensão entre dois fios, a saber CANH e CANL. O estado de bit recessivo é mantido
por dois resistores de pull-up conectados aos fios CANH e CANL. Então, sem que
seja transmitida nenhuma informação, a rede estaria recebendo um fluxo
constante de bits recessivos. Logo, é necessário um estado lógico diferente do
repouso, para marcar o início da transmissão.
O bit recessivo possui um valor lógico alto (1) na rede CAN, enquanto o bit
dominante possui um valor baixo (0). A interface de nível físico se encarrega, a
cada tempo de transmissão de um bit, de gerar um bit dominante ao receber um
nível lógico baixo ou de não fazer nada ao receber um nível lógico alto.
Quando a interface deseja gerar um bit dominante, ela força o nível elétrico
do fio CANH para aproximadamente 3,5 volts e força o fio CANL para
aproximadamente 1,5 volts. Fica estabelecida uma diferença de potencial de
aproximadamente 2 volts. Esse estado é conhecido como bit dominante. A escrita
de um bit dominante na rede (como na contraparte genética) sobrescreve o estado
de bit recessivo na rede.
A transmissão do bit é feita de modo diferencial, o que garante a robustez
da rede CAN. Como os fios CANH e CANL são, de acordo com a especificação,
um par trançado, a indução de um ruído que eleve o nível elétrico em um dos fios
também eleva o nível elétrico no outro fio pelo mesmo valor de tensão. O
balanceamento garante que a corrente fluindo em cada fio durante a transmissão
é igual e oposta em direção, gerando um cancelamento de efeito de campo (e
conseqüentemente, do ruído gerado).
Todas as interfaces controladoras de rede CAN utilizam uma verificação de
erro baseada na consistência entre o bit escrito na rede e o estado lógico lido
imediatamente após a escrita. A detecção da inconsistência tem diferentes efeitos
sobre a interface controladora, que são dependentes de qual campo da
mensagem a ser transmitida foi escrito.
Figura 3– Níveis elétricos de barramento Com os dois fios no mesmo nível elétrico, não existe gasto de potência na
rede quando um bit recessivo é transmitido, apenas quando o bit dominante é
transmitido. Isso reduz o gasto de energia para o transporte dos dados.
O padrão CAN permite ainda a inserção de novos nodos com a rede em
operação (hot-plugging). Com o uso de protocolos de alto nível, é possível gerar
sistemas com um mestre reconfigurável ou reconfigurar toda a rede para
balancear a carga, por exemplo.
1.3. Interfaces CAN de nível físico As interfaces de nível físico atualmente no mercado permitem várias
funcionalidades interessantes.
- Proteção contra curto-circuito: A interface deve ser resistente contra
curtos entre os fios de dados (CANH com CANL), entres estes e a
alimentação ou entre estes e o terra. O valor atual é de –36V a +36V,
que é a faixa de alimentação de uma bateria de caminhão comum..
- Descarga Eletro-estática: A interface deve suportar descargas eletro-
estáticas por indução ou por descarga direta (quando a interface é
descarregada ou carregada eletroestaticamente). Atualmente são
suportadas tensões de até 16Kv.
- Ruído de modo comum: É a diferença de potencial entre os potenciais
de terra dos nodos transmissor e receptor na rede. A faixa atualmente
suportada é de –7V a +12V.
- Alta impedância de entrada: Determina o máximo de nodos que a rede
suporta. Nodos desligados são desligados eletricamente da rede e
portanto não perturbam o processo de transmissão.
- Tempos de transição controlados: Limitam o tempo de transição dos
níveis, melhorando a qualidade do sinal.
- Modos de baixa corrente e sleep: Minimizam o consumo de potência das
interfaces.
- Proteção térmica: Desligar a interface quando esta for exposta a certos
níveis de temperatura. Isso não apenas impede que a lógica interna
tenha comportamento errôneo como evita que um curto-circuito
extremamente grave danifiquem a interface.
- Ligamento e desligamento livre de pulsos: Permite conexão a quente na
rede, por manter um nível recessivo seguro até atingir regime de
operação.
Comprimento do barramento
(m)
Taxa de transferência
(Kbps)
30 1000
100 500
250 250
500 125
1000 62.5
Tabela 2– Relação comprimento do cabo vs. taxa
O cabo utilizado é um par trançado,blindado ou não, com impedância
característica de 120Ω e resistores de terminação de 120Ω.
1.4. Formatos dos datagramas:
Figura 4– Datagrama CAN normal
SOF – Início de quadro. Um único bit dominante.
Identificador – Quanto maior a prioridade da mensagem, menor o valor
lógico desse campo.
RTR – Bit dominante quando requisita dados de outro(s) nodo(s)
especificado(s) pelo campo identificador.
IDE – Bit dominante quando o campo identificador é de tamanho normal.
r0 – Reservado pela especificação [18].
DLC – 4 bits indicando o total de bytes usados no campo de dados.
Data – até 64 bits de dados.
CRC – Teste de redundância cíclica de 16 bits dos dados anteriores. Utiliza
um polinômio identificador simples (X15+X12+X1).
ACK – Campo de 2 bits que permite a todo e qualquer nodo validar a
mensagem. 1 bit para escrita e outro como delimitador.
EOF – 7 bits que indicam o final do quadro e verificam erros de bit stuffing.
IFS – 7 bits que indicam o tempo para o controlador disponibilizar o dado
para a aplicação.
Durante o processo de transmissão, qualquer nodo pode validar a
mensagem (escrevendo um bit dominante do campo ACK, mantido recessivo pelo
transmissor) ou invalidar a mensagem (violando o princípio de bit-stuffing da
mensagem nos campos EOF ou IFS).
Figura 5– Datagrama CAN estendido
SRR – 1 bit recessivo que substitui o RTR convencional no datagrama
estendido.
IDE – Bit recessivo que indica a extensão do identificador com mais 18 bits.
r1 – Bit reservado adicional.
Para os datagramas CAN normais, o tamanho total varia entre 44 e 108 bits.
Com os 23 possíveis bits adicionais de bit-stuffing (explicado no item 1.8,
Verificação de erros) o tamanho máximo sobe para 131 bits.
Para os datagramas estendidos, o tamanho varia entre 64 e 128 bits,
subindo para 156 máximo com os 28 bits de bit-stuffing.
Os bits de controle são transmitidos ainda que o pacote de dados seja vazio.
1.5. Processo de Arbitragem O processo de arbitragem utiliza o conceito de dominância para garantir
não apenas que somente a mensagem mais importante tenha prioridade no
barramento, como garante que a mensagem não é destruída durante o processo
de arbitragem.
Uma vez que a rede utiliza sistema de detecção de portadora, os nodos
sempre verificam se existe algum dado sendo trafegado antes de tentar enviar
suas próprias mensagens. Supondo a rede inicialmente em repouso (bits
recessivos) e dois nodos (A e B) desejando transmitir ao mesmo tempo. Ambos
escutam o barramento e, não detectando nenhuma transmissão em progresso,
iniciam sua própria transmissão. Como o início de quadro é igual, nenhum dos
dois nodos percebe a colisão e continua no processo de transmissão. A seguir,
cada nodo inicia o processo de escrita do identificador da mensagem que deseja
transmitir. Vale observar que não é o nodo que tem a prioridade no barramento e
sim a mensagem.
Durante o processo de escrita do identificador, a verificação de consistência
de bit muda de função. Supondo que o próximo bit a ser escrito pela interface A é
dominante e o bit a ser escrito pela interface B é recessivo, quando ambas
escreverem os seus respectivos bits na rede, o bit da interface A sobrescreve o bit
da interface B. A interface A verifica o bit escrito e determina que é compatível,
passando para o bit seguinte. A interface B, ao perceber a diferença entre o bit lido
e o escrito, entra em modo de escuta, pois sua mensagem tem uma prioridade
menor (valor maior) do que a mensagem de A. Assim que B detecta o campo IFS,
ela tentará retransmitir a sua mensagem.
Vale notar que a interface A nem percebe que ganhou a arbitragem e que a
sua mensagem continua intacta, sem ter sofrido alteração decorrente do processo
de arbitragem.
Um exemplo do processo de arbitragem é ilustrado abaixo:
Figura 6– Arbitragem no barramento, dois nodos
Figura 7– Outro exemplo de Arbitragem no Barramento
Ainda que existam normas classificando os tipos de identificadores, é
possível que um programador de dispositivo CAN crie um nodo com seu próprio
sistema de identificadores. Assim, é possível selecionar alguns bits do
identificador para estabelecer não um identificador de mensagem, mas de
dispositivo, criando uma comunicação ponto-a-ponto. Entretanto, isso é
desaconselhável, uma vez que tornará o dispositivo incompatível com dispositivos
que sigam as normas e padrões.
1.6. Reconhecimento de mensagens Como ocorre com o campo de arbitragem, o campo de reconhecimento da
mensagem modifica a verificação de consistência de bit. Aqui, o nodo que
transmite a mensagem escreve um bit recessivo, enquanto o nodo que a recebe
escreve um bit dominante. O nodo emissor então fica notificado do recebimento da
mensagem.
1.7. Nível de enlace No nível de enlace, são realizadas as seguintes funções:
• Confinamento de falha
• Detecção e sinalização de erro
• Confirmação
• Arbitragem
• Enquadramento da mensagem (framing)
• Taxa de transferência e temporização
1.8. Verificação de erros O esquema de detecção de erros na rede CAN possui 5 métodos
distribuídos em dois níveis.
Nível de mensagem:
- CRC de 16 bits (polinômio X15+X12+X1), usando 15 bits efetivamente e 1
como delimitador
- ACK com 1 bit de confirmação e 1 de delimitador
- Verificação de quadro, identificando bits recessivos onde só pode haver
bits dominantes, como SOF, EOF e os delimitadores CRC e ACK.
Nível de bit:
- Consistência de bit, onde a interface avalia se o bit transmitido é igual ao
bit lido após a escrita, caso contrário gera um frame de erro. A
verificação ocorre por toda a mensagem exceto para os campos de
identificação (onde o processo de arbitragem tem lugar) e o de
confirmação (que valida a mensagem).
- Bit-stuffing, determina que após 5 bits consecutivos de mesmo valor, o
6º é o complemento dos anteriores. Isso garante ainda uma mudança
constante no nível lógico na rede, que permite uma sincronização entre
os nodos. Esse esquema não é avaliado para o EOF e o IFS.
Com o sistema de bit-stuffing, qualquer nodo que detecte um erro na
mensagem CAN pode avisar aos outros, simplesmente escrevendo 6 bits
dominantes na mensagem, tornando-a inerentemente errada e forçando o
transmissor a reenviar. Isso é uma violação forçada do protocolo de bit-stuffing,
criado para que qualquer nodo que tenha percebido um erro de quadro ou de CRC
avise a todos os outros que o datagrama está corrompido.
Especificamente na parte de erros de mensagens, o nível de enlace da rede
CAN verifica erros de Teste de Redundância Cíclica (CRC), de Quadro da
Mensagem e realiza enchimento de bits (bit stuffing).
Graças a essas medidas, todos os erros globais são percebidos, todos os
erros locais (nodo) nos transmissores são percebidos, até 5 bits aleatoriamente
errados são percebidos e total ímpar de erros (todos) são percebidos em uma
mensagem.
1.9. Interface CAN de nível de enlace As interfaces controladoras de barramento CAN apresentam várias
funcionalidades, conforme citado abaixo:
- Filtro de mensagem: É possível configurar a interface controladora para
aceitar apenas mensagens cujo campo identificador satisfaça um certo critério,
definido um identificador único (ou uma faixa de identificadores) que fornecerão o
dado à camada de aplicação.
- Múltiplos buffers de transmissão: Com o uso de vários buffers de
transmissão de dados, é possível ter diferentes níveis de prioridade para as
mensagens transmitidas.
- Funcionalidades de nodo defeituoso: Atualmente, toda a parte de gerência
dos erros de transmissão fica a cargo da controladora de barramento, liberando a
camada de aplicação. Em caso de defeito no sistema de transmissão do nodo, a
própria controladora se encarrega de avisar a aplicação sobre a confiabilidade da
transmissão e, em situações extremas, desabilitar completamente a transmissão
de dados para aquele nodo. De um modo simplista, cada mensagem errada
incrementa o contador de erro de 8 unidades, cada mensagem correta
decrementa o contador de 1 unidade. Quando o limite de 96 mensagens erradas é
atingido, uma interrupção (normalmente) é enviada para a camada de aplicação.
Vencendo o limite de 127 erros, o nodo não é mais capaz de gerar mensagens de
erro. Vencendo o limite de 256 erros, o nodo é impedido de transmitir ou de
receber mensagens. Entretanto, se ele receber 128 ocorrências de 11bits
recessivos no barramento, os contadores de erro são limpos. Novamente, toda
essa funcionalidade é implementada em nível de camada de enlace, liberando a
camada de aplicação.
- Amostragem do barramento: Outra funcionalidade interessante da
controladora é a capacidade de amostrar sucessivas vezes o barramento, usando
depois uma média simples para determinar o nível lógico do mesmo.
A principal funcionalidade da controladora de interface CAN é gerenciar
todo o processo de bit-stuffing, verificação de quadros, reconhecimento de
mensagem e a consistência de bit em nível de hardware. A camada de aplicação
apenas será interrompida em casos especiais, como requisição de reenvio e
recebimento de requisição de transmissão. Isso libera muito do processamento da
camada de aplicação, que geralmente será um outro processador.