Quiero hacer un sniffer de bus CAN a 250 kbit / s usando mi computadora. Después de algunas investigaciones, descubrí que MCP2551 es una especie de regulador de nivel de voltaje para la capa física de CAN. Teniendo esto en cuenta, me pregunto si esta configuración podría funcionar. Solo quiero grabar los mensajes intercambiados con fines de prueba automatizados, no ser parte de la comunicación:
PC <-> USB-UART (quizás CP2102, porque ya tengo uno) <-> MCP2551 <-> bus CAN
Si no es así, ¿qué tipo de señales deben ingresar al MCP2551 para hacerme parte del autobús?
He creado una interfaz USB / CAN con FT2232H en modo MPSSE (olvide UART), MCP2515 y MCP2551. MCP2515 es la pieza clave que te falta aquí. Estudia bien lo que hace. Es el controlador CAN real el que realiza el encuadre, los ACK, la generación y verificación de suma de verificación, el filtrado de mensajes y otras cosas menos obvias que el estándar debe hacer un nodo CAN. Si desea un sniffer, MCP2515 tiene un modo de solo escucha que garantiza que no haya transmisiones en el bus. MCP2551 es simplemente un adaptador de capa física tonto, similar a un MAX232 para RS-232 o ADM485 para RS-485.
Ahora, esta arquitectura está lejos de ser perfecta, ya que la tecnología FTDI MPSSE no tiene esencialmente soporte para interrupciones (creo que solo usa transferencias USB masivas detrás de escena), por lo que tengo que sondear el controlador con frecuencia para buscar nuevos mensajes. Esto coloca mucha carga en el controlador host USB, pero aún no garantiza que no se pierdan mensajes (MCP2515 puede almacenar hasta 2 mensajes recibidos internamente si habilita el "modo de desbordamiento", solo uno si no lo hace). Una solución mucho mejor sería un microcontrolador adecuado con CAN y periféricos USB incorporados como STM32F105 (103 no puede usar USB y CAN al mismo tiempo). Vea este proyecto para una implementación funcional de exactamente esta idea. LPC18xx como lo sugiere stevenh también funcionará, pero LPC17xx es probablemente más barato y más fácil de encontrar.
fuente
Dado que quiere escuchar en un bus CAN existente, como entiendo la pregunta, realmente no puede usar un UART en absoluto. La señalización CAN y UART son totalmente diferentes.
En teoría, podría mirar la línea de recepción CAN que sale del MCP2551 y decodificar el tráfico CAN. Eso no será fácil, pero es teóricamente posible. Sin hardware CAN especializado, tendrá que muestrear algunas veces más rápido que la velocidad de bits CAN y decodificar ese flujo de bits en el software más adelante. Probablemente necesitará grabar a aproximadamente 1 Mbit / s para decodificar CAN de 250 kbit / s.
Usar un microcontrolador será mucho más fácil. El PIC 18F2580 y otros procesadores similares tienen un periférico CAN incorporado. El hardware realiza la decodificación a nivel de bits y recibe tramas CAN completas. El procesador puede enviar las tramas CAN recibidas a través de su UART a su PC.
fuente