Problema con la comunicación CAN

4

Soy nuevo en CAN y actualmente tengo problemas con una configuración.

Laimagenmuestracómomisdispositivosestánconectadosentresí.Estoyusandoelpaquete canutils para enviar mensajes (Linux usa su capa de red para registrarse y operar las interfaces CAN). Así que enciendo los dispositivos, abro un terminal y escribo los siguientes comandos de configuración en ellos:

ip link set can0 type can bitrate 125000 //This one registers an interface for can0 and sets the bit rate to 125000 bit/s.

ifconfig can0 up //Switches on the interface

Al inicio, las ID de ambos dispositivos están completamente nulas. Ahora, en uno de los dispositivos, enciendo el estado de escucha, que es:

candump can0

En el otro, envío un mensaje, algo como esto:

cansend 123#0x01 0x02 0x30 //123 specifies the ID, after "#" comes the data

Ahora, cuando esto sucede, la interfaz del remitente pasa de activo por error (estado normal) a error pasivo (estado de error). El "receptor" no recibe nada en absoluto; se mantiene en estado de error activo. No se procesan ni detectan mensajes, el registro está claro ( ip -d -s link show can0 ) y en el osciloscopio puedo ver la señal de diferencia, y el remitente envía el mensaje periódicamente, sin parar.

¿Tal vez está esperando una respuesta? No sé si es el mensaje completo o solo una fracción de él, pero seguro que cambia con los datos dados, así que supongo que es el mensaje completo. Y después de eso, si trato de enviar otro mensaje con datos diferentes, el programa simplemente lo carga en un búfer (lo sé porque después de 10 nuevos cansends, escribe que el búfer está lleno) y continúa transmitiendo El mismo mensaje antiguo. Así que tengo que escribir canconfig stop - > canconfig start para reiniciar la interfaz en modo de error activo.

Estoy seguro de que estoy arruinando algo fundamental, pero no puedo resolverlo.

¿Cómo puedo solucionar este problema? ¿Podría tratarse de un problema de software o hardware, o tal vez de ambos?

    
pregunta Thomas

2 respuestas

4
  

Ahora, en uno de los dispositivos, enciendo el estado de escucha

Cuando un nodo está en modo de solo escucha, no se envía ACK para los mensajes que se han recibido. Eso significa que cuando el nodo A (Modo normal, Error activo) envía un msg al Nodo B (Sólo escucha, Error activo), El nodo B no envía ACK para los mensajes enviados por el nodo A. Como resultado, el nodo A retransmitirá automáticamente 127 veces antes de pasar automáticamente al estado pasivo de error. En su configuración, cambie el nodo Sólo escuchar al modo Normal y verifique si el problema persiste.

  

Y después de eso, si trato de enviar otro mensaje con datos diferentes, el programa simplemente lo carga en un búfer (lo sé porque después de, como, 10 nuevos cansends, escribe que el búfer está lleno) y Sigue transmitiendo el mismo mensaje antiguo. Así que tengo que escribir canconfig stop - > puede comenzar a reiniciar la interfaz en modo de error activo.

Cuando el Nodo A (la misma situación que se muestra en la ilustración anterior), ahora en estado pasivo de error, continúa enviando el mensaje, aún no se recibirá ACK. Como resultado, después de 127 conteos más, el Nodo A se apagará. Su Nodo A nunca ha enviado los datos fuera de su búfer y, por lo tanto, está obteniendo Buffer Full. Solo cambia el nodo de solo escuchar al modo normal. Debería funcionar.

    
respondido por el Akshay Immanuel D
-1

prueba

>canconfig can0 ctrlmode loopback off

antes de establecer la tasa de bits y abrir la interfaz can0.  :)

    
respondido por el Salman

Lea otras preguntas en las etiquetas