CANbus, o Controller Area Network bus, es un protocolo de comunicación desarrollado para permitir que múltiples dispositivos electrónicos dentro de un vehículo se comuniquen entre sí sin necesidad de un controlador central. Cada dispositivo en la red puede enviar y recibir mensajes con identificadores únicos, lo que permite que todos los nodos “escuchen” la red y respondan solo a los mensajes relevantes para ellos. Esta estructura elimina la necesidad de múltiples cables, simplificando el diseño del sistema eléctrico y mejorando la eficiencia de la comunicación.
Una de las ventajas clave de CANbus es su capacidad para priorizar mensajes y su alta confiabilidad. Los mensajes con identificadores más bajos tienen mayor prioridad, lo que garantiza que los datos críticos se transmitan primero. Además, CANbus incluye mecanismos avanzados de detección y corrección de errores, lo que lo hace ideal para entornos donde la interferencia eléctrica es común. Por estas razones, CANbus se ha convertido en un estándar en la industria automotriz y en otras aplicaciones industriales.
El Volvo sobre el que estamos trabajando está equipado con un Módulo Central Electrónico (CEM), que actúa como el cerebro del sistema eléctrico del vehículo. Este CEM gestiona dos redes CAN distintas: una de alta velocidad (HS-CAN) y otra de baja velocidad (LS-CAN). La red de alta velocidad se utiliza para la comunicación crítica y rápida entre sistemas esenciales como los frenos y el motor, mientras que la red de baja velocidad maneja funciones menos urgentes como la iluminación y los controles de confort.
Técnicamente, un mensaje CANbus consiste en un conjunto de bits que se transmiten a través del bus compartido. Cada mensaje tiene un identificador (ID) que determina su prioridad y su contenido. El mensaje incluye un campo de datos que puede contener hasta 8 bytes de información, seguido por una secuencia de verificación (CRC) para detectar errores. Cuando un nodo en la red CAN quiere enviar un mensaje, coloca su ID en el bus y espera. Si otro nodo intenta enviar al mismo tiempo, el bus prioriza el mensaje con el ID más bajo. Los nodos receptores verifican la integridad del mensaje utilizando el CRC, y si es correcto, procesan la información contenida en el mensaje según su configuración.
Un mensaje can bus en volvo tiene la siguiente estructura:
- Id de solicitud, que es de la forma: 0x000FFFFE
- Data, que contiene: DLC(Numero de bits significativos), ID ecu,Comando,Parametro y paddin si es necesario.
El ID de solicitud (Request ID) es un código utilizado para identificar mensajes de diagnóstico específicos que se envían al vehículo. Dentro de la sección de datos, se encuentran elementos como la dirección de la ECU objetivo, el número de parámetro que se desea leer o modificar, y el comando que solicita la lectura de datos actuales por identificador. También se incluyen el número de respuestas solicitadas y bytes de relleno, esenciales para garantizar que el mensaje sea correctamente procesado y respondido por las centralitas del vehículo,
Bien, una vez en este punto, sabemos cómo nuestro coche envía los datos. La gente normal pararía aquí y se daría cuenta de que obtener los ID de cada ECU del coche y qué comando envía cada ECU sería demasiado tiempo invertido con un sniffer de la red CAN bus hasta dar con el que nos interesa.
Pues bien, existe un programa de diagnosis propietario de Volvo, el cual sirve para activar funciones del coche y leer datos a través del OBD. Si revisamos el diagrama eléctrico del coche, nos fijamos que las dos redes CAN bus, tanto la de alta velocidad como la de baja velocidad, acaban en el conector OBD, por lo que el programa de diagnosis, con total seguridad, envía los comandos en formato CAN bus. Con esto, podemos concluir que la información tan preciada y valiosa, como los ID de las ECU y los números de parámetro, se encuentran almacenados de alguna forma en este programa.
Como no podía ser de otra manera, he instalado el programa en mi máquina virtual de pruebas. Es bastante laborioso instalarlo, pero con paciencia y leyendo un poco, he conseguido instalarlo sin mucha dificultad en Windows 10, aunque recomiendan Windows 7 Pro.
Echando un vistazo por las carpetas de instalación, ya que durante la instalación de VIDA, tuve que instalar sql de microsoft en el ordenador, si o si, debían estar las bases de datos, que muy posiblemente guarden la relación de los comandos can-bus y que es exactamente lo que activa por la descripción que tiene mas humana el software.
y… bingo!
Procedo a instalar el ssms(sql server managment studio), y con una búsqueda en google doy con el usuario y la contraseña de la base de datos, del software.
Previamente había leído mi coche con mi herramienta de diagnostico y se había quedado guardado que tipos de ecu tengo junto con el VIN. También como curiosidad aparece el VIN del que posiblemente subiera el programa vitaminado.
Haciendo una query sobre la base de dagos DiagSwdlRepository, la cual puede contener los Script que buscamos para activar funciones, obtenemos lo siguiente:
Vemos una columna de XmlDataCompressed, he pegado este código y lo he pasado a binario a ver que tipo de archivo es, y tenia pinta de ser un .rar el cual muy posiblemente contendría el xml con el script que buscamos.
Tras extraer el rar, en efecto teníamos un xml dentro del rar. (Con un poco de código en python podemos hacer esta tarea automática)
Analizando los xml resultantes de la query, veo que es muy complicado dar con los script de mi coche, asi que he buscado en la base de datos “carcom”
Tras hacer unas simples query obtenemos lo siguiente con mis ecu, esta información es la que estábamos buscando.
En la proxima parte, veremos como utilizar correctamente esta información y haremos pruebas. De momento tengo que comprar hardware, como un teensy y unos driver de Can bus.