domingo, 16 de enero de 2011

Primer análisis de mensajes CAN

Ya tengo capturados unos cuantos mensajes con el identificador de mensaje. Pare ello además de todo lo dicho anteriormente hay que mandar un comando más al ELM327 para que muestre el encabezado del mensaje: ATH1. Hay otro comando que muestra un byte del mensaje que describe la longitud de los datos (DLC): ATD1, pero es más para comprobar y preparar el buffer de recepción.
Los mensajes los he capturado con el coche parado y sin el motor en marcha, solo activé los elevalunas y las luces un momento para ver si había cambios. En el momento no vi nada por la velocidad a la que se muestran por el terminal, pero luego analizando el log si que hay mensajes que cambian. El resumen de mensajes sería este:

ID Receptor  Emisor B0 B1 B2 B3 B4 B5 B6 B7
23  23 40






201 2  1 0 0 40 0 0 0 0 0
265 2  65 0 0





285 2  85 60 0 0




295 2  95 0 0 0 0 0 0 0
2A0 2  A0 C0 AA 52 80



400 4  0 0 1A FF FE 0 65 1 C4
401 4  1 0






420 4  20 6C 0 0 0 42 0 0 0
460 4  60 3 C0 0 0 0 0 0 0
4F3 4  F3 32 31 31 34 35 38 37 39
4F4 4  F4 42 4B 31 34 46 32 35 31
4FA 4  FA 1C DE 90




501 5  1 11 2 0




511 5  11 1 2 0





De cada uno hay varios cada segundo, con cadencias diferentes. Si me fuera necesario más adelante analizaría la cadencia de los mensajes para preparar su recepción. Otro detalle es que a diferencia de Madox no veo ciertos mensajes, quizás cuando esté en marcha o quizás son mensajes puntuales que solo se muestran una vez cuando son necesarios. Haré pruebas de campo con el coche en marcha, logeando los datos y luego importándolos a una base de datos para tratarlos más fácilmente. Hasta ahora he usado excel y la identificación de emisor y receptor está hecha a mano. Con estos datos he creado un mapa de mensajes o "centralitas" ya que una misma centralita puede enviar varios mensajes con diferente identificador, pero ya podemos ver dos grandes receptores de mensajes, la centralita 2 y la 4:
Mapa de mensajes CAN
Por ahora solo están las direcciones de los envíos, espero ir completando el mapa con el significado de esos mensajes según vaya descubriendo que hay dentro de ellos.

viernes, 14 de enero de 2011

Soporte magnético para móvil.

Hasta que no tenga montado el carputer necesito un GPS para salir de excursión, y mi HTC Hero cumple muy bien, con google maps o con Copilot. El problema era el soporte para el móvil, hasta que encontré estos: http://www.tetrax.it/es pero son un poco caros, así que mejor me lo fabrico yó. No voy a explicar mucho porque las imágenes hablan por si solas de lo simple que es, solo la lista de materiales:
  • Imanes de neodimio planos, yo los saqué de un disco duro estropeado.
  • Hojas de cutter finas.
  • Cinta de doble cara fina o blue-tack
  • Cinta de doble cara gruesa
He creado unas instrucciones en Instructables: http://www.instructables.com/id/Magnetic-phone-holder-for-car/







domingo, 2 de enero de 2011

Comenzando con el ELM327

Para poder descifrar los mensajes del bus de confort necesito acceder a él con el cable OBD. En el conector OBD del coche están presentes los dos buses, el de motor (HS, High Speed 500kbps) y el de confort (MS, Medium Speed 125kbps), pero el cable OBD solo está conectado al de motor. Madox también especifica este bus de Medium Speed en uno de sus comentarios.
Conector OBD, vista trasera.

Para poder conmutar entre los dos buses, y no perder la conexión con el bus HS por si hace falta algún día para leer errores de la centralita de motor (ECU), he instalado un conmutador de 2 polos en el propio conector, respetando la polaridad H-L del interface CAN para los dos buses.
Conector OBD con conmutador de selección de buses CAN.
Con el cable listo he comenzado a evaluar diferentes softwares de diagnosis de coche en sus versiones para ELM (ScanMaster, ScanXL, OBDSpy, ScanTool, Digimoto,wOBD, EasyOBD, EEC Analyzer, etc...), ninguno de ellos me sirve para poder filtrar mensajes CAN, ya que se basan en el protocolo OBD para poder leer mensajes de la ECU pero para poder ver si funciona el hardware sirven.
Para poder comunicarnos con el ELM327 lo haremos a través de un terminal serie, en mi caso he usado TeraTerm pero se puede usar hyperterminal de windows o PuTTY o cualquier otro. Hay que tener a mano el manual del ELM327 para saber que comandos ATM usar. La velocidad por defecto es de 38400, aunque hay un pin del ELM que permite configurarla por hardware a 9600bps. Otro de los pines del ELM es el que introduce un LF (Line Feed) al final de la linea, pero en mi caso no esta activado por lo que para comunicarse correctamente el primer comando será un ATL1 para activar el line feed.
Primeros comandos del ELM
Otro comando para ver todos los mensajes es el ATMA (Monitor All), que nos muestra una serie de tramas hasta que el buffer de recepción se llena y da mensaje de error. Para saber el protocolo actual usaremos ATDP (Describe Protocol) y nos confirma que es un bus CAN con identificadores de 11bits y 500kbps de velocidad. Al conmutar al bus de confort y realizar un ATPC (Protocol Close) y un ATMA para reiniciar el sistema de escaneo de protocolos obtenemos esto:
Cambio al bus de confort.

Los errores de recepción me parecen extraños, por lo que al comprobar el protocolo elegido con ATDP veo que es el número 8: CAN 11bit ID- 250 kbaud. Consultando el manual veo que hay un par de protocolos ajustables, el B y que ya viene por defecto con el formato que me interesa: 11bit ID, 125 kbaud. Fijo este protocolo mediante  ATSPB (Set Protocol B) y con un ATDP y un ATMA compruebo que funciona correctamente:

Fijar velocidad correcta para el bus (11bit ID, 125 kbps).
Ahora ya puedo leer correctamente mensajes CAN del bus de confort, para ello utilizaré los comandos ATMA (Monitor All), ATMR (Monitor Receiver) y ATMT (Monitor Transmitter).

Mensajes enviados hacia la centralita 2 (ATMR02).
 Aún tengo que acabar de leerme el manual del ELM para poder configurarlo correctamente y ver los encabezados de los mensajes, lo que me permitirá saber los números de las centralitas que hay en el bus (emisoras y receptoras). Por ahora he podido observar que la centralita 02 recibe datos del clima (si está encendido, velocidad de ventilador, temperatura, etc..), así que es un buen comienzo!!. Espero ir descifrando mensajes poco a poco, si veo que hay muchos mensajes quizás opte por un script en linux o algún software en C que me permita ir viendo los cambios bit a bit conforme vaya actuando sobre los controles del coche, al igual que hizo Madox con PHP y Javascript. Primero me miraré mas a fondo la configuración del ELM e iré buscando el micro que usar (NEC, Microchip?). En el trabajo ahora estamos usando un embedded EXM32-IXM35 que tiene interfaz CAN, pero me parece demasiado pasado de especificaciones para lo que quiero, o no? ;).