Problema al capturar una señal específica del bus CAN

1

Tengo un problema al capturar una señal específica de un bus CAN. Dado que esta tarea está bastante fuera de mi área de trabajo ordinaria, podría ser una pregunta bastante simple.

En la lectura del dispositivo de la CAN, tengo que especificar 7 valores:

  • CAN-ID (0x ....)
  • Bit de inicio
  • Longitud de bits
  • Usa Little Endian (sí / no)
  • Bit de signo disponible (sí / no)
  • Use el complemento de dos (sí / no)
  • Sign Bit

Información que tengo sobre la señal deseada:

  • CAN-ID (se explica por sí mismo)
  • orden de bytes: Motorola
    • Google me dice que esto lleva a 'usar little endian: false'
  • El bit de signo está disponible (se explica por sí mismo)
  • longitud: 16 bits
  • DLC = 8
  • La última información que tengo es una tabla de diseño (abreviada) de todo el mensaje con mi señal marcada:

En pocas palabras, obviamente, mi problema radica en no estar familiarizado con la ordenación de bytes y cosas similares. Todavía tengo que especificar inicio-bit, signo-bit y ya sea o no para usar el complemento de dos. ¿Alguien puede ayudarme con los valores, ya que todas las combinaciones que tenían sentido para mí no funcionaron hasta ahora? Muchas gracias, muy apreciado!

    
pregunta user168677

1 respuesta

0

Todo esto tiene muy poco que ver con CAN. Los únicos términos CAN aquí son CAN-ID y DLC, este último significa el tamaño de los datos en bytes (de 0 a 8).

El resto de los términos definen algo en un nivel más alto que el propio protocolo CAN, es decir, los datos transportados. CAN le permite enviar cualquier información que desee de más de 0 a 8 bytes por paquete. No define ni importa cuáles son esos datos.

Por lo tanto, no está del todo claro qué intentas hacer aquí. Su herramienta parece extraña y especializada, haciendo suposiciones sobre el protocolo de nivel superior utilizado.

Explicación de los diversos términos técnicos:

Iniciar bit & Longitud de bits
"Bit de inicio" no es aplicable a los sistemas CAN. Los bits de inicio se utilizan en UART y en protocolos similares. Alguien está usando el término incorrecto, o esto se refiere a algún bit secreto en los datos. La longitud de bits probablemente se refiere a la longitud de un elemento de datos particular en el protocolo enviado, como 16 bits.

Little Endian vs Big Endian
Esto se refiere al orden de bytes de los datos enteros, para los enteros que son más grandes que 1 byte. Wikipedia puede darle la historia completa. Básicamente, en la década de 1980 el campamento de Intel predicó Little Endian (ls byte at ls address) y el campamento de Motorola predicó Big Endian (ms byte como ls address).

Esto solo puede referirse a los datos transportados por el paquete CAN. El protocolo CAN de bajo nivel en sí no tiene endianess. (Aparte de en el CRC-15, que solucionó Big Endian, no puedes cambiarlo).

Bit de signo disponible, Complemento de dos, Bit de signo
Todos estos significan lo mismo. Estos deben referirse a los datos. Supuestamente se preguntan si se aplican los números firmados, y si es así, cuál es el formato. Aparentemente la opción es complemento a dos (la más común) o magnitud firmada. Si no sabes qué es el complemento de dos, entonces Wikipedia & estudiar.

Para resumir, no puedes hacer nada con lo que tienes. Usted debe tener una especificación adecuada de lo que se supone que es el protocolo de nivel superior y qué formato tiene. Nadie en Internet puede decirle qué datos está enviando un protocolo no estándar en particular. El estándar CAN no especifica esto.

Muestra una tabla con 5 bytes de datos y dice que el DLC es de 8 bytes. Eso no tiene ningún sentido. Supuestamente, debe leer un byte de datos de 16 bits en Big Endian, formato de complemento a dos de los bytes 2 y 3.

    
respondido por el Lundin

Lea otras preguntas en las etiquetas