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í?