Quero fazer um sniffer de barramento CAN por 250 kbit / s usando meu computador. Após algumas pesquisas, descobri que o MCP2551 é algum tipo de regulador de nível de tensão para a camada física do CAN. Mantendo isso em mente, gostaria de saber se essa configuração poderia funcionar. Eu só quero gravar as mensagens trocadas para fins de teste automatizado, não fazer parte da comunicação:
PC <-> USB-UART (talvez CP2102, porque já tenho um) <-> MCP2551 <-> barramento CAN
Caso contrário, que tipo de sinal deve ser inserido no MCP2551 para que eu faça parte do barramento?
Eu fiz uma interface USB / CAN usando o FT2232H no modo MPSSE (esqueça UART), MCP2515 e MCP2551. MCP2515 é a peça chave que você está perdendo aqui. Estude bem o que faz. É o controlador CAN real que enquadra, ACKs, geração e verificação de soma de verificação, filtragem de mensagens e outras coisas menos óbvias que um nó CAN deve fazer pelo padrão. Se você deseja um sniffer, o MCP2515 possui um modo de escuta que não garante transmissão no barramento. O MCP2551 é simplesmente um adaptador de camada física estúpido, semelhante a um MAX232 para RS-232 ou ADM485 para RS-485.
Agora, essa arquitetura está longe de ser perfeita, pois a tecnologia FTDI MPSSE não tem suporte para interrupções (acredito que ela use apenas transferências USB em massa nos bastidores), por isso preciso pesquisar o controlador com frequência para novas mensagens. Isso carrega muita carga no controlador host USB, mas ainda não garante que nenhuma mensagem seja perdida (o MCP2515 pode armazenar até 2 mensagens recebidas internamente se você ativar o "modo de transbordamento", apenas uma se não o fizer). Uma solução muito melhor seria um microcontrolador adequado com periféricos CAN e USB embutidos, como o STM32F105 (103 não pode usar USB e CAN ao mesmo tempo). Veja este projeto para uma implementação de trabalho exatamente dessa ideia. O LPC18xx, como sugerido por stevenh, também funcionará, mas o LPC17xx provavelmente é mais barato e fácil de encontrar.
fonte
Como você deseja ouvir um barramento CAN existente, como eu entendo a pergunta, você realmente não pode usar um UART. O CAN e o UART siganlling são totalmente diferentes.
Em teoria, você poderia observar a linha de recebimento do CAN que sai do MCP2551 e decodificar o tráfego do CAN. Isso não será fácil, mas é teoricamente possível. Sem o hardware CAN especializado, você terá que amostrar algumas vezes mais rápido que a taxa de bits CAN e decodificar esse fluxo de bits no software posteriormente. Você provavelmente precisará gravar a cerca de 1 Mbit / s para decodificar o CAN de 250 kbit / s.
Usar um microcontrolador será muito mais fácil. O PIC 18F2580 e outros processadores similares possuem um periférico CAN embutido. O hardware decodifica todo o nível de bits e recebe quadros CAN inteiros. O processador pode então enviar os quadros CAN recebidos via seu UART para o seu PC.
fonte