2. Fundamentos da rede CAN
#O que é CAN
CAN (Controller Area Network) é uma rede de comunicação criada nos anos 1980 para ligar os módulos eletrônicos de um veículo com poucos fios. Em vez de um fio por sinal, todos os módulos compartilham um único par de fios, o barramento, e trocam mensagens curtas por ele. A norma que define a rede é a ISO 11898.
Três ideias explicam quase tudo sobre CAN:
- Todos ouvem tudo. Quando um módulo transmite, todos os outros recebem a mensagem. Cada um decide se aquela mensagem interessa ou não.
- A mensagem tem nome, não destinatário. Cada mensagem carrega um identificador (ID) que diz o que ela contém, por exemplo "rotação e temperatura do motor". Não existe endereço de destino.
- Não há chefe. Qualquer módulo pode começar a transmitir quando o barramento está livre. Se dois começam juntos, a própria rede decide quem continua, sem perder tempo e sem corromper a mensagem (veja Arbitragem, adiante).
Na prática, a VCU usa CAN para conversar com os dispositivos FuelTech (sonda, módulo de ignição, drivers de injeção, painéis), com equipamentos de outras marcas e com os módulos originais do veículo.
#Camada física: os fios
O barramento CAN de alta velocidade usa dois fios, CAN_H (CAN alto) e CAN_L (CAN baixo), trançados entre si. A informação está na diferença de tensão entre eles, não na tensão de cada um em relação ao terra. Por isso a rede tolera bem o ruído elétrico do motor: uma interferência que entra nos dois fios ao mesmo tempo não muda a diferença.

Os dois estados possíveis são:
- Recessivo (bit 1): os dois fios ficam em cerca de 2,5 V. Ninguém está forçando o barramento.
- Dominante (bit 0): CAN_H sobe para cerca de 3,5 V e CAN_L desce para cerca de 1,5 V, uma diferença de cerca de 2 V.
Se um módulo transmite dominante e outro recessivo no mesmo instante, o barramento fica dominante. Essa regra simples é a base da arbitragem e da confirmação de recebimento.
#Topologia e terminação
O barramento é uma linha, com um começo e um fim. Cada módulo se liga a ela por uma derivação curta. Nas duas pontas da linha, e só nelas, vai um resistor de 120 Ω entre CAN_H e CAN_L, chamado terminador. Ele absorve o sinal que chega ao fim do fio e evita que ele volte refletido e se misture com os próximos bits.

Regras práticas de instalação:
- Use par trançado (cerca de 1 volta a cada 2 a 3 cm). Cabo blindado ajuda em instalações com muito ruído; aterre a malha em uma só ponta.
- Monte em linha. Evite ligação em estrela, com vários ramos longos saindo do mesmo ponto.
- Mantenha as derivações curtas, de preferência até 30 cm.
- Exatamente dois terminadores por barramento. Muitos módulos já trazem o terminador interno; outros, como a VCU, permitem ligar ou desligar o terminador pelo software.
O comprimento total da rede limita a velocidade, porque o sinal precisa ir e voltar dentro de um bit. Os valores abaixo são referências usuais de cabo para CAN de alta velocidade:
| Taxa de transmissão | Comprimento máximo de referência |
|---|---|
| 1 Mbit/s | 40 m |
| 500 kbit/s | 100 m |
| 250 kbit/s | 250 m |
| 125 kbit/s | 500 m |
Num carro de corrida as distâncias são curtas e qualquer uma dessas taxas costuma funcionar. O que costuma falhar é terminação errada, emenda mal feita e derivação longa.
#O quadro CAN
Cada mensagem trafega dentro de um quadro (frame). O quadro tem campos fixos antes e depois dos dados: eles servem para identificar a mensagem, dizer quantos bytes ela tem e verificar se chegou sem erro.

| Campo | O que faz |
|---|---|
| SOF | Start of Frame, início do quadro. Um bit dominante que sincroniza todos os módulos. |
| Identificador (ID) | O nome da mensagem e, ao mesmo tempo, a sua prioridade. Tem 11 bits no quadro padrão (0x000 a 0x7FF) ou 29 bits no estendido (até 0x1FFFFFFF). |
| RTR, IDE, SRR | Bits de controle: dizem se o ID é padrão ou estendido e se o quadro é de dados ou um pedido remoto (raro hoje). |
| DLC | Data Length Code, código de tamanho: quantidade de bytes de dados, de 0 a 8 no CAN clássico. |
| Dados | De 0 a 8 bytes. É aqui que ficam os sinais (rotação, temperatura, pressão...). |
| CRC | Código de verificação calculado sobre o quadro. Quem recebe recalcula e compara. |
| ACK | Confirmação. Qualquer módulo que recebeu o quadro sem erro força esse bit para dominante. |
| EOF | End of Frame, fim do quadro. |
Os IDs costumam ser escritos em hexadecimal, com o prefixo 0x. O ID 0x640, por exemplo, é 1600 em decimal. Arquivos DBC escrevem o ID em decimal; telas e analisadores costumam usar hexadecimal.
#Arbitragem: quem fala primeiro
Quando o barramento fica livre, qualquer módulo pode começar a transmitir. Se dois começam ao mesmo tempo, cada um continua mandando o seu ID bit a bit e, ao mesmo tempo, lendo o barramento. Como o bit dominante (0) vence o recessivo (1), o módulo que manda 1 e lê 0 percebe que perdeu, para de transmitir e passa a ouvir. O vencedor nem percebe a disputa: o quadro dele segue intacto.

A consequência prática é que ID menor tem prioridade maior. Mensagens críticas, como rotação e torque, costumam ter IDs baixos. Um módulo que transmite um ID muito baixo com muita frequência pode atrasar todos os outros.
#Taxa de transmissão e ponto de amostragem
Todos os módulos de um barramento precisam usar a mesma taxa de transmissão (baud rate; na tela Portas CAN, Baudrate, em kbps, o mesmo que kbit/s). As taxas mais comuns em veículos são 500 kbit/s e 250 kbit/s; equipamentos de competição e a rede FTCAN da FuelTech usam 1 Mbit/s. Um módulo numa taxa diferente não entende nada e, pior, gera erros que atrapalham os demais.

Cada bit é dividido em pequenas fatias de tempo. O ponto de amostragem é o instante, dentro de cada bit, em que o controlador lê se o barramento está em 0 ou 1. Ele é dado em porcentagem da duração do bit e normalmente fica entre 75% e 87,5%. Módulos com pontos de amostragem muito diferentes podem até funcionar em bancada e falhar com cabo longo ou com ruído.
#Detecção de erros
CAN é uma rede muito robusta porque todos os módulos vigiam todos os quadros. Os principais mecanismos são:
- CRC: quem recebe recalcula o código de verificação; se não bater, o quadro é descartado.
- Confirmação (ACK): quem transmite espera que pelo menos um outro módulo confirme o recebimento. Pela norma, um módulo sozinho no barramento nunca recebe confirmação e fica repetindo o quadro (a reação da VCU está no capítulo 7).
- Preenchimento de bits (bit stuffing): depois de cinco bits iguais seguidos, o transmissor insere um bit invertido. Seis bits iguais seguidos indicam erro.
- Verificação de forma e de bit: campos fixos com valor errado, ou um bit que não sai como foi transmitido, também são erro.
Ao detectar um erro, o módulo destrói o quadro com um sinal de erro e o transmissor tenta de novo. Cada módulo mantém contadores de erro. Com poucos erros ele trabalha normalmente; com erros demais passa a um modo restrito e, no limite, se desliga do barramento para não atrapalhar os outros. Esse estado se chama bus-off. Taxa de transmissão diferente, terminação errada e CAN_H trocado com CAN_L são as causas mais comuns de módulo em bus-off.