«Hackeando» el CAN bus de un Peugeot 5008 y un Opel Astra

El maldito Start&Stop (S&S)

Hay una cosa que me molesta de los coches nuevos : con la intención de reducir el consumo y la contaminación en ciudad se inventaron el mecanismo del Start&Stop (S&S). Cuando el coche se detiene este invento para el motor del coche, y cuando  soltamos el freno para volver a movernos lo arranca de nuevo.

La idea puede ser medio buena y efectiva cuando el coche se detiene un rato largo (p.e. en un semaforo que se nos pone en rojo), pero cuando la parada es muy corta (p.e. cuando dejamos pasar a otro coche), es contraproducente: en lugar de consumir a bajas revoluciones p.e. 5 segundos, el motor se para esos 5 sg, pero debe poner en marcha el motor de arranque y arrancar para seguir la marcha (y el arranque es un momento de consumo y contaminación altos). Esto lo hace además «machacando» la bateria y probablemente algún otro elemento del coche (por eso los coches con S&S necesitan baterías más potentes, que cascan antes, y que cuando bajan de un cierto voltaje deshabilitan el S&S).

Pero no es sólo por los daños a la batería y su probable inutilidad (yo vivo en las afueras de una gran ciudad por lo que poco semáforo me encuentro), al menos en paradas cortas,  lo que me molesta, no. La primera vez que lo sufrí fue en una rotonda que hay en una autovía con 4 carriles, 2 en cada sentido. Al llegar a la rotonda desde una carretera lateral me paré un momento porque pasaba un coche, con la intención de continuar antes de que llegara el siguiente, y hete aquí que el coche se para y cuando voy a salir, con la prisa de aprovechar el hueco,  todavía tiene que arrancar… En esta ocasión provocó que me parara, manteniendo el embrague apretado para que no entrara de nuevo el S&S dichoso y esperara el siguiente hueco, pero bien podía haber provocado un accidente.

Lo otro que no me gusta es que, aunque el S&S se puede desactivar, está activado por defecto al arrancar el coche. En el Opel Astra hay un botón para desactivarlo, pero p.e. en el Peugeot 5008 no lo hay, hay que navegar por los menús de la pantalla para llegar al punto en que se puede deshabilitar.

Y los fabricantes no han puesto una opción para configurar si lo quieres activado o desactivado por defecto (en mi caso claramente estaría desactivado). Supongo que es cosa de la legislación anticontaminación, porque no creo que lo hagan por fastidiar al conductor/cliente.

Llegados hasta aquí empecé a pensar en maneras de librarme del engorro (y poder activarlo sólo cuando bajara a Madrid), y se me ocurrieron 3 alternativas:

    • En el Astra, dado que hay un botón, podía poner un pequeño circuito que activara el botón (un relé entre sus 2 contactos) al poco rato de encender el coche. Esto habría funcionado (con la necesidad de desmontar, ubicar los contactos del pulsador y montar un circuito con su alimentación), pero no es solución para el 5008.
    • Dado que en ciertas situaciónes el S&S no se activa (batería baja, luneta térmica encendida, mucho calor,…), podía forzar o fingir alguna de estas situaciones. Todas son válidas por lo que pensé en la batería y la luneta como las más sencillas (activo la luneta pero le pongo un interruptor en el cable que la alimenta, de manera que no le llegue energía si no la quiero). Esto debería funcionar en cualquier coche pero parece que lleva más cableado y toqueteo en más sitios para dejar un «buen acabado y usabilidad».
    • Dado que existe una manera de desactivar el S&S en todos los coches, esta instrucción debe llegarle de alguna manera a la centralita. En los coches moderno a través de una red interna. Si pudiera identificar el mensaje podía intentar reproducirlo al poco de arrancar el coche y así desactivar el S&S automáticamente.

Ha sido esta última alternativa la que me ha convencido más (juntandola a mi gusto por el cacharreo) y me he puesto a ello (todavía no he llegado al final del camino y no sé si tendré o no éxito).

Para andar este camino, me he «subido (cómo no) a hombros de gigantes», he aprovechado cosas que ya existen para no reinventar la rueda (intentaré mencionar las fuentes según pase por su uso).

El CAN bus

Qué es el CAN bus?

Antiguamente, si un elemento del coche se tenía que conectar a otro se tiraban un par de cables de uno a otro y asunto resuelto. Cuando apareció la centralita electrónica (que se tiene que hablar con casi todo), la maraña de cables que iba de la centralita a cada uno de los elementos era impresionante, y se añadía además los cables entre elementos que se conectaban sin pasar por la centralita. Todos queriendo hablar a la vez. Un lio.

Hacia 1985 Bosch diseño una red de comunicaciones específica para coches: el bus CAN (Controller Area Network). La red físicamente consiste en un único par de cables que van de un elemento a otro y que permite que todos los elementos puedan enviar y recibir mensajes. La señal en los 2 cables es diferencial, para reducir el ruido al recibir interferencias. Cada elemento tiene un identificador (ID) y cuanto más bajo sea éste mayor prioridad tendrán sus mensajes en caso de conflicto en el acceso al medio.

La definición del procolo se ha estandarizado y ha ido evolucionando. Una versión común es la v2.0 (aunque posteriormente se ha definido CAN FD que permite alcanzar mayores velocidades y que ésta no sea constante ). En la v2.0 la comunicación se establece mediante tramas cortas de longitud variable que se pueden emitir en broadcast o esperando respuesta de un dispositivo concreto. La trama típica contiene el ID del dispositivo emisor, la longitud de los datos a enviar y los datos.

Por desgracia para mi solución, el coche tiene más de un bus CAN (para aislar «temáticas») y hay que meterse en el adecuado para escuchar e intentar reproducir el mensaje que desactive el S&S. El bus CAN más accesible es el de diagnóstico, que se ubica en ambos coches debajo del volante (a la izquierda en el Astra y a la derecha en el 3008/5008), por lo que empezaré por ahí. Hay otros buses, como el de Comfort o el de Sistema.

Hay que tener en cuenta que desde 1991 es obligatorio que todos los coches nuevos vengan con un conector ODB (actualmente ODB2=ODBII) que dispone de conexión al bus CAN de diagnóstico. De hecho, desde 2018 es obligatorio que la ITV se conecte al coche a través de este conector para ver si hay fallos registrados que puedan afectar a su resultado (p.e. contaminación).

Uno de los problemas que sé desde un inicio que voy a tener es la falta de información al respecto de los buses, los dispositivos y la mensajería. Esto se debe probablemente a 2 motivos : por un lado secretismo y deseo de confidencialidad por parte de los fabricantes, y por otro riesgo de afectar al funcionamiento del coche si el usuario se pone a tocar donde no debe ni sabe.

ADVERTENCIA (y disclaimer): jugar con los buses del coche podría provocar un mal funcionamiento de éste, averías, pérdida de la garantía y eventualmente un accidente. NO LO HAGAS EN NINGUN CASO CON UN COCHE EN MARCHA O QUE VAYA A CIRCULAR POR VIAS PUBLICAS. Si no haces caso de esta advertencia lo hacer a tu propio riesgo, y el de los demás si la aventura acaba en accidente. Esto incluye cualquier conexión no homologada a los sistemas internos del coche o la introducción en los buses de mensajes ajenos al diseño del coche. La lectura de mensajes en el bus de diagnóstico con un dispositivo homologado es mejor hacerlas con el coche parado.

Cacharrería

Hace unos años me compre una pequeña herramienta de análisis de diagnóstico para el coche : un conector ODB2 con conexión por bluetooth al teléfono. En mi caso fue un Mini ELM327 con Interfaz V2.1 Bluetooth, que puedes encontrar en amazon o aliexpress por unos 5€. Usando este dispositivo desde un teléfono android con aplicaciones como Torque puedes consultar unos cuantos elementos del coche o ver p.e. los fallos registrados. Pero este dispositivo no permite el cacharreo.

Lo primero que hice cuando empecé a interesarme por el tema de S&S fue comprar algunas piezas :

    • Un conector ODB2 con doble salida (de manera que pudiera conectar mi dispositivo y aún tener disponible un conector)
    • Un interface para poder conectar el coche a un arduino: por un lado se conecta al CAN bus (CAN-H y CAN-L) y por el otro tiene conexiones para montar un bus SPI con el arduino (SCK, MISO,MOSI,CS).
    • Un arduino nano. Mi idea original fue conectar un ESP32 (porque me gusta más, es más rápido, tiene wifi, etc), pero dado que al final (si tenía éxito) el dispositivo sería autónomo (no necesita conexión a PC o móvil), decidí pasar a Arduino para no tener que convertir niveles (3v3). Me decidí por un nano cuando buscando librerías para manejar la placa caí en esta página, donde se puede montar un circuito básico que comunica coche y PC (a través del monitor Serial de arduino).

En esta imagen podéis ver mi dispositivo completo tras comprobar que funciona (se comunica con el PC).

Además de los elementos anteriores tiene un 7805, para sacar 5v a partir de los 12v que hay en el ODB2, y le pondré un interruptor, para poder apagarlo o poder desconectar el 7805 cuando la alimentación le llegue por el USB.

El Software

Para escuchar en el bus he partido del programa de ejemplo que viene con la libreria (se conecta al bus y saca por el puerto serie los mensajes que recibe) y un programa en python de alguien que ha jugado con el bus antes que yo.

He modificado ambos programas (y más que los tocaré), pero en mi primera prueba ya he conseguido ver información del Astra

Ahora toca empezar a investigar…

Autor: JdJ Adm

Administrador del jardindeljubilado.com

2 opiniones en “«Hackeando» el CAN bus de un Peugeot 5008 y un Opel Astra”

  1. Hola,
    quería hacer sniffing en una Peugeot Rifter con el mismo propósito.
    Me preguntaba si tenías el diagrama de pines del conector OBD-II de los nuevos Peugeot… y las redes CAN presentes junto con sus velocidades de comunicación.

    Gracias

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

5 × cuatro =