Las ECUs y su conexión al bus CAN

Localizamos las ECUs del toyobaru

Si uno accede al manual de reparación del toyobaru, en la parte de red de comunicaciones se muestra el esquema general del bus CAN.

Vista general del bus CAN del GT86/BRZ

Donde se observan distintos elementos conectados al mismo y en particular, distintas ECUs.

Si seguimos avanzando en la lectura, el manual llega a determinar que ECUs y sensores se comunican a través del bus CAN. En particular, un sensor y hasta 9 ECUs. 

ECUs y sensores conectados al bus CAN del GT86/BRZ

Como la TCM únicamente se conecta al bus para el cambio automático (esto explica los 6 nuevos mensajes CAN que encontré al analizar el tráfico en el bus del coche de Santi), en mi coche con transmisión manual debería haber 8 ECUs.

La norma OBD2 obliga a que la ECU principal responda bajo el CAN ID 0x7E0 y sugiere (pero no obliga) que la ECU de la transmisión (TCM) responda bajo el 0x7E1, y que las sucesivas ECUs usen los siguientes identificadores (0x7E2, …).

Y efectivamente en el toyobaru, si tu solicitas los servicios OBD2 a la ECU con el CAN ID 0x7E0, recibes las respuestas conforme a la norma, como ya hemos visto en este blog.

Así que me apresuré a solicitar servicios a los siguientes CAN IDs con la esperanza de localizar las distintas ECUs del vehículo.

Obviamente, el CAN ID 0x7E1 no contestó, pues debería estar reservado para la TCM y en mi coche no aplica. Pero tampoco respondieron los CAN IDs sucesivos.

Me planteé entonces la posibilidad de rastrear todos los CAN IDs desde el 0x700 hasta el 0x7E0, para lo cual preparé una serie de comandos para lanzar desde mi portátil, conectado al coche, solicitando el servicio 0x01 (“Request Diagnostic Data” del estándar OBD2) y el servicio 0x21 (“Read Data By Local Id” que la norma ISO 14.229 UDS -Unified diagnostic services- deja abierta a los fabricantes), con la esperanza de que ‘alguien’ respondiera algo.

Estos son los resultados:

0x701

'Algo' atendió la solicitud de servicio 0x01 al CAN ID 0x701

>> 701: 02 01 00 00 00 00 00 00
<< 700: AC 02 50 50 00 00 00 00

Pero la respuesta no la acabo de entender. Primero no responde el CAN ID 0x709 (que es el que en principio debería responder una petición al CAN ID 0x701) y a los datos recibidos aun no les he encontrado sentido.

La solicitud del servicio 0x21 para ese CAN ID

>> 701: 02 21 00 00 00 00 00 00
timeout

finalizó sin respuesta pero, aun así, el CAN ID 0x701 es primer candidato a ser la dirección de una de las ECUs.

0x720

La solicitud del servicio 0x01 al CAN ID 0x720 me deparó una nueva sorpresa, y es que recibí la respuesta desde el CAN ID 0x7E8.

>> 720: 02 01 00 00 00 00 00 00
<< 7E8: 06 41 00 BE 3F A8 13 00

Y recibí la misma respuesta que si se la hubiera solicitado al 0x7E0 (o al 0x7DF -petición broadcast-) que corresponde por norma a la ECU principal, lo que me hace sospechar que detrás de este CAN ID se encuentra la ECU principal.

La solicitud del servicio 0x21 no obtuvo respuesta

>> 720: 02 21 00 00 00 00 00 00
timeout

lo cual me sorprendió, pues esperaba que la ECU principal soportara este servicio. Pero se ve que no …

0x730

La solicitud del servicio 0x01 al CAN ID 0x730 también obtuvo respuesta

>> 730: 02 01 00 00 00 00 00 00
<< 738: 03 7F 01 11 00 00 00 00

Y esta vez del CAN ID esperado, el 0x738. La sorpresa vino después al descodificar la respuesta:

  • 0x03 -> 3 bytes
  • 0x7F -> Respuesta negativa
  • 0x01 -> para el servicio 0x01
  • 0x11 -> Servicio no soportado

Ahí sí que había claramente una ECU, que además decía cumpliendo perfectamente la norma que no soportaba ese servicio.

Probé con el servicio 0x21 y si obtuve una respuesta positiva

>> 730: 02 21 00 00 00 00 00 00
<< 738: 06 61 00 3D 50 00 03 00

Había encontrado una tercera ECU.

0x780

Algo parecido pasó al interrogar al CAN ID 0x780

>> 780: 02 01 00 00 00 00 00 00
<< 788: 03 7F 01 10 00 00 00 00

Con la salvedad de que en vez de devolver el valor 0x11 (Servicio no soportado) devolvía el valor 0x10: Rechazo general.

No parecía una ECU muy propensa a colaborar, pero estaba claro que ahí había otra ECU. 

De nuevo, la solicitud ante el servicio 0x21 fue acogida con mayor agrado.

>> 780: 02 21 00 00 00 00 00 00
<< 788: 06 61 00 AC 80 00 01 00

Ya teníamos identificada la cuarta ECU.

0x7A1

El CAN ID 0x7A1 se convirtió en la quinta ECU, con un comportamiento muy similar al de las últimas ECUs, declarando el servicio 0x01 como no soportado

>> 7A1: 02 01 00 00 00 00 00 00
<< 7A9: 03 7F 01 11 00 00 00 00

Y respondiendo más positivamente ante el requerimiento del servicio 0x21

>> 7A1: 02 21 00 00 00 00 00 00
<< 7A9: 06 61 00 27 F4 0F F1 00

0x7B0

Exactamente el mismo comportamiento para el CAN ID 0x7B0, que se convierte en la sexta ECU identificada. No soporta el servicio 0x01.

>> 7B0: 02 01 00 00 00 00 00 00
<< 7B8: 03 7F 01 11 00 00 00 00

Y responde afirmativamente ante el requerimiento del servicio 0x21.

>> 7B0: 02 21 00 00 00 00 00 00
<< 7B8: 06 61 00 3D 50 00 03 00

0x7C0

Y el CAN ID 0x7C0 se convierte en la séptima ECU identificada con otro comportamiento idéntico, tanto para el servicio 0x01

>> 7C0: 02 01 00 00 00 00 00 00
<< 7C8: 03 7F 01 11 00 00 00 00

Como para el 0x21.

>> 7C0: 02 21 00 00 00 00 00 00
<< 7C8: 06 61 00 00 00 60 01 00

0x7C4

Finalmente, el CAN ID 0x7C4 ha sido el octavo y último CAN ID que ha respondido a los requerimientos realizados, aunque vuelve a mostrar un comportamiento extraño, similar al recibido de 0x701, recibiendo la respuesta del CAN ID 0x700 para el servicio 0x01

>> 7C4: 02 01 00 00 00 00 00 00
<< 700: AC 02 50 50 00 00 00 00

Con unos datos que aun no he sido capaz de descifrar. Sin embargo, el servicio 0x21 lo recibe positivamente

>> 7C4: 02 21 00 00 00 00 00 00
<< 7CC: 06 61 00 20 00 00 01 00

y respondiendo desde el CAN ID 0x7CC, que es el esperado en este caso.

Una vez identificadas las direcciones (los CAN IDs) de las 8 ECUs conectadas al bus CAN, hay que tratar de averiguar cual es cual y que se puede obtener de cada una de ellas. 

No parece una tarea fácil, pues, salvo la ECU principal, que debe hacerlo por norma, parece que se niegan a hablar en los servicios normalizados de OBD2 (como el servicio 0x01) y muestran predilección por el servicio 0x21 del que cada fabricante puede hacer ‘de su capa, un sayo’ y del que es muy difícil encontrar documentación al respecto. 

Pero se intentará ...

Añadir un comentario

El código HTML se muestra como texto y las direcciones web se transforman automáticamente.

Page top