Estoy intentando sin éxito realizar una comunicación de bus CAN entre un microcontrolador y el host (mi computadora). Mi pregunta no depende del microcontrolador, sino del CAN Bus (CAN clásico).
Mi aplicación intenta enviar un marco cada uno (5 ms, 10 ms, 100 ms). Tengo un programador simple que ejecuta tareas donde llamo a la función can_write(HwObject,Frame) para escribir el marco en el bus.
Sin embargo, el primer marco devuelve OK y se recibe en el host , pero después de eso (y para todos los marcos siguientes) la función vuelve a estar ocupada, y sigo viendo que el contador de errores aumenta sin que llegue ningún marco al host. Finalmente, el nodo parece entrar en modo de bus desactivado.
Quiero saber cuáles son las razones principales de eso: estoy usando la misma velocidad de transmisión, 1 Mbit/s, en ambos lados, pero también probé diferentes, pero sin éxito para ver ningún resultado. He mirado alrededor de los registros para ver cuál podría ser el problema. Por ejemplo me sale:
PSS: estoy siguiendo el estándar AUTOSAR: la especificación CAN se puede encontrar en: https://www.scribd.com/document/160011317/Autosar-Sws-Candriver
Pero no puedo encontrar la causa de este problema. ¡Creo que es debido a una mala sincronización!
Suele haber dos causas para esto:
Cuando el remitente no recibe ACK, lo vuelve a intentar continuamente. Eventualmente, puede desconectarse después de demasiados reintentos, dependiendo de cómo esté configurado el manejo de errores y la recuperación.
Si el bus está intacto y las señales son correctas, se trata de un problema de firmware con el segundo nodo.
Al igual que con cualquier depuración, realiza pruebas que le indican en qué parte del sistema no se encuentra el problema. Lo obvio aquí es observar las señales CAN y ver si son correctas. Recuerde que CAN es una señal diferencial. El valor de señal individual que interpretan los nodos de bus es (CAN+)-(CAN-). Eso debería ser esencialmente 0 en estado recesivo y alrededor de 1,8 V en el estado dominante. La mayoría de los chips de controlador de bus, como el MCP2551 común, usarán un voltaje de modo común de aproximadamente 2,5 V.
Simón Richter
Pedro Mortensen
La bestia
La bestia
Pedro Mortensen
La bestia