¿Módulo de bus CAN independiente o CAN integrado STM32?

Llevo días estudiando e intentando conseguir comunicaciones sencillas con bus CAN desde cero utilizando stm32f1, pero aún no he conseguido los resultados deseados y es difícil de entender y programar.

Por otro lado, existen módulos CAN bus que se comunican con un microcontrolador por SPI como este: https://www.ebay.com/itm/283953770322?hash=item421cf6af52:g:JHAAAOSwIeVfQ7HI

y hay muchas librerias para manejar estos modulos, pero la pagina oficial del microchip no recomienda seguir usando el MCP2515.

Mi duda es: ¿Qué diferencia hay en usar CAN bus desde cero (STM32) que usar un módulo separado? ¿El uso de un módulo independiente afecta la seguridad del bus CAN? ¿Debe utilizarse un módulo independiente en la industria?

Probablemente lo mismo que un ADC interno frente a externo. Las interrupciones y los registros son más rápidos para los internos. No hay mensaje SPI para hacer algo. Solo hazlo.
¿Por "desde cero" se refiere a un controlador CAN de software en lugar de un periférico CAN de hardware (ya sea integrado en la MCU o externo a través de SPI)?

Respuestas (3)

¿Qué diferencia hay en usar el bus CAN desde cero (STM32) que usar un módulo separado?

Los controladores CAN externos son principalmente una cosa del pasado. En la década de 1990, era la única forma de usar CAN, antes de que los microcontroladores comenzaran a admitir controladores CAN en chip.

Desde entonces, la única razón para usar un controlador CAN externo es que tiene requisitos de proyectos especializados que conducen a una MCU muy especializada, una que no viene con una versión CAN.

¿El uso de un módulo independiente afecta la seguridad del bus CAN?

No la seguridad como en la protección contra el uso malicioso. Pero hace que todo el diseño sea un poco más sensible a EMI, ya que SPI no es tan resistente como CAN. El controlador externo también presenta una gran cantidad de latencia, costos de BoM y una complejidad adicional sin sentido en general.

pero la pagina oficial del microchip no recomienda seguir usando el MCP2515

Eso se debe principalmente a que Microchip ha creado una nueva generación de todos sus transceptores y controladores con soporte para CAN FD. Las nuevas piezas modernas son compatibles con versiones anteriores y también tienen una mejor inmunidad y protección ESD, etc.

Si su MCU tiene un periférico CAN en chip, es preferible usarlo en lugar de un módulo externo. Además de la latencia mencionada por Ralph, considere el costo, la disponibilidad y la confiabilidad de usar un módulo.

Piensa en ello de esta manera. Hay muchos chips expansores IO disponibles en el mercado. ¿Usarías uno si tuvieras muchos pines de repuesto en la MCU? Probablemente no. Por otro lado, si todos sus pines están agotados, entonces un expansor de puerto I2C puede ser una opción más viable que obtener la MCU en un paquete más grande.

En general, los dispositivos en un bus CAN tienen requisitos de que los mensajes se entreguen de un dispositivo a otro con una latencia de tiempo muy baja. Por ejemplo, comunicar la posición de un eje de motor giratorio desde un dispositivo de accionamiento de motor a un controlador sobre el bus. Los datos no son útiles a menos que se entreguen con un breve retraso. Si hay un dispositivo entre su procesador y el bus CAN con el que debe comunicarse a través de SPI, esta comunicación de dispositivo en el medio retrasará cada mensaje, aumentando la latencia de su llegada a otros dispositivos en el bus CAN.

Un controlador CAN integrado en un microcontrolador que se comunica directamente en el bus CAN es la mejor manera de interactuar con otros dispositivos con baja latencia. La mayoría de los periféricos CAN del microcontrolador pueden manejar las comunicaciones de bajo nivel y solo interrumpir el micro cuando sea necesario, evitando la necesidad de sondeo o filtrado de mensajes.

Si la aplicación no tiene requisitos de comunicación de baja latencia, supongo que el periférico externo conectado a SPI puede cumplir con esos requisitos.

Entonces, la razón principal para no usar el módulo externo sería comunicarse en el bus CAN con baja latencia.