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!!




23 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!!!.

Publicar un comentario en la entrada