Resumo do Capítulo destinado ao protocolo CAN do curso UT.RTBN.12.01x Realtime Bluetooth Networks (edX) - lucasavelino/TCC GitHub Wiki
O protocolo CAN é um barramento de comunicação serial de dados usado para aplicações de tempo-real como automóveis e robótica. Pode operar até 1 Mbits/s, possuindo uma excelente detecção de erros e confinamento.
O protocolo CAN foi desenvolvido dentro de um padrão internacional para comunicação de dados serial, especificamente a ISO 11989.
Um transceiver é um dispositivo capaz de transmitir e receber no mesmo canal. O CAN é baseado no mecanismo de comunicação broadcast que é um protocolo de transmissão baseado em mensagem ao invés de um protocolo baseado em endereço.
O protocolo CAN provê dois serviços de comunicação: o envio de mensagem e a requisição de mensagem. Todos os outros serviços como sinalização de erros, retransmissão automática de quadros errôneos são executadas automaticamente pela interface do CAN e portanto transparentes ao usuário.
O canal físico é composto de dois fios contendo em modo diferencial um bit lógico digital. Devido ao fato de múltiplas saídas estarem conectadas no mesmo barramento, existe um mecanismo de arbitragem que resolve requisições simultâneas para transmissão. Este mecanismo define dois estados para o transmissor dominante e recessivo. Desta forma, se um ou mais nós enviam um estado dominante no barramento, este sobrescreve o estado recessivo que pode estar sendo transmitido por qualquer outro nó.
O transceiver CAN é um dispositivo de alta velocidade, tolerante a falhas que serve como interface entre o controlador do protocolo CAN e o barramento físico. Estes dispositivos costumam ser robustos, suportam altas correntes necessárias para a comunicação, possui proteção contra picos de alta-tensão, dentre outras funcionalidades.
No protocolo CAN, as mensagens são identificadas pelo seu conteúdo ao invés do endereço. Cada mensagem possui um identificador único que define o conteúdo da mensagem e a sua prioridade. Este fato é importante para o mecanismo de arbitragem do barramento que dá um grau maior de flexibilidade a rede.
Quatro tipos de mensagens podem ser enviadas em um barramento CAN. O campo de arbitragem determina a prioridade da mensagem quando dois ou mais nós estão disputando pelo barramento. Para o CAN 2.0A, consiste em um identificador de 11 bits. Para o protocolo CAN 2.0B, há um identificador de 29 bits. O identificador determina o tipo do dado. O bit RTR (Remote Transmission Request) é dominante (0) para quado de dados e recessivo (1) para quadro de requisição. O campo de controle contém o DLC que especifica o tamanho em bytes dos dados. O Campo de dados contém de 0 a 8 bytes de dados. O campo CRC contém um checksum de 15 bits para detecção de erros. Qualquer controlador CAN que pode receber corretamente uma mensagem envia um bit de confirmação (Acknowledgment) no final da mensagem que é armazenado no bit ACK slot. Caso esse bit não for transmitido, o transmissor reenvia a mensagem.
O IFS (Intermission Frame Space) serve para separar um quadro do próximo. o identificador (11 ou 29 bits) e o campo de dados (0, 8, 16, 24, 32, 40, 48, 56, 64 bits) que possui comprimento variável. Os componentes restantes (36 bits) do quadro possui comprimento fixo, incluindo SOF(1), RTR(1), IDE/r1(1), r0(1), DLC(4), CRC(15) e ACK/EOF/intermission (13).
Bit stuffing são utilizados para inserir um bit complementar após 5 bits consecutivos de mesmo valor. Cabe ao receptor remover esses bits.
O CRC (Cyclic Redundancy Check) é usado para detecção de erros. O valor do CRC é baseado no resto de uma divisão polinomial do conteúdo.
A urgência das mensagens transmitidas através da rede CAN pode variar muito em um sistema de tempo-real. Tipicamente existem uma ou duas atividades que necessitam de altas taxas de transmissão ou resposta rápida. Ambas largura de banda e tempo de resposta sao afetados pela prioridade da mensagem. Existem duas prioridades que ocorrem nas transmissões através do barramento CAN. A primeira é a prioridade do identificador, que é utilizada por todos os controladores CAN que desejam transmitir a mensagem no barramento. A arbitragem bit-a-bit é o mecanismo onde cada nó observa o barramento a cada bit transmitido para solucionar conflitos. Todos os transmissores recessivos ao detectar uma mensagem dominante, abortam a transmissão e se tornam automaticamente receptores da mensagem. A segunda prioridade acontece localmente, dentro de cada nó da rede CAN. Quando um nó possui múltiplas mensagens para enviar, este enviará primeiramente as mensagens de alta prioridade.