Tengo un problema por el que el módulo de bus CAN de mi microprocesador reenvía continuamente su último mensaje, aunque parece que mi monitor USB-CAN lo recibe correctamente en el otro extremo.
Estoy intentando implementar el J1939 protocolo de bus CAN en un Microchip DSPIC30F4013 (con un ISO1050). Encontré una biblioteca J1939 de Microchip para una familia de chips diferente (PIC18xx) y la porté para mi DSPIC30. Los únicos nodos en el bus son mi dispositivo bajo prueba y el monitor USB-CAN que estoy usando para la depuración. La mayoría de las veces he estado utilizando un adaptador de interfaz USB-CAN de Ginkgo de ViewTool; También he usado el CANalyst-II también. Tanto el monitor como mi DUT tienen resistencias de terminación de 120 ohmios.
Mi firmware tiene tres mensajes de comando que puede recibir y dos mensajes de estado que envía. Nunca he tenido un problema con el envío de los mensajes de comando desde el monitor CAN al DUT. Mi DUT siempre ha hecho lo que se supone que debe hacer al recibir ese comando, y en esos momentos nunca he notado ninguna locura en el autobús.
Sin embargo, el envío de un mensaje de estado, NO siempre se ha comportado correctamente. Los mensajes de estado se alternan cada dos segundos: %código% En algún momento, se cumple una "condición" que hace que el módulo CAN reenvíe continuamente el último mensaje. La parte difícil es que no es predecible o confiable. A veces, se enciende de inmediato ... a veces se produce unos segundos más tarde ... a veces no ocurre durante minutos.
Una vez que me di cuenta de que tenía este problema, agregué algo de lógica de nivel de estado a mi disparador de 2 segundos. Ahora reviso el (los) registro (s) de estado / resultados de CAN para ver si el mensaje anterior terminó correctamente. De lo contrario, aborto manualmente y luego envío el siguiente mensaje. Esto es algo interesante porque ahora el aspecto de la operación es:
send msgA, wait 2s, send msgB, wait 2s, send msgA, ... ...
La parte que más me confunde es cómo parece afectar solo un mensaje a la vez. Si se tratara de un problema de configuración del módulo, habría esperado que todos los mensajes enviados o recibidos se desarmaran.