Está en la página 1de 9

Hacking Mazda: Comenzando con el ELM327 http://hackingmazda.blogspot.com/2011/01/comenzando-con-el-elm327.

html

Ms Siguiente blog Crear un blog Acceder

Interpretacin y gestin del bus CAN de Mazda y los proyectos hardware


y software asociados.

1 de 9 02/10/2017 01:18 p.m.


Hacking Mazda: Comenzando con el ELM327 http://hackingmazda.blogspot.com/2011/01/comenzando-con-el-elm327.html

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 travs 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 recepcin 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 recepcin me parecen extraos, por lo que al comprobar el protocolo


elegido con ATDP veo que es el nmero 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:

2 de 9 02/10/2017 01:18 p.m.


Hacking Mazda: Comenzando con el ELM327 http://hackingmazda.blogspot.com/2011/01/comenzando-con-el-elm327.html

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).

An 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
nmeros 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 quizs opte por un script en linux
o algn 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 configuracin 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? ;).

Publicado por Abel en 21:49

17 comentarios:

mr.xkr 4 de abril de 2012, 0:01


hola, soy mr.xkr, de solocarputer.

Hace tiempo que sigo tus pasos para empezar a trabajar con mi Honda Accord.

Esta tarde me he conectado al ELM327 y he lanzado algunos comandos AT, todos


del bus de motor, que es lo que por defecto viene en todos, supongo.

3 de 9 02/10/2017 01:18 p.m.


Hacking Mazda: Comenzando con el ELM327 http://hackingmazda.blogspot.com/2011/01/comenzando-con-el-elm327.html

Aparte de que he visto que solo unos pocos PIDs estn soportados en OBD modo
01, ahora ya me empiezo a aventurar a cambiar al modo confort.

Cuando hago ATDP, 0100 y de nuevo ATDP, me marca AUTO, ISO 15765-4 (CAN
29/500), asi que veo que uso CAN extendido 500kbps, el de motor.

Mi pregunta viene ahora en cmo mantener el modo monitor, (ATMA, ATMR y


ATMT), puesto que apenas salen 20 lineas y el buffer se llena. Supongo que
relanzando hasta llenar el buffer de nuevo.

Otra pregunta, lanzando 0100 recibo:


41 00 98 3B 00 11

Del primer byte no se el significado, pero si he visto que coincide con el modo
41=1, 49=9 y algunos comandos no lo envan, p.e. 0904:
023
0: 49 XX XX XX XX XX
1: 30 XX XX XX XX XX XX
... (hasta 5:)

A ver si me lo puedes aclarar.

La verdad es que el protocolo CAN es bastante ms rpido que el ELM327, el


UART, e incluso las CPUs de Arduino y algunos PIC.

Voy a ver si encuentro el pinout del conector OBD de mi coche, y hago un selector
para motor/confort, al menos para hacer las pruebas.

Un saludo, y gracias por publicar tan valiosa informacin, a muchos nos ha sido de
mucha ayuda.
Responder

Abel 4 de abril de 2012, 10:43


Hola, el problema de BUFFER FULL creo que es debido a las diferentes
velocidades de comunicacin. Es decir, el ELM327 no es capaz de enviar
suficientes tramas hacia el terminal ya que su velocidad de comunicacin serie/USB
no es lo suficientemente rpda. Una solucin es solo escanear ciertos comandos
con ATMR y ATMT (mensajes hacia una centralita determinada o provenientes de
una centralita). Tambin hay otros filtros como ATCF y ATCM, consulta el pdf del
ELM327 y prueba a filtar solo un mensaje especfico.
Otra posibilidad es que tengas el baudrate del rs232 a 9600, el pin 6 del ELM327
fija la velocidad entre 38400 (pin 6 a 1 durante reset) o 9600 (pin 6 a 0 durante
reset). Tambin con el comando PP 0C puedes subir la velocidad del RS232 hasta
500 kbps (mira la pag 56 del manual del ELM327), pero hay que ir con cuidado al
subir esta velocidad, ya que el bus rs232 luego va a para a un conversor serie-USB
o bluetooth incluso (depende del lector que tengas) y este tiene un lmite en las
comunicaciones rs232.
Sobre el mensaje 0100 ese es un cdigo OBD y funciona diferente de los mensajes
CAN entra centralitas, aunque comparte el mismo bus fsico (CAN). No me he
metido mucho en los mensajes OBD puesto que mi objetivo era descifrar los
mensajes de la centralita de A/C. Los mensajes OBD son estandar entre marcas, a
diferencia de los CAN entre centralitas y funcionan de otra manera. Los CAN entre
centralitas se van enviando continuamente y los OBD son del tipo pregunta-
respuesta y estn enfocados a la diagnosis del motor (On Board Diagnosis).
Adems los OBD van dirigidos a la centralita de motor, por lo que es posible que
desde el bus de confort no se puedan realizar, depende del cuadro de mandos que
actua de Gateway entre las dos redes y deja pasar ciertos mensajes de una a
otra.
Para mas detalles sobre los mensajes OBD te paso algunos links de cuando estuve
investigando:

4 de 9 02/10/2017 01:18 p.m.


Hacking Mazda: Comenzando con el ELM327 http://hackingmazda.blogspot.com/2011/01/comenzando-con-el-elm327.html

http://www.obd-codes.com
http://www.obddiag.net/adapter.html
https://www.scantool.net/support/index.php?_m=knowledgebase&_a=view&
parentcategoryid=1&pcid=0&nav=0
http://www.automecanico.com/auto2001/OBDcod.html
http://www.gaw.ru/data/Interface/CAN_BUS.PDF
http://www.obd2cables.com/products/
Responder

mr.xkr 7 de abril de 2012, 17:48


Muchas gracias por responder, estuve con el datasheet del ELM327 pero no es
pequeo, y esa informacin de cambio de velocidad es muy interesante.

Sobre lo del filtrado de mensajes, es lo mismo que he estado leyendo, el coche


enva demasiadas tramas, y llena el buffer.

Tengo ahora mismo un ELM327 bluetooth, que por comodidad est genial, pero ya
he pedido uno USB (puesto que realmente son RS232 con una FTDI) por 9$, ese lo
destripar y de ah sacar la interfaz RS232-CAN-BUS via ELM327 para las dos
cosas que necesito (programar CAN-BUS en Arduino me da ms palo).

Gracias tambin por los enlaces, si consigo algo decente lo publicar :)

Saludos!
Responder

Abel 7 de abril de 2012, 18:26


Hola Xkr, sobre el ELM327 es un PIC con un perifrico interno de gestin del bus
CAN y un driver de acceso al bus fsico. Este perifrico interno tambin existe
como chip externo: MCP2515.
La ventaja del ELM327 es que tienes todo el software de acceso a bus ya escrito
dentro del PIC, pero an no he comprobado que pueda escribir fcilmente al bus
simulando mensajes para cerrar puertas, subir cristales, etc.. (no supongo que
haya ningn problema)
Mi idea es en vez de usar el ELM327 es usar un PIC 18f2480 con este perifrico
interno y otro chip a modo de driver de acceso al bus: MCP2551.
Ya tengo esquema y PCB diseado en SMD, pero ped presupuesto en mi
empresa para 3 prototipos y me sala por un pico as que estoy pendiente de
rehacer el PCB para poder insolar la placa en casa. Iba a subir una entrada al blog
cuando redisease el PCB pero ahora mismo me estoy peleando con el Centrafuse
y lo he dejado algo de lado. SI te puedo echar una mano cuando te llegue el ELM
dmelo.
Responder

mr.xkr 8 de abril de 2012, 2:03


Gracias Abel, es justo lo que conozco.

Tengo precisamente dos placas de pruebas con PICs 18F + MCP2551 con el
ejemplo de CCS CAN-BUS en mis manos, un amigo que las tena me las ha
prestado.

Lo ideal es usar PIC, pero yo se que si me pongo a programar en el PIC, al final lo


dejo plantado, como sucedi con el CarPC interface. Cuando consegu hacer
funcionar el USB nativo del PIC, ah lo dej, parado por qu? Por perrera de no
continuar con l, sabiendo que es laborioso el trabajo. Sin embargo con Arduino,
programar se me hace ms ligero, aunque no tenga (ni de lejos), la potencia de

5 de 9 02/10/2017 01:18 p.m.


Hacking Mazda: Comenzando con el ELM327 http://hackingmazda.blogspot.com/2011/01/comenzando-con-el-elm327.html

PIC.

Seguramente al final acabe eligiendo el mismo esquema, puesto que -como


siempre- Arduino se quedar quedando corto.

A ver si sacan alguna versin de Arduino con CPU ms potente (ms RAM,
CAN-BUS nativo, USB nativo, y un segundo UART o definibles, ya de paso, como
trae el ATmega1280), porque sera lo que le falta a Arduino: potencia - puesto que
facilidad de uso ya solo hay que ver cuanto ha crecido en tan poco tiempo.

Bueno, por pedir que no sea ;)

Saludos, y espero que soluciones pronto la configuracin de CF y continues!


Responder

mr.xkr 10 de abril de 2012, 1:55


Bueno, no se si son buenas o malas noticias xD

La buena es que tengo el esquema de conectores del Honda Accord


2008,2009,2010,2011,2012 (keywords para el buscador xD), est en el Manual de
Taller especfico. Aqu lo dejo:

http://xkr.es/accord/conectorOBDIIaccord.gif

Lo malo es que no parece usar CAN para el bus de confort, si no K line of ISO
9141-2 and ISO 14230-4 (lo digo porque aparece UNIDAD DE SONIDO en la
descripcin).

Esto segun el conector OBD principal. Segun el esquema del conector de la radio:

http://xkr.es/accord/conectorRadioPart1accord.gif

Aparte de la K-LINE, si te fijas, abajo derecha estn el B-;CAN-H y B-;CAN-L que


parecen ser DIFERENTES a los del motor, asi que es posible que haya CAN-H y
CAN-L para confort, accesibles solo desde dichos conectores.

Esto por probar la linea K-LINE, pero me da cague porque ah entra todo: Airbags,
Inmovilizador, etc.; aunque me da pereza abrir toda la radio para sacar estos
cables xD

Pruebo con AT TP/SP 3 4 y 5 o intento probar el CAN de la radio directamente?

Saludos!
Responder

Abel 10 de abril de 2012, 12:42


Es posible que el K-Line solo est para diagnosis y no aparezcan mensajes de
otras centralitas.
Prueba con el CAN, seguramente el que va a la radio sea el de confort.
Responder

mr.xkr 20 de mayo de 2012, 14:31


Buenas nuevas Abel, he conseguido conectarme al B-CAN y monitorizar el trfico
satisfactoriamente, con el mismo protocolo que el Mazda (ATSPB), y he
conseguido sacar algunos de los mensajes (velocidad, ...).

Ahora lo que buscara sera inyectar mensajes para provocar acciones, p.e.

6 de 9 02/10/2017 01:18 p.m.


Hacking Mazda: Comenzando con el ELM327 http://hackingmazda.blogspot.com/2011/01/comenzando-con-el-elm327.html

apertura/cierre de puertas, cmo podra hacerlo con el ELM327? he visto lo de


Set Headers, etc., pero todava soy ducho en el tema.

Lo que si he conseguido son algunos mensajes de acciones especiales, gracias a


un amigo que lo ha conseguido hacer antes y trabaja para una empresa en Korea,
pero obviamente l no trabaja con el ELM327.

A ver si esta tarde avanzo un poco y pruebo alguna cosa ms mientras me dure la
batera del porttil.

Saludos y gracias por tu ayuda!


Responder

mr.xkr 20 de mayo de 2012, 17:18


Ah, se me pas preguntarte por las cabeceras, activando ATH1 y ATD1 algunos de
los que recibo son lo siguientes:

0E F8 20 13 1 00
12 F8 A2 30 1 00
12 F8 50 50 5 00 00 00 80 00
12 F8 53 51 8 00 00 00 00 00 00 65 80
12 F8 32 30 1 08
0E F8 73 74 2 00 FF
12 F8 50 50 5 00 00 00 80 00
0A F8 72 74 1 00
0E F8 14 96 1 00
12 F8 31 30 1 08
16 10 FF 96 0 RTR
12 F8 44 30 1 00
12 F8 51 50 5 00 03 40 00 00

Pero ahora estoy "descifrando" puesto que tu en otro post indicabas "ID Receptor
Emisor B0...".

Adems me parece que no todos los mdulos envan informacin, p.e. si toco las
teclas del volante no se envan mensajes nuevos.
Responder

Abel 21 de mayo de 2012, 9:48


Hola, en teora al activar las cabeceras ves la identificacin del mensaje:
normalmente consta de la direccin del emisor y la del receptor pero si una misma
centralita enva varios mensajes diferentes, la direccin del receptor cambiar.
Los mandos del volante van conectados directamente a la radio, simplemente son
dos cables en los que se mide una resistencia en funcin de los botones pulsados.
Responder

2k 21 de julio de 2012, 21:08


Esto es una platica avanzada...
Solo quiero conectar mi tcode pro (programador de llaves) al puerto OBDII pero
solo veo 2 conectores azules sueltos...
Responder

Abel 22 de julio de 2012, 20:50


Hola, puedes decir que coche es?

7 de 9 02/10/2017 01:18 p.m.


Hacking Mazda: Comenzando con el ELM327 http://hackingmazda.blogspot.com/2011/01/comenzando-con-el-elm327.html

Responder

Respuestas

2k 27 de julio de 2012, 20:41


Un Accord 2002, legalizado, osea de origen Norteamericano...

Responder

Reaccion Psicotica 28 de octubre de 2012, 6:42


BUenas noches compre un dispositivo elm327 bluetooth para conectarlo a mimazda
3 del ao 2007. funciono dos dias y luego no volvio a conectar a la ecu. da error
104 odb2 protocol. Podrias ayudarme con esto para ver si es posible que vuelva a
conectarse??

Gracias de antemano.

Responder

Abel 28 de octubre de 2012, 20:39


Lo siento, sobre cdigos OBD no s nada ya que no los he usado para nada. Ni en
el manual del ELM327 sale nada del error 104.
Responder

Carlos Verdes 13 de mayo de 2013, 20:38


Buenas: la verdad que llevamos tiempo intentando sacar datos del coche por obd,
nos hemos comprado un dispositivo por bluetooth y lo primero que vimos con 0100
es que... mi coche da los datos que necesitamos (estamos intentando ver el nivel
de combustible).

As que hemos empezado con el bus CAN pero... lo primero que he visto en este
foro me deja de piedra... como puedo saber si mi conector OBD de mi coche est
conectado o no al bus de comfort? Mi coche es un Honda Civic.
Responder

Abel 14 de mayo de 2013, 12:04


Hola Carlos, no se si necesitars usar el bus de comfort para conseguir el nivel de
combustible. Hay que buscar el mensaje OBD asociado (si existe, lo desconozco).
Si no ir analizando las tramas CAN del bus de motor, si es el mismo que hay en el
conector OBD,porque incluso es posible que en el conector OBD vaya un bus CAN
desde la centralita especfico y no aparezcan los mensajes entre centralitas. Haz
pruebas a leer mensajes CAN y a enviar peticiones OBD.
Responder

8 de 9 02/10/2017 01:18 p.m.


Hacking Mazda: Comenzando con el ELM327 http://hackingmazda.blogspot.com/2011/01/comenzando-con-el-elm327.html

Comentar como:

Publicar

Entrada ms reciente Pgina principal Entrada antigua

Suscribirse a: Enviar comentarios (Atom)

Tema Fantstico, S.A.. Con la tecnologa de Blogger.

9 de 9 02/10/2017 01:18 p.m.

También podría gustarte