lunes, 4 de abril de 2011

Grupo volkswagen: CAN Confort

.



Los coches del grupo Volkswagen (Audi,Seat,Skoda y Volkswagen) disponen de 3 redes CAN: tracción, confort e infotainment. (http://www.ate.uniovi.es/12609/seminario_slides.pdf)
En principio, toda la información debería ser válida para cualquier coche del grupo.
Vamos a intentar "hackear" los datos de la CAN Confort, que es el bus en el que se encuentran la centralita confort, clima, puertas,... Para ello, lo primero es localizar el bus:


Si quitamos el pasamuros de la puerta, vemos que tenemos el par de CAN que estamos buscando. Para empezar a sniffear, he soldado un par de cables al conector de la puerta trasera, ya que me resultaba lo más cómodo para empezar. Es decir, he desmontado el embellecedor de la puerta trasera y me he conectado al conector que va a la centralita que controla el motor de la ventana, cierre,etc


Los datos de dicho bus son:

  • CAN H= Naranja/verde
  • CAN L= Naranja/marron
  • Velocidad= 100 kbps

Ahora ya puedo conectarme con mi Arduino + brick CAN e intentar descifrar la información que viaja en dicho par. No necesito tener el puente que habilita la resistencia terminadora del brick.
Nada más conectarnos, empezamos a recibir todos los mensajes (con el contacto dado).

Nos toca hacer un poco de investigación..... pero con tiempo y paciencia..... tachán!!!
Al arrancar el coche, he visto que dos bytes del mensaje con ID=0x353 "bailaban". Afortunadamente usan la misma codificacion que el estandard OBD, es decir rpm= ((Byte 2<<8)||(Byte 1))/4=0.25*(256*Byte2+Byte1).


Veámos un video :




El código para disponer dicha información es tan sencillo como:

// ----------------------------------------------
// SECUDUINO
// http://secuduino.blogspot.com/
// CAN CONFORT GRUPO VOLKSWAGEN
// 24/Apr/2011
// ---------------------------------------------- 

#include <CAN.h>
float rpm;

void setup()
{
 Serial.begin(115200);
 Serial.println("Empezamos...");
 CAN.begin(100);
}

void loop()
{


 if (CAN.CheckNew())
 {
 
   if ( CAN.ReadFromDevice(&CAN_RxMsg) )
   {
           
       if (CAN_RxMsg.id==0x353)
       {
         rpm=0.25*(256*CAN_RxMsg.data[2]+CAN_RxMsg.data[1]);
         Serial.print("RPM=");
         Serial.println(rpm);
       }

    }
  }
}






Pero no sólo eso!! También podemos controlar cosas.... como por ejemplo, las ventanillas!!




También existen mensajes que disponen de la posición actual de las ventanillas, por lo que se podría hacer un control en lazo cerrado para tener la ventanilla en la posición deseada.
Existen mensajes para apertura/cierre centralizado, etc.

Aunque el cable sale de la puerta trasera, no significa que no pueda controlar cada una de las otras ventanillas. Simplemente que nos hemos conectado a la red CAN en dicho punto.

Seguiremos ampliando más información!!Ya que hemos descubierto muchas cosas!! Anímate a tomar parte del proyecto!!




30 comentarios:

David dijo...

Has conseguido descifrar algo?

SECUduino dijo...

Hola David,

Ya hemos descifrado bastantes cosillas!! He actualizado el post.

Saludos

David dijo...

Muy buenos los avances!!!

Ivan Eduardo dijo...

Hola, se ve muy interesante. Quisiera verlo expandido. Por cierto, esto apareció en Hack-a-Day, www.hackaday.com.

Abel dijo...

Hola, yo estoy detrás de otro proyecto con el bus CAN pero en Mazda, échale un vistazo:
http://hackingmazda.blogspot.com/

Igor dijo...

Muy bien Abel!!!
He visto que vas usar PIC. Como puedes ver, aqui estamos intentando usar Arduino (Open hardware) como plataforma.
Mantennos informados de los mensajes que descifres!!!

Israel F.F. dijo...

¿Alguien ha intentado meterse con el estándar LocalCAN de ciertos equipos de laboratorio Mettler-Toledo?

Estoy en un proyecto trabajando con eso.

Igor dijo...

Yo no.... pero toda información bienvenida!!!

Anónimo dijo...

Hola buenas, tengo un proyecto en las manos con arduino y bus can y tengo una duda que no acabo de entender, ¿como accedéis al bus comfort directamente? ¿No podría accederse directamente por el terminal de OBD y sniffear desde allí? Gracias por vuestra información.

Igor dijo...

Hola,
En el grupo volkswagen el bus CAN esta protegido por el OBD. Existe un dispositivo, llamado gateway que hay que enviarle mediante otro protocolo (linea K) para poder recibir el bus CAN por dicho conector (OBD).
A parte, que de esta forma, puedo inyectar paquetes directamente al bus, para poder abrir/cerrar puertas, bajar ventanillas, etc.
Saludos!

Anónimo dijo...

Muchas gracias por la información, pero ¿todos los coches tienen protegido, o que mandarles por ese otro protocolo para poder acceder? ¿Ese protocolo de que trata? Y la última, si mi coche tuviera el OBD también con CAN ¿como podría diferenciar entre confort y motor cuando estuviera snifeando el bus?

Anónimo dijo...

Se me olvido, si mi coche tuviera OBD mediante Can como antes, ¿necesitara dar un ACK para comenzar a recibir? Y la duda de antes, como el gateway une los 2 buses de can del coche, el de confort y el de motor, no entiendo como recibir por OBD los 2 o distinguirlos, ni a que velocidad llegan... Siento si pregunto demasiado^^

Igor dijo...

El gateway es como un router, y tampoco te puedo decir si puedes recibir absolutamente todos los mensajes del resto de buses por ahi.

El tema de conectarse a las redes directamente (Confort,Tracción, etc) es para poder "interactuar" y por su puesto tener acceso a todo lo que se está transmitiendo.

Puedes ojear el link que hay en este post (http://www.ate.uniovi.es/12609/seminario_slides.pdf)

Saludos

Anónimo dijo...

MUY BUENO!!!
esta semana me encargo los componentes y me hago el circuito, comenzare con mi renault laguna2 y ya os ire contanto.

SECUduino Team dijo...

Puedes pasarte por BUY, tenemos una shield a un precio muy competitivo!!

;-)

Anónimo dijo...

hola que tal SECUduino me intereso mucho esta pajina no saves como me emosione cuando lo mire me interesaria por full featured como cuanto me sale ??

Igor dijo...

Hola, contacta con nosotros por el mail que puedes encontrar en la seccion de Buy.
Saludos

:-)

Anónimo dijo...

On a mkiv Golf I am looking to send a signal when the ignition is turned to make the needles sweep before the engine starts.
Would this shield work?

Regards

Andrew

hugos31 dijo...

buena secundino,sigue pa adalente. yo tambien quiero formar parte de tu grupo

djmoon dijo...

Hola Igor, has conseguido saber cual es el código del cierre centralizado?, Un saludo

enry68 dijo...

Ciao a tutti.

Sto mettendo in pratica un mio vecchio progetto e sto utilizzando il lavoro di Igor e di tutti gli altri Amici. Vorrei poter condividere con voi le nostre conoscenze.

Sto parlando del gruppo VAG (Volkswagen Audi Group).

Enrico.

Sorry I wrote in Italian ...

Debraj dijo...

Refer to my CAN bus hacking of my car..

https://sites.google.com/site/hobbydebraj/home/can-bus-based-obd-reader

juandlr dijo...

hola!!! En q quedó la novela de este proyecto me interesa saber más.
Ya que pienso en hacer mi caribe 84 a eléctrico q me informe de todo y controle todo. claro todo lo are con paciencia. de antemano gracias!!!.

Unknown dijo...

hello sir , i would like your help in deciphering the following code

Bus speed: 500000 kbit/s H, Sampling point: 75%, SJW 2

18DAF130 X | 8 | 02 7E 00 55 55 55 55 55 | 5076
18DAF128 X | 8 | 02 7E 00 55 55 55 55 55 | 1506
18DAF110 X | 8 | 02 7E 00 55 55 55 55 55 | 1620
18DAF153 X | 8 | 02 7E 00 55 55 55 55 55 | 8639


Can you explain me what the above data corresponds to in-terms of
1: Start of frame
2: Arbitration Field
3: Control Field
4: Data Field
5: CRC Field
6: ACK Field
7: End of frame

This is just an example for the data i was able to gather from a
Honda City , Petrol Injection. CAN protocol observed in ISO15765 CAN HIGH AND ISO 15765 CAN LOW .

Your help will be much appreciated sir.

Unknown dijo...

I just built a filter tool to compare 2 files and output the found commands to a third file.

here you go:

https://www.dropbox.com/sh/ozqvv0htxu4555l/AACAW4oCjirvyZPjCFSdR19fa?dl=0

Unknown dijo...

Hola, actualmente estoy estudiando todo este mundo del canbus pero es bastante complicado conseguir informacion puntual, actualmente lo que busco es leer un parametro del motor, especificamente el boost, y mostrarlo en la pantalla FIS de un seat leon, mi dudas son las siguientes:

1. si quiero leer este parametro a que canbus me debo conectar?
2. para enviar informacion a la pantalla fis debo estar conectado al canbus infotainment?
3. si el canbus gateway interconecta todas las redes can existe alguna forma de leer directamente las variables del gateway?
4. en el repositorio hay un ejemplo para leer las rpm por medio de obd sobre canbus

parte del codigo

CAN_TxMsg.id=0x7DF; esta ID de donde salio?
CAN_TxMsg.header.rtr=0;
CAN_TxMsg.header.length=8;
CAN_TxMsg.data[0]=0x02; esto significa algo?
CAN_TxMsg.data[1]=0x01; //MODE
CAN_TxMsg.data[2]=0x0C; //PID

Unknown dijo...

hi guys,
I'm a software engineer student working on a canbus project,
i have connected to my car's (vw polo 1.2 tsi 2011) canbus via rasberry-pi and i have succesfully managed to sent and recieve canbus messages,
so far i figured out how to controll small things like radio system and so, but i couldnt control other things like windows and doors lock, i tried to record messages and resend the recording file with no success, why is that?
does i need any authentication first?
what i'm doing wrong?
Hope you can help me ,
thanks

Unknown dijo...

@Unknown from 8th may
Exact same problem here, Audi A4 B7 -07. Im able to control almost everything in Comfort bus except builtin larm and driver side window / mirror.
im more than happy to open a discussion with you in a chat or similar, haunt me down at G+ or send me a mail prototive@gmail.com or send a PM from my project page: https://www.facebook.com/R4Audi/

/D

Unknown dijo...

Hola Igor, has intentado conectando directamente al puerto OBD2?

Has intentado con raspberry?

Anónimo dijo...

Buenas tardes,

estoy trabajando en un proyecto en el que debo de implementar un nuevo sistema para integrarlo al CAN Bus y me surgen las siguientes dudas:

- ¿Es posible leer otros parámetros de un mismo bus o de otros buses?
- ¿Cómo me conecto con el bus CAN?
- Una vez conectado al bus CAN, ¿cómo puedo interactuar con él (leer parámetros del bus y enviar datos al OBD)?


Cualquier ayuda será bienvenida. Muchas gracias ante todo.

Publicar un comentario