¿Qué son estos marcos / mensajes CAN?

2

Estoy escribiendo software para un proyecto que me envía datos utilizando un bus CAN. El software funciona bien en escenarios de prueba pequeños con 3-4 miembros del bus, sin embargo, con el aumento de miembros, el bus envía datos con direcciones muy altas y datos nuevos (no hexadecimales) que no he visto antes:

Primer y último 4 marcos para referencia

(1541503830.323881) can0 011#008955EA0AC30AC8
(1541503830.412314) can0 030#0A770A8E00100000
(1541503830.412758) can0 61F#0A770A8E00100000
(1541503830.413049) can0 69F#0A770A8E00100000
(1541503830.413889) can0 **00C480A7**#0A770A8E54707FF3
(1541503830.414182) can0 **09014E9F**#0A770A8E54707FF3
(1541503830.414464) can0 **029D3E9F**#0A770A8E54707FF3
(1541503830.414753) can0 **1A7D3E9F**#0A770A8E54707FF3
(1541503830.415040) can0 **1A7D3E9F**#0A770A8E54707FF3
(1541503830.415329) can0 **1A7D3E9F**#0A770A8E54707FF3
(1541503830.415618) can0 **1A7D3E9F**#0A770A8E54707FF3
(1541503830.415904) can0 **1A7D3E9F**#0A770A8E54707FF3
(1541503830.416192) can0 **1A7D3E9F**#0A770A8E54707FF3
(1541503830.416475) can0 **1A7D3E9F**#0A770A8E54707FF3
(1541503830.416764) can0 **1D3E9F0F**#0A770A8E54707FF3
(1541503830.417872) can0 030#0A770A8E0FF30FF5
(1541503830.466440) can0 031#0A7D54580A8E0A99
(1541503830.514830) can0 008#0000000000000000
(1541503830.520243) can0 032#0000000000000000

Aquí veo direcciones demasiado altas. Otros datos desconocidos:

(1541503837.081060) can0 020#0AC20AF90AE10ACC
(1541503837.081271) can0 020#0AC20AF90AE10ACC
(1541503837.081478) can0 020#0AC20AF90AE10ACC
(1541503837.081689) can0 020#0AC20AF90AE10ACC
(1541503837.082138) can0 448#**R4**
(1541503837.133876) can0 01F#**R4**
(1541503837.135442) can0 03C#0AC20AF9
(1541503837.135886) can0 0DF#0AC20AF9
(1541503837.136202) can0 75F#0AC20AF9
(1541503837.136781) can0 65F#0AC20AF9

No creo que usemos 0x448 , también datos no hexadecimales.
Necesito una dirección en la que trabajar, ¿estoy buscando hardware defectuoso o estas especificaciones del protocolo CAN que aún no conozco?

Los datos se registraron utilizando candump -L can0 en Linux, socket can como controlador y un MCP2515 independiente como interfaz CAN, conectado a través de SPI. Los otros miembros también usan el MCP2515, sin embargo, se sueldan directamente en PCB.

Datos adicionales registrados con candump -e -d can0 :

can0  02F   [8]  00 04 00 FA 00 02 00 00
can0  010   [8]  0A BA 0A F3 0A D8 0A CD
can0  011   [8]  00 88 55 C1 0A B6 0A AC
can0  012   [8]  00 01 00 02 00 10 00 00
can0  08812DD7   [8]  remote request
can0  1FF7D75F   [8]  remote request
can0  1EFAEBFF   [8]  remote request
can0  1FFBFBDF   [8]  remote request
can0  0FEF7FFF   [8]  remote request
can0  1BFFFDFF   [8]  remote request
can0  1FEFFDFF   [8]  remote request
can0  1FEFFDFF   [8]  remote request
can0  1FEFFDFF   [8]  remote request
can0  1FEFFDFF   [8]  remote request
can0  1FEFFDFF   [8]  remote request
can0  1FEFFDFF   [8]  remote request
can0  1FEFFDFF   [8]  remote request
can0  1FEFFDFF   [8]  remote request
can0  1FEFFDFF   [8]  remote request
can0  1FF7FFFF   [8]  remote request
can0  1FFFFFFF   [8]  remote request
can0       008   [8]  00 00 00 00 00 00 00 00
can0       009   [8]  00 00 00 00 02 58 00 00
can0       00F   [8]  00 04 00 00 00 10 00 00
can0       030   [8]  0A 71 0A 82 0F F4 0F F1
-- snip --
can0       02F   [8]  00 04 00 FA 00 02 00 00
can0       010   [8]  0A B4 0A F3 0A D6 0A CD
can0       011   [8]  00 89 55 A8 0A B5 0A A5
can0       012   [8]  00 01 00 02 00 10 00 00
can0  1FFFFFFF   [8]  remote request
can0       5BD   [1]  remote request
can0       6DF   [1]  remote request
can0       008   [8]  00 00 00 00 00 00 00 00
can0       009   [8]  00 00 00 00 02 58 00 00
can0       00F   [8]  00 04 00 00 00 10 00 00
can0       030   [8]  0A 8C 0A 91 0F F0 0F F2
    
pregunta Kimmax

1 respuesta

2

Lo que ves se parece a marcos remotos : es una función del bus CAN que permite transmitir ciertos marcos A petición en lugar de periódicamente. En pocas palabras, una trama normal se transmite por un solo nodo, primero la ID, luego la longitud, luego los datos. Con un marco remoto, el nodo que desea que los datos transmitan el ID y la longitud del marco más un bit especial (RTR), y espera el nodo que maneja ese marco para transmitir los datos reales.

448#**R4** significa que un nodo ha solicitado el marco remoto con ID de 448 y DLC de 4, pero nadie en el bus se ofreció para suministrar los datos.

    
respondido por el Dmitry Grigoryev

Lea otras preguntas en las etiquetas