Hice un lector OBD-II, y funciona sin problemas tanto para CAN 11 bits / 500 kbit / sy CAN 29 bits / 500 kbit / s. Pero no siempre; cuando estaba probando un Honda Accord, mi lógica de detección CAN falló (CAN 29/500 encontrada a través del escáner ELM).
Lógica:
CAN_Detection () → configure el ID de solicitud y el ID de respuesta para CAN de 11 bits → GetPid (ENGINE_RPM, & buffer) → si recibimos RPM y RPM mayores que 0, entonces protocol = CAN11.
Si ha fallado → configure el ID de solicitud y el ID de respuesta para CAN de 29 bits → GetPid (ENGINE_RPM, & buffer) → si recibimos RPM y RPM mayores que 0, entonces protocol = CAN29
Durante la depuración, noté que recibía un pid diferente como respuesta. Por ejemplo, cuando solicito RPM (0x0C) obtengo 0x0D (velocidad), y de acuerdo con mi lógica, estoy verificando si el pid que solicité y el que recibí son los mismos. Pero no es que no tenga RPM; Lo consigo después de un desplazamiento de alrededor de cuatro lecturas. Sé que si cambio esto y tengo un enfoque diferente para verificar la CAN, se solucionará mi problema, pero me preguntaba por qué estaba obteniendo un valor de compensación.