CANUSB SJA1000 Filtering

4

Estoy usando un adaptador CANUSB conectado a mi automóvil que intenta leer solo los mensajes CAN con el identificador de 11 bits 0x1D6. Necesito realizar el filtrado de hardware porque el filtrado de software es demasiado lento para mi aplicación.

La descripción del protocolo CANUSB ( enlace ) explica cómo configurar el filtrado y se refiere a la hoja de datos de SJA1000 ( enlace ) para obtener una descripción de los registros de hardware involucrados.

Para configurar el código de aceptación, escribo "MFFFFF3AC \ r" en el puerto serie. Esto debería ser equivalente a configurar AC0 = FF, AC1 = FF, AC2 = F3, AC3 = AC en un controlador SJA1000. Encontré estos valores desplazando 1D6 a la izquierda un bit, ya que el último bit se usa para RTR, que no me importa.

Para configurar la máscara de aceptación, escribo "mFFFFF001 \ r" en el puerto serie. Por lo que entiendo, esto debería configurar el controlador SJA1000 para filtrar solo con el identificador de 11 bits especificado anteriormente.

Estos son los ID que obtengo con esta configuración:

0x0a8 0010101000
0x0aa 0010101010
0x0c0 0011000000
0x0c4 0011000100
0x0c8 0011001000
0x0d7 0011010111
0x2d5 1011010101
0x2fa 1011111010
0x31d 1100011101
0x328 1100101000
0x330 1100110000
0x349 1101001001
0x360 1101100000
0x364 1101100100
0x3b0 1110110000
0x3bd 1110111101

Como puedes ver, no hay signos de 0x1d6. Los veo si reinicio el dispositivo sin ingresar comandos de filtrado.

¿Puede alguien familiarizado con el filtrado de SJA1000 decirme qué estoy haciendo mal aquí?

    
pregunta Chetic

2 respuestas

2

El dispositivo CANUSB habilita el SJA1000 en el modo de "doble filtro", por lo que usted desea ver las figuras 11 o 12 (dependiendo de si está filtrando las ID de 11 bits o de 29 bits) del manual de SJA1000.

Puede ver que esta especificación coincide con el ejemplo dado en el manual de CANUSB para los comandos M y m (código y máscara). Para la máscara, un poco de 1 significa "no importa" y un poco de 0 significa "cuidado". Si no desea utilizar la parte del "filtro 1" (que compara no solo la ID, sino también el primer byte de datos en el mensaje), configure el código y los bits de máscara correspondientes al filtro 1 en todos los 0s (para que solo coincidirá con un ID y un byte de datos de 0, lo que no sucederá).

Suponiendo que no le importa el bit RTR, desea utilizar: M00003AC0 y m00000010

    
respondido por el Kevin M
2

Sospecho que usted es víctima de un manual profundo y profundamente defectuoso. Observo que los comandos "r" y "R", que uno podría pensar que son comandos de lectura, se enumeran como comandos de lectura pero se describen como transmisión. Además, establece que los identificadores de 11 bits se pueden seleccionar sobre los 11 bits completos, pero no los identificadores de 29 bits. Esta es una confusión obvia de la función del SJA1000 en modo básico, donde solo se pueden filtrar los 8 msbs del campo de identificación de 11 bits. Incluso teniendo en cuenta el inglés como segundo idioma, esto no es una buena señal.

No lo ha dicho, pero supongo que está haciendo pruebas involucradas en la conexión a un bus CANBus existente y leer lo que hay en él. Además, sospecho que todas las unidades existentes usan el campo de ID estándar (no extendido) con 11 bits, y usted está usando el comando "riii" para leerlo.

Lo primero que debe tener en cuenta es que el manual no tiene sentido. Compare Fig.9 y Fig.10 en los manuales NJA100. Para las identificaciones de 11 ofertas, los datos de identificación están contenidos en el ID 28-18, con los registros de máscara 0 y 1 que se están utilizando. Para las identificaciones de 29 bits, las 11 lsbs son ID10-0, y los registros de máscara correspondientes son 3 y 4. Parece que el manual está usando el comando R y, de alguna manera, fingir que la identificación está formateada como si se hubiera leído usando r comando, si eso tiene sentido. La afirmación de que usar E0 en lugar de F0 para enmascarar el bit RTR es una confirmación de esto.

Más confirmación viene de sus datos de identificación. La configuración de la máscara no discriminó en los bits altos, y me doy cuenta de que los 10 bits de identificación que se muestran tienen actividad, es decir, responden a los problemas de la máscara.

Lo único que has hecho bien (creo) es desplazar a la izquierda los bits de tu máscara, pero no por consideraciones de RTR, sino para justificar a la izquierda la identificación de 11 bits en los 12 bits más a la izquierda de los registros.

Así que probaría M3ACFFFFF y m000FFFFF en su lugar. Si eso no funciona, intente configurar varias combinaciones de bits en los registros AC0 y AC1, y vea los identificadores que detecte.

    
respondido por el WhatRoughBeast

Lea otras preguntas en las etiquetas