Blog Toyobaru - Etiqueta - BusCANUn blog en español para comentar la técnica y la actualidad de los gemelos toyobaru: el Toyota GT86 y el Subaru BRZ.2024-03-05T09:19:58+01:00mapurn:md5:1423a0c2acfa7dddfbf3394230ecd581DotclearEl toyobaru visto desde el bus CAN: alcanzamos el corte de inyección en punto muertourn:md5:7c84ee313190d80f10dfb4ab3df283f22022-01-17T15:16:00+01:002022-01-17T16:24:59+01:00mapBRZBusCANCorte inyecciónGT86Técnica<p>La siguiente maniobra que vamos a analizar es también muy sencilla. Con el vehículo parado, el freno de mano echado, la palanca de cambio en neutral (punto muerto) y con el motor al realentí y a suficiente temperatura (no hagáis esto en frío), se pisa el pedal del acelerador a fondo hasta alcanzar el corte de inyección, momento en el cual se libera el acelerador.</p> <p>La toma de datos que se va a analizar se realizó el 22 de noviembre de 2020, a las 10:45 h.</p>
<p>Observemos el proceso desde los datos que circulan por el bus CAN. Como en la anterior entrada del blog, dado que el vehículo no se mueve, nos centraremos en la información del motor que ofrecen los mensajes con CAN ID<strong> 0x14*</strong>.</p>
<p>Empecemos viendo el mensaje <strong>0x140</strong> donde visualizaremos los datos correspondientes a las revoluciones del motor (a partir de ahora rpm., con escala en el eje izquierdo), acelerador y válvula de mariposa (con escala en el eje derecho). Recordemos que la serie mensajes <strong>0x14*</strong> circulan por el bus CAN del vehículo cada centésima de segundo (0,01 s.)</p>
<p>Como se aprecia en la gráfica el tiempo de análisis es breve, tan solo 7 segundos.</p>
<p align="center"><img src="https://data.toyobaru.es/blog/gfx/CanBus/corte_neutral/0x140.webp" title="GT86 al corte en punto muerto, visto desde el CANBus: CAN ID 0x140: RPM, acelerador y mariposa" alt="GT86 al corte en punto muerto, visto desde el CANBus: CAN ID 0x140: RPM, acelerador y mariposa" /></p>
<p>Empieza la prueba con el motor al ralentí, con el motor a unas 700 rpm. que mantiene una válvula de mariposa abierta sobre un 3%, mientras que el acelerador está sin pisar. Cuatro décimas de segundo después se pisa el acelerador a fondo para iniciar la prueba y, con un ligero retraso, la válvula de la mariposa sigue a la consigna del acelerador, lo que provoca que con otro ligero retraso, el motor empiece a subir de vueltas, para en poco más de un segundo alcanzar el corte de inyección.</p>
<p>Al llegar a las 7.300 rpm. (aproximadamente) se corta la inyección y el motor cae ligeramente de vueltas hasta las 7.200 rpm., pero como la mariposa sigue abierta, se retoma la inyección y vuelve a subir de nuevo, repitiéndose el proceso 6 veces en poco más de medio segundo, hasta que se levanta el pie del acelerador, la válvula de la admisión se cierra hasta el entorno del 3% del inicio de la prueba y el motor va cayendo de vueltas lentamente.</p>
<p>Veamos de forma más detallada los puntos más interesantes de la prueba. Así, si nos fijamos en los momentos iniciales, tras pisar el pedal a fondo podemos obtener algunos datos interesantes.</p>
<p align="center"><img src="https://data.toyobaru.es/blog/gfx/CanBus/corte_neutral/0x140_detalle1.webp" title="GT86 al corte en punto muerto, visto desde el CANBus: Detalle CAN ID 0x140: RPM, acelerador y mariposa" alt="GT86 al corte en punto muerto, visto desde el CANBus: Detalle CAN ID 0x140: RPM, acelerador y mariposa" /></p>
<p>El pedal tarda una décima de segundo (0,1 s.) en pasar del 0% al 100%. La válvula de mariposa le sigue con un retraso de unas 3 centésimas de segundo (0,03 s.) hasta el 90% de apertura. Luego se hace algo más “remolona” y llega al 100% con un retraso de 11 centésimas de segundo (0,11 s.) sobre la consigna del acelerador. Más “perezosa” todavía es la respuesta del régimen de giro del motor, que no empezará a incrementar su giro hasta 17 centésimas de segundo después de empezar a pisar el acelerador.</p>
<p>Llama también la atención que el incremento inicial de vueltas del motor se produce a pequeños “trompicones” y no es todo lo lineal que cabría esperar.</p>
<p>Si analizamos ahora con más detalle la llegada al corte de inyección, y la vuelta del pedal del acelerador a su posición de reposo, tenemos:
</p>
<p align="center"><img src="https://data.toyobaru.es/blog/gfx/CanBus/corte_neutral/0x140_detalle2.webp" title="GT86 al corte en punto muerto, visto desde el CANBus: Detalle corte de inyección CAN ID 0x140: RPM, acelerador y mariposa" alt="GT86 al corte en punto muerto, visto desde el CANBus: Detalle corte de inyección CAN ID 0x140: RPM, acelerador y mariposa" /></p>
<p>No tengo identificada en el bus CAN la información de la inyección, ni sospecho que pueda estar, por lo que no puedo visualizar el momento justo donde se corta, pero a la vista de la evolución que siguen en el gráfico las revoluciones del motor, parece como si la inyección cortara -con la caja de cambios sin engranar ninguna marcha- al alcanzar las 7.300 rpm. para volver a trabajar al caer por debajo de las 7.200 rpm.</p>
<p>El proceso es bastante rápido, por que en medio segundo se produce hasta 6 veces.</p>
<p>A los dos segundos del inicio de la prueba se levanta el pie del acelerador que pasa al estado de reposo (0 %) en 6 centésimas de segundo (0,06 s.). La válvula de mariposa le sigue en su caída con un retraso de 4 centésimas de segundo (0,04 s.) hasta que alcanza el entorno del 25% de apertura, para luego alejarse lentamente de la consigna del acelerador y volver a caer al entorno del 3%, donde permanece con objeto de mantener en el futuro el régimen del ralentí.</p>
<p>Sobre el segundo 2,06, se produce el último corte de inyección, y en el segundo 2,12, cuando la inyección vuelve, se encuentra que la mariposa está ya estrangulando el aire y el régimen de vueltas del motor empieza a caer.</p>
<p>Reseñar, que tanto la llegada a los altos regímenes de vueltas (que como hemos visto había empezado a subir 'a trompicones') como la salida de este régimen, se produce de una forma muy lineal.</p>
<p>Si echamos ahora un vistazo a los datos que circulan en el mensaje con CAN ID <strong>0x141</strong> podremos ver el proceso desde la perspectiva de entrega de par motor. Para ello representamos las revoluciones del motor con escala en el eje izquierdo, el par motor con escala en Nm. en el eje derecho y la apertura de la mariposa (obtenida del mensaje <strong>0x140</strong>) con escala en porcentaje en el eje izquierdo.</p>
<p align="center"><img src="https://data.toyobaru.es/blog/gfx/CanBus/corte_neutral/0x141.webp" title="GT86 al corte en punto muerto, visto desde el CANBus: CAN ID 0x141: RPM, par motor y mariposa" alt="GT86 al corte en punto muerto, visto desde el CANBus: CAN ID 0x141: RPM, par motor y mariposa" /></p>
<p>Vemos que la entrega de par motor sigue con un cierto retraso la apertura de la mariposa hasta que se alcanza el corte de inyección. En ese momento, aunque la mariposa sigue abierta, el corte de inyección provoca una entrega intermitente de par motor. Finalizado el proceso, con el cierre de la mariposa el motor empieza a caer de vueltas absorbiendo par motor, hasta que en el segundo 6,5 vuelve a entrar en el régimen de ralentí.</p>
<p>Dado que la subida de revoluciones es bastante lineal entre los segundos 0,5 y 1,5, si representamos la relación entre el par motor y las revoluciones del motor en ese intervalo obtenemos una gráfica muy popular entre los propietarios del toyobaru. </p>
<p align="center"><img src="https://data.toyobaru.es/blog/gfx/CanBus/corte_neutral/rpmpar.webp" title="GT86 al corte en punto muerto, visto desde el CANBus: Relación par motor - rpm en punto muerto" alt="GT86 al corte en punto muerto, visto desde el CANBus: Relación par motor - rpm en punto muerto" /></p>
<p>En ella se aprecia que, en el motor de mi coche y en vacío, el famoso ‘<em>torque dip</em>’ del toyobaru se presenta entre las 4.000 y las 5.000 vueltas, y que -en vacío- el motor entrega un máximo de 174,6 Nm. a 6.356 rpm.
</p>
<p>Si volvemos a revisar ahora el detalle del inicio de la prueba, añadiendo ahora los datos del par motor obtenidos del mensaje <strong>0x141</strong> tenemos:</p>
<p align="center"><img src="https://data.toyobaru.es/blog/gfx/CanBus/corte_neutral/0x141_detalle1.webp" title="GT86 al corte en punto muerto, visto desde el CANBus: Detalle CAN ID 0x141: RPM, par motor, acelerador y mariposa" alt="GT86 al corte en punto muerto, visto desde el CANBus: Detalle CAN ID 0x141: RPM, par motor, acelerador y mariposa" /></p>
<p>Donde vemos que el par motor sigue con un cierto retraso la apertura de la mariposa y el incremento de revoluciones sigue con otro retraso a la entrega de par. Se ve también, que el ‘rizado’ que presenta el incremento de revoluciones se debe a que la entrega inicial de par no es lineal y presenta también ese rizado.</p>
<p>Si representamos ahora la potencia (con escala en kw. en el eje derecho) entregada por el motor, obtenemos la siguiente gráfica:
</p>
<p align="center"><img src="https://data.toyobaru.es/blog/gfx/CanBus/corte_neutral/0x141_pwr.webp" title="GT86 al corte en punto muerto, visto desde el CANBus: Detalle CAN ID 0x141: RPM y potencia" alt="GT86 al corte en punto muerto, visto desde el CANBus: Detalle CAN ID 0x141: RPM y potencia" /></p>
<p>donde se aprecia que el motor alcanza un pico de entrega de potencia de 125 kw. (170 CV) a 7.020 rpm. </p>
<p>Si analizamos el resto de información que circula en el mensaje con CAN ID <strong>0x141</strong> podemos avanzar en el entendimiento de ésta. Así, si representamos el contenido del byte D7 (con escala en el eje izquierdo) y lo comparamos con el par motor (con escala en Nm. en el eje izquierdo), tenemos:
</p>
<p align="center"><img src="https://data.toyobaru.es/blog/gfx/CanBus/corte_neutral/0x141D7.webp" title="GT86 al corte en punto muerto, visto desde el CANBus: CAN ID 0x141: Par motor y D7" alt="GT86 al corte en punto muerto, visto desde el CANBus: CAN ID 0x141: Par motor y D7" /></p>
<p>lo que invita a pensar que el byte D7 toma el valor 0 cuando el motor entrega par (el par es positivo) y toma el valor 8 (o por lo menos, su bit 3 se pone a 1) cuando el motor absorbe par (el par es negativo). </p>
<p>De hecho, si aprovechamos esa información y la comparamos con las revoluciones en el momento en el que se produce el corte de inyección:</p>
<p align="center"><img src="https://data.toyobaru.es/blog/gfx/CanBus/corte_neutral/0x141D7_detalle.webp" title="GT86 al corte en punto muerto, visto desde el CANBus: Detalle CAN ID 0x141: Par motor y D7" alt="GT86 al corte en punto muerto, visto desde el CANBus: Detalle CAN ID 0x141: Par motor y D7" /></p>
<p>parece que el corte de inyección está más cerca de las 7.200 rpm. que de las 7.300. </p>
<p>Si ahora representamos el byte D6 (con escala en el eje derecho) y lo comparamos con el par motor (con escala en Nm. en el eje izquierdo), tenemos:
</p>
<p align="center"><img src="https://data.toyobaru.es/blog/gfx/CanBus/corte_neutral/0x141D6.webp" title="GT86 al corte en punto muerto, visto desde el CANBus: CAN ID 0x141: Par motor y D6" alt="GT86 al corte en punto muerto, visto desde el CANBus: CAN ID 0x141: Par motor y D6" /></p>
<p>Este byte D6 parece contener de alguna forma el estado de funcionamiento del motor y requerirá más pruebas para entenderlo. Los distintos valores que adopta durante la prueba (7, 71, 135, 167, 199 y 231) se caracterizan por que vistos en binario son <strong>xxx00111</strong>.</p>
<p>Es decir, únicamente los 3 bits más significativos se han visto modificados por la prueba, mientras que los cinco últimos bits han permanecido inalterados.</p>
<p>Parece claro también, que durante el corte de inyección adopta el valor 7 (<strong>xxx=000</strong>) y que en el ralentí parece estar en 167 (<strong>xxx=101</strong>). En cualquier caso, se requerirán más pruebas para confirmar la información y completar el “rompecabezas”.</p>
<p>A parte de esta información, el mensaje con CAN ID <strong>0x141</strong> contiene, en sus dos primeros bytes una información que aún no he sido capaz de entender. Parece seguir la misma codificación que el par motor y presenta una gran similitud con éste, aunque también presenta alguna salvedad (p.e., presenta valores negativos durante el ralentí, que el par es positivo).
</p>
<p align="center"><img src="https://data.toyobaru.es/blog/gfx/CanBus/corte_neutral/0x141D1D0.webp" title="GT86 al corte en punto muerto, visto desde el CANBus: CAN ID 0x141: RPM y D1D0" alt="GT86 al corte en punto muerto, visto desde el CANBus: CAN ID 0x141: RPM y D1D0" /></p>
<p>El último mensaje con información relativa al motor que vamos a ver es el que tiene CAN ID<strong> 0x142</strong>. De sus ocho bytes, sólo sus 3 primeros bytes presentan información y los cinco últimos siempre los he visto con el valor 0.</p>
<p>Los dos primeros bytes de este mensaje también presentan una similitud importante, tanto con el par motor, como con la información contenida en los dos primeros bytes del mensaje <strong>0x141</strong>. Así, si lo comparamos con el par motor, tenemos:
</p>
<p align="center"><img src="https://data.toyobaru.es/blog/gfx/CanBus/corte_neutral/0x142D1D0.webp" title="GT86 al corte en punto muerto, visto desde el CANBus: CAN ID 0x142: Par motor y D1D0" alt="GT86 al corte en punto muerto, visto desde el CANBus: CAN ID 0x142: Par motor y D1D0" /></p>
<p>Se puede ver que presenta muchos puntos de coincidencia con el par motor menos durante el ralentí, que el par motor es positivo y el valor que adopta <strong>0x142</strong> D1D0 es negativo (al igual que hace 0x141 D1D0) y durante el corte de inyección, que mientras que el par motor cae puntualmente con el corte de inyección, <strong>0x142</strong> D1D0 no lo hace. Por lo demás coinciden en todo. </p>
<p>Si comparamos ahora los dos primeros bytes de los mensajes 0x141 y 0x142, tenemos:
</p>
<p align="center"><img src="https://data.toyobaru.es/blog/gfx/CanBus/corte_neutral/0x14x_D1D0.webp" title="GT86 al corte en punto muerto, visto desde el CANBus: CAN ID 0x14x: 0x141 D1D0 y 0x142 D1D0" alt="GT86 al corte en punto muerto, visto desde el CANBus: CAN ID 0x14x: 0x141 D1D0 y 0x142 D1D0" /></p>
<p>Curiosamente aquí las dos informaciones coinciden cuando presentan valores negativos, pero difieren, aunque con gran similitud en la forma, cuando adoptan valores positivos. Habrá que realizar más pruebas para avanzar en el entendimiento de estos valores.</p>
<p>Finalmente, el byte D2 del mensaje 0x142 presenta gran similitud con la apertura de la mariposa, pero adopta el valor 0 cuando el acelerador no está pisado y la mariposa permanece abierta.
</p>
<p align="center"><img src="https://data.toyobaru.es/blog/gfx/CanBus/corte_neutral/0x142D2.webp" title="GT86 al corte en punto muerto, visto desde el CANBus: CAN ID 0x142: mariposa y D2" alt="GT86 al corte en punto muerto, visto desde el CANBus: CAN ID 0x142: mariposa y D2" /></p>
<p>Para terminar, represento las temperaturas del aceite y del refrigerante contenidas en el mensaje con CAN ID <strong>0x360</strong>. No porque sean relevantes para la prueba, pues en una variación de 7 segundos poco pueden modificarse unas temperaturas, sino para mostrar que el motor estaba a una temperatura adecuada para realizar la prueba.</p>
<p align="center"><img src="https://data.toyobaru.es/blog/gfx/CanBus/corte_neutral/0x360.webp" title="GT86 al corte en punto muerto, visto desde el CANBus: CAN ID 0x360: temperatura del aceite y temperatura del refrigerante" alt="GT86 al corte en punto muerto, visto desde el CANBus: CAN ID 0x360: temperatura del aceite y temperatura del refrigerante" /></p>
<p>No llevéis nunca el motor al corte si el aceite no tiene la temperatura adecuada.</p>http://blog.toyobaru.es/index.php?post/2022/01/17/El-toyobaru-visto-desde-el-bus-CAN%3A-alcanzamos-el-corte-de-inyecci%C3%B3n-en-punto-muerto#comment-formhttp://blog.toyobaru.es/index.php?feed/atom/comments/146El toyobaru visto desde el bus CAN: el ralentíurn:md5:097b96fcc159c1181584736fd5f52b672022-01-14T18:34:00+01:002022-01-16T11:58:40+01:00mapBRZBusCANGT86RalentíTécnica<p>Recuerdo que cuando mi coche estaba en el concesionario expuesto y fui a verlo, le pedí al vendedor si podía abrir el capó para ver el motor. “<em>Claro</em>”, me dijo. “<em>Si quieres lo arrancamos</em>”. Se metió en el coche, abrió el capó y mientras yo lo levantaba, el vendedor arrancó el motor.</p>
<p>El motor empezó a funcionar al ralentí mientras yo miraba, por primera vez, la configuración del motor boxer, cómo estaba configurada la admisión, donde estaba ubicado el filtro, como la correa movía el alternador, … no me perdía un detalle.</p>
<p>Después de unos segundos, el motor empezó a bajar de revoluciones lentamente, hasta que de nuevo se estabilizó. “<em>Que lista es la ECU</em>”, pensé. Había oído hablar de la capacidad de las ECUs de ajustar el régimen de revoluciones al ralentí, pero hasta entonces nunca lo había visto funcionar.</p> <p>Hoy vamos a ver ese mismo proceso, pero desde un punto de vista distinto. Vamos a verlo como se ve a través de los datos que circulan por el bus CAN del coche.</p>
<p>El procedimiento es sencillo. Con el freno de mano bloqueando el coche, el cambio de marchas en punto muerto, pisamos el embrague, pulsamos el botón <strong>START STOP ENGINE</strong> y levantamos el pie del pedal del embrague, dejando que el coche funcione al ralentí.</p>
<p>La toma de datos que vamos a analizar se realizó el 21 de noviembre de 2019, a las 12:15 minutos.</p>
<p>Es una prueba sencilla. El coche no se mueve, no hay dinámica ninguna. Esto nos elimina del análisis los mensajes con CAN ID<strong> 0x018</strong> (dirección), <strong>0x0D0</strong> (dirección, velocidad de guiñada y aceleraciones), <strong>0x0D1</strong> (velocidad del vehículo y freno), <strong>0x0D2</strong> y <strong>0x0D3</strong> (ABS y control de tracción), <strong>0x0D4</strong> (velocidad de las ruedas). Hemos eliminado de un plumazo los seis mensajes más prioritarios del bus CAN del toyobaru. Y vamos a centrarnos en los mensajes relativos al motor (<strong>0x140</strong> y <strong>0x141</strong>).</p>
<p>Empezamos analizando la información contenida en el mensaje con CAN ID <strong>0x140</strong>, que como vimos en el blog, contiene información sobre las revoluciones del motor, el acelerador, el embrague y la mariposa.</p>
<p>En la gráfica se muestra el valor de las revoluciones del motor con escala en el eje izquierdo y el valor de la apertura de la válvula de la mariposa, en tanto por ciento, con escala en el eje derecho.</p>
<p>El embrague muestra 0 si no está pisado y se ha fijado el valor de 1.280 (únicamente a efectos de visualización en la escala de la gráfica) cuando está pisado. El acelerador no se representa pues no interviene en esta prueba y permanece al 0 % durante toda la prueba.</p>
<p align="center"><img src="https://data.toyobaru.es/blog/gfx/CanBus/ralenti/0x140.webp" title="Ralentí GT86 visto desde el CANBus: CAN ID 0x140: RPM, embrague y mariposa" alt="Ralentí GT86 visto desde el CANBus: CAN ID 0x140: RPM, embrague y mariposa" /></p>
<p>Inicialmente vemos que el embrague no está pisado, el motor está parado y la mariposa está abierta en torno a un 7,5%. O por lo menos eso se muestra en el bus CAN. No se cuan significativo puede ser ese valor con el motor parado, pero entiendo que es el último valor con el que se quedó grabado en la ECU y no es relevante, al no estar el motor en marcha.</p>
<p>Pasados unos 3 segundos, se pisa el pedal del embrague y el motor arranca, alcanzando un pico que alcanza las 1.900 revoluciones por minuto (en adelante rpm.). La válvula de la mariposa se abre hasta superar el 11% y al soltar el embrague, las revoluciones del motor caen por debajo de 1.400 rpm. La ECU empieza a abrir poco a poco la mariposa, que llega hasta el 12,5%, hasta regular el ralentí en el entorno de las 1.500 rpm., y unos diez segundos después baja la apertura de la mariposa al entorno del 12%, manteniéndose el régimen de giro.</p>
<p>Y así permanece hasta 40 segundos más, hasta que la ECU decide reducir la apertura de la mariposa hasta el 7%. Eso produce un pequeño pico de revoluciones (no se muy bien por qué) que rápidamente baja hasta las 1.400 rpm.</p>
<p>Durante los 10 segundos siguientes, la ECU va cerrando poco a poco la mariposa hasta un valor próximo al 5%, provocando una reducción del régimen de giro que baja hasta las 900 rpm.</p>
<p>Y así permanece durante 20 segundos, hasta que llegados al segundo 80, la ECU empieza oscilar la apertura de la mariposa entre el 5,1 y el 4,7%., para 10 segundos después, fijar el valor de la apertura en el 4,7%. Este proceso reduce el régimen de giro al entorno de las 850 revoluciones por minuto.</p>
<p>Como hemos visto recientemente, desde los datos que nos brida el mensaje con CAN ID <strong>0x141</strong> podemos obtener la vista de la potencia y el par entregados por el motor. Para ello representaremos las revoluciones del motor con escala en el eje izquierdo, el par motor en Nm. con escala en el eje derecho y la potencia (producto de los anteriores) en kilowatios, también con escala en el eje derecho.</p>
<p>En este sencillo caso, lo que podemos ver es mientras el motor gira a unas 1.500 rpm. está entregando unos 85 Nm., lo que supone que el motor entregue unos 13,2 kw., algo menos de 18 CV.</p>
<p align="center"><img src="https://data.toyobaru.es/blog/gfx/CanBus/ralenti/0x141.webp" title="Ralentí GT86 visto desde el CANBus: CAN ID 0x141: RPM, par motor y potencia" alt="Ralentí GT86 visto desde el CANBus: CAN ID 0x141: RPM, par motor y potencia" /></p>
<p>Cuando el motor cae al entorno de las 800 rpm, el par baja por debajo de los 20 Nm. y el motor requiere sobre 1,5 kw. (unos 2 CV) para mantener el ralentí.</p>
<p>Vemos también que antes de arrancar el motor, existe un valor de par motor (un poco menos de 70 Nm.) que entiendo que es lo que quedó registrado en la ECU de anteriores sesiones y es un valor no es relevante al estar el motor parado (al igual que pasaba con la apertura de la mariposa en el mensaje <strong>0x141</strong>).</p>
<p>Analizando el byte D6 de este mensaje (escala en el eje derecho), muestra un cambio en sus valores coincidente con el arranque del motor, pasando de 191 (0xBF) a 167 (0xA7).</p>
<p align="center"><img src="https://data.toyobaru.es/blog/gfx/CanBus/ralenti/0x141D6.webp" title="Ralentí GT86 visto desde el CANBus: CAN ID 0x141: RPM y D6" alt="Ralentí GT86 visto desde el CANBus: CAN ID 0x141: RPM y D6" /></p>
<p>No tengo aun clara la información que transporta este byte. Tal vez esté relacionada con el estado en el que se encuentra el motor, pero parece que hay dos bits que se ponen a cero en el arranque del motor, pues si vemos el cambio en binario, el valor ha pasado de 101<strong>11</strong>111 a 101<strong>00</strong>111. Habrá que confirmar en sucesivos análisis esta transición.</p>
<p>Finalmente, el último análisis que vamos a hacer en este caso de estudio va a ser una aproximación a través de la información contenida en el mensaje con CAN ID <strong>0x360</strong>. Sobre este mensaje no he creado aun una entrada en el blog, dado que no conozco toda la información que transporta, pero es bien conocido en los foros sobre el toyobaru, que la información que contiene en su byte D2 es la relativa a la temperatura al aceite del motor, mientras que la recogida en su byte D3 hace referencia a la temperatura del líquido refrigerante. Esta información circuló como la pólvora por todos los foros del toyobaru al poco de salir al mercado, ya que aquella versión no disponía de forma alguna de monitorizar la temperatura del aceite y monitorizar el byte D2 del mensaje <strong>0x360</strong> fue una de las primeras que se utilizó en aquel momento.</p>
<p>Cabe reseñar que la temperatura viaja codificada en formato OBDII, es decir, hay que restar 40 al valor contenido en el byte para obtener la temperatura en grados centígrados. Esta codificación supone abarcar un rango entre -40 y 215 ºC, más que suficiente para las medidas que nos ocupan.</p>
<p>Si visualizamos la evolución de estas temperaturas, con escala en ºC en el eje de la izquierda) y la mostramos de forma conjunta con las revoluciones del motor (con escala en el eje de la derecha), tenemos:</p>
<p align="center"><img src="https://data.toyobaru.es/blog/gfx/CanBus/ralenti/0x360.webp" title="Ralentí GT86 visto desde el CANBus: CAN ID 0x360: RPM, temperaturas del aceite y del refrigerante" alt="Ralentí GT86 visto desde el CANBus: CAN ID 0x360: RPM, temperaturas del aceite y del refrigerante" /></p>
<p>Donde podemos ver que el refrigerante, inicialmente en los 29ºC, empieza a ganar temperatura una vez transcurridos 13 segundos con el motor en funcionamiento, y a partir de entonces sigue creciendo con una velocidad aproximada de un grado cada 3 segundos.</p>
<p>Cuando la mariposa se cierra y caen las revoluciones del motor al entorno de las 850 rpm., la temperatura del refrigerante sigue aumentando, pero reduce notablemente su velocidad de crecimiento.</p>
<p>Mientras tanto, la temperatura del aceite crece mucho más despacio y apenas se incrementa en 3ºC a lo largo de la prueba.</p>
<p>Revisando estas temperaturas, supongo -y es algo que trataré de comprobar- que la ECU mantiene un régimen de ralentí elevado en los primeros momentos, no con la intención de elevar la temperatura del aceite o el refrigerante, sino con la intención de que sea el catalizador el que gane temperatura, pues éstos, son dispositivos que no empiezan a realizar su función hasta que superan los 250 ºC.</p>
Pero no he encontrado la forma de medir la temperatura del catalizador directamente de la información que circula por el bus CAN, por lo que deberé preparar una prueba para confirmar ese dato interrogando a la ECU para que me ofrezca esa temperatura. Cuando la realice, escribiré una ampliación de esta entrada en el blog para contar los resultados obtenidos.http://blog.toyobaru.es/index.php?post/2022/01/14/El-toyobaru-visto-desde-el-bus-CAN%3A-el-ralent%C3%AD#comment-formhttp://blog.toyobaru.es/index.php?feed/atom/comments/145Mensaje CAN BUS 0x141 y par motorurn:md5:22cac4698318aa697f31aab03dbc88292022-01-07T20:22:00+01:002022-01-07T20:52:14+01:00mapBRZBusCANECUGT86Técnica<p>Desde que empecé a analizar la información que circula por el bus CAN del toyobaru, siempre he sospechado que el mensaje con el CAN ID<strong> 0x141</strong> contenía la información del par motor, pero no podía confirmarlo y mucho menos, calibrarlo para convertirlo en una información útil. Ahora, con la información obtenida a partir de las ECUs del toyobaru, ya puedo confirmar que el valor del par motor está presente en ese mensaje, y lo que es mejor, he podido calibrarlo.</p> <p>Si tomamos los bytes D0 y D1 del mensaje <strong>0x141</strong> y conformamos un valor con ellos, poniendo como más significativo D1, y lo representamos gráficamente, y hacemos lo mismo con los bytes D2 y D3, poniendo D3 como más significativo, obtenemos dos gráficas que siempre resultan muy parecidas y que en un análisis comparativo enseguida vemos que parecen tener una relación evidente con el pedal del acelerador (byte D5 del mensaje <strong>0x140</strong>).</p>
<p>Cuando el acelerador está pisado, los dos valores siempre están por encima de 10.000 y cuando el acelerador no está pisado, el valor de D3D2 siempre está por debajo de 10.000 y D1D0, que suele seguir a D3D2, ocasionalmente presenta valores por encima de 10.000 pero normalmente está por debajo.</p>
<p>Esto me hizo sospechar que tenían su referencia en 10.000 y pasé a representar los valores D3D2 - 10.000 y D1D0 - 10.000 (con escala en eje izquierdo) y compararlos con el pedal del acelerador (en %, y con escala en eje derecho).</p>
<img src="https://data.toyobaru.es/gfx/blog/Par/141_acelerador.webp" />
<p>El comportamiento que se muestra, especialmente el seguido por D3D2, me hacía recordar a la gráfica que sigue el par motor. Hay entrega de par con el acelerador pisado, pero cuando levantas el pie, el motor actua cómo freno, absorbiendo par. Pero sólo era una sospecha, pues no tenía forma de comprobarlo.</p>
<p>Pero una vez encontrada la forma, gracias a monitorizar como lo hace TechStream, de poder interrogar a la <strong>ECU 0x7B0</strong> para que nos informe del par motor, como vimos en una entrada anterior del blog, sólo tenía que desarrollar el software para hacer lo mismo que TechStream.</p>
<p>Eso me tuvo entretenido unos días, pero una vez completado el programa, y realizadas las pruebas, básicas bajé con el portátil al coche para dar una vuelta y obtener los primeros datos. Y funcionó. Mi programa se hizo pasar por TechStream e interrogó a la ECU por el par motor mientras recababa los datos.</p>
<p>Al analizar los datos y representar el valor D3D2 - 10.000 del mensaje 0x141 y los valores que ofrecía la ECU obtuve esto:</p>
<img src="https://data.toyobaru.es/gfx/blog/Par/141_7B8_misma_escala.webp" />
<p>Tenía buena pinta, pero obviamente presentaban escalas distintas, así que asigné una nueva escala para el par motor del la ECU en el eje derecho</p>
<img src="https://data.toyobaru.es/gfx/blog/Par/141_7B8_dos_escalas.webp" />
<p>La pinta mejoraba por momentos. Había que ajustar los valores del eje derecho par tratar de alinear los gráficos:</p>
<img src="https://data.toyobaru.es/gfx/blog/Par/141_7B8_dos_escalas_alineadas.webp" />
<p>y encajaron como un guante.</p>
<p>Además la calibración es sencilla. La escala de la izquierda es 10 veces la de la derecha, por lo que si el par que nos entreaga la ECU está en Nm (según nos dice TechStream) significa que <strong>el valor (D3D2 - 10.000) / 10 del mensaje 0x141</strong> es el par motor en Nm.</p>
<p>Además, en el mensaje <strong>0x141</strong>, en los bytes D5D4 & 0x3FFF, podemos encontrar las revoluciones del motor (del mismo modo que en el mensaje <strong>0x140</strong>, en los bytes D3D2 & 0x3FFF), lo que nos permite obtener el valor de la potencia entrega por el motor sólo con la información contenida en el mensaje <strong>0x141</strong>.</p>
<p>Aunque aun me quedan por hacer algunas pruebas y comprobaciones, termina con ésto una larga búsqueda, que me permitirá analizar, con una nueva perpectiva, muchos de los ficheros de mensajes del bus CAN que tengo guardados de distintas pruebas.</p>
<p>Pero aun no he completado la información ofrece el bus CAN sobre el motor. Queda por concretar que representa la información contenida en los bytes D1D0 y D6 y D7 del mensaje <strong>0x141</strong> y en los mensajes <strong>0x142</strong> y <strong>0x144</strong>.</p>
<p>Y es que cerrada una puerta, se abre otra ...</p>http://blog.toyobaru.es/index.php?post/2022/01/07/Mensaje-CAN-BUS-0x141-y-par-motor#comment-formhttp://blog.toyobaru.es/index.php?feed/atom/comments/144Obteniendo el valor del par motor de las ECUs del Toyobaruurn:md5:1b0d1acd9fddc87156c5ec25a5f8f3db2021-11-29T12:15:00+01:002021-12-01T12:15:11+01:00mapABSBRZBusCANECUGT86OBDII<p>Desde que empecé a cacharrear con los datos que circulan por el bus CAN del coche, uno de los parámetros que busqué con especial interés fue el par motor. </p>
<p>Después de múltiples observaciones, tengo la certeza de que está -implícita o explícitamente- en los datos que transportan el CAN ID 0x141 o el 0x142. Pero nunca he tenido forma de corroborarlo y mucho menos de escalarlo. Sólo es una sospecha que espero poder aclarar algún día.</p>
<p>Pero cuando hace unos meses accedí a los datos del coche a través de <em>TechStream</em>, me encontré con una agradable sorpresa.</p> <p>Al solicitar la ‘lista de datos’ a la ECU 0x7B0 (responsable del ABS y del control de tracción) aparecía el dato ‘Real Engine Torque’ … y ya en Nm.</p>
<img src="https://data.toyobaru.es/gfx/blog/Par/0x780_vars.webp" alt="Valores ofrecidos por la ECU 0x780 (ABS/VSC/TRC)" title="Valores ofrecidos por la ECU 0x780 (ABS/VSC/TRC)" />
<p>Si podía capturar el tráfico que mandaba <em>TechStream </em>al coche,
podría ver como estaba obteniendo esos datos y obtener por fin un dato
contrastado del par motor.</p>
<p>Para ello, me hice con un conector OBDII que me permitía
obtener más de una salida del bus del coche</p>
<img src="https://data.toyobaru.es/gfx/blog/Par/duplicador_OBDII.webp" alt="Duplicador OBDII" title="Duplicador OBDII" />
<p>Y así poder conectar más de un equipo al coche de forma simultánea. Ahora mis pruebas se realizan, en muchas ocasiones, con un portátil con Windows ejecutando el <em>TechStream </em>y otro portátil (con Linux en este caso) capturando los datos que se transmiten por el bus. Luego, en casa, puedo analizar y reproducir los datos capturados tranquilamente.</p>
<p>Cuando empecé a perseguir al dato del par motor, esperaba encontrar un protocolo del tipo pregunta-respuesta. Es decir, el <em>TechStream </em>solicitando el dato y la ECU respondiendo (tal como hace Torque App para obtener un dato).</p>
<p>Así que, con todos los equipos instalados, seleccioné de la lista de datos que ofrece la ECU 0x7B0 únicamente el valor del par motor, y le pedí a <em>TechStream </em>que lo enviara.</p>
<img src="https://data.toyobaru.es/gfx/blog/Par/0x780_par.webp" alt="Par motor ofrecido por la ECU 0x780 (ABS/VSC/TRC)" title="Par motor ofrecido por la ECU 0x780 (ABS/VSC/TRC)" />
<p>Capturé los datos en el portátil con Linux, y al analizarlo me encontré con esto (represento con fondo gris las tramas que manda <em>TechStream </em>y con fondo blanco las que manda la ECU):</p>
<img src="https://data.toyobaru.es/gfx/blog/Par/Protocolo_Ax.webp" alt="Datos CAN capturados" title="Datos CAN capturados" />
<p>Analicemos lo que pasa. Para una mejor comprensión, he marcado en negro los bytes de protocolo; en rojo las longitudes, en azul los identificadores de servicio UDS, en verde los datos y en gris las tramas de relleno.</p>
<img src="https://data.toyobaru.es/gfx/blog/Par/Protocolo_Ax_1.webp" alt="Solicitud Servicio UDS 0x10 (DiagnosticSessionControl)" title="Solicitud Servicio UDS 0x10 (DiagnosticSessionControl)" />
<p>En la primera trama que envía <em>TechStream</em>, el primer byte especifica que solo va a mandar una trama con una longitud de datos de 2 bytes. </p>
<p>El siguiente dato (0x10) es el identificador del servicio UDS 0x10 DiagnosticSessionControl, acorde con la norma ISO 14.229. Dicho servicio, requiere un parámetro (0x5F) que identifica el tipo de la sesión de diagnóstico que se va a iniciar.</p>
<p>Según la norma, el rango de valores comprendidos entre 0x40 y 0x5F son sesiones específicas del fabricante, así que Denso (fabricante tanto de las ECUs del toyobaru como autor de <em>TechStream</em>) tendrá más datos sobre el tipo de sesión. La norma no dice nada al respecto y por tanto no podemos saber más. </p>
<p>El resto de valores de la trama son ceros de relleno.</p>
<p>En la segunda trama podemos ver como la ECU responde afirmativamente.</p>
<p>El primer byte de la trama que envía recoge la longitud de datos (2), el siguiente es una respuesta al servicio afirmativa (que coincide con la operación lógica AND del valor 0x40 con el identificador de servicio. En este caso: 0x10 & 0x40 = 0x50) a la que acompaña el valor 0x01, que como estamos ante una sesión propietaria no sabemos que significa.</p>
<p>El resto de valores de la trama son ceros de relleno.</p>
<p>En definitiva, <em>TechStream </em>solicita una sesión de diagnóstico de tipo 0x5F y la ECU le dice que OK.</p>
<p>El análisis de la siguiente secuencia de tramas me sorprendió:</p>
<img src="https://data.toyobaru.es/gfx/blog/Par/Protocolo_Ax_2.webp" alt="Solicitud Servicio UDS 0xA1 (específico del fabricante)" title="Solicitud Servicio UDS 0xA1 (específico del fabricante)" />
<p>Aquí <em>TechStream </em>le dice a la ECU que va a mandar más de una trama (0x10) pues la longitud que quiere enviar (0x09) no le cabe en una sola trama. A continuación, manda el identificador del servicio 0xA1 y empieza a mandar los datos 0x0605020B0C. </p>
<p>El identificador 0xA1 es irregular, pues está reservado por protocolo.</p>
<p>La ECU contesta (según norma ISO 15.765) con la trama de control de flujo (0x30) donde indica que no va a mandar ninguna más (0x00) para los 9 bytes que le han dicho que van a llegar y que espera recibirlas con una separación de 0x02 milisegundos (algo innecesario, pues no va a haber más tramas).</p>
<p>Y <em>TechStream </em>manda los datos que faltan (0xE10101) con una trama consecutiva (0x21). </p>
<p>Así que lo que manda <em>TechStream </em>es la solicitud del servicio 0xA1 con 8 bytes de datos 0x0605020B0CE10101. </p>
<p>Y de nuevo nos encontramos un servicio no recogido por las normas. Si tratamos de aplicar ISO 14.229, nos dice que este servicio está reservado por la norma y no se puede usar. Si aplicamos ISO 14.230, nos indica que ese servicio está definido por el fabricante. </p>
<p>Así que Denso parece estar aplicando esta última norma para definir este servicio. Pero por ser un servicio propio del fabricante no tenemos ayuda para tratar de entender que significan los datos 0x0605020B0CE10101. </p>
<p>A continuación, la ECU contesta:</p>
<img src="https://data.toyobaru.es/gfx/blog/Par/Protocolo_Ax_3.webp" alt="Respuesta Servicio UDS 0xA1 (específico del fabricante)" title="Respuesta Servicio UDS 0xA1 (específico del fabricante)" />
<p>La respuesta es idéntica a la solicitud, con la salvedad de que el identificador de servicio es ahora 0xE1 = 0x40 & 0xA1, es decir, la ECU acepta la solicitud y la confirma con un AND 0x40.</p>
<p>Lo siguiente que ocurre es:
</p>
<img src="https://data.toyobaru.es/gfx/blog/Par/Protocolo_Ax_4.webp" alt="Solicitud Servicio UDS 0xA2 (específico del fabricante)" title="Solicitud Servicio UDS 0xA2 (específico del fabricante)" />
<p>Es decir, <em>TechStream </em>manda 0x02 datos, el identificador de servicio 0xA2 y el parámetro 0x06. Y la ECU empieza a transmitir tramas con 0x05 bytes de datos, la respuesta afirmativa al servicio 0xA2 (0xE2 = 0x40 & 0xA2), el parámetro 0x06 que había enviado <em>TechStream </em>y que parece actuar como identificador (0x06) y 3 bytes de datos: 0x07E003. </p>
<p>La transmisión de tramas a partir de ese momento por parte de la ECU es automática, pero al llegar a la trama 79 (0x4F), <em>TechStream </em>‘refresca’ la solicitud:
</p>
<img src="https://data.toyobaru.es/gfx/blog/Par/Protocolo_Ax_5.webp" alt="Refresco de la solicitud del Servicio UDS 0xA2 (específico del fabricante)" title="Refresco de la solicitud del Servicio UDS 0xA2 (específico del fabricante)" />
<p>Y así sucesivamente. Cada 79 tramas enviadas por la ECU, <em>TechStream </em>refresca la petición. Sorprende la frecuencia con la que la ECU envía las tramas de respuesta: 25 veces por segundo. </p>
<p>Y si en estas condiciones se acciona el acelerador y se modifica el régimen del motor, los dos primeros bytes (tras el 0x06) cambian (si bien el segundo byte siempre termina con 0) y <em>TechStream</em> muestra el correspondiente valor del par motor. El valor 0x03 final permanece inalterable durante la prueba. </p>
<p>Cuando abandono la pantalla de <em>TechStream </em>ocurre lo siguiente:
</p>
<img src="https://data.toyobaru.es/gfx/blog/Par/Protocolo_Ax_6.webp" alt="Respuesta Servicio UDS 0xA3 (específico del fabricante)" title="Respuesta Servicio UDS 0xA3 (específico del fabricante)" />
<p>Es decir, <em>TechStream </em>manda 1 byte, el identificador de servicio 0xA3 y la ECU responde mandando otro byte, 0xE3, la respuesta positiva a la solicitud 0xA3. Y deja de enviar tramas. </p>
<p>En resumen, parece que TechStream usa tres servicios propietarios de Denso (0xA1, 0xA2 y 0xA3) para obtener el valor del par motor. </p>
<p>Con el servicio 0xA1 parece ‘programar’ la solicitud del valor deseado, con el servicio 0xA2 solicita el envío periódico de tramas con esos datos (en grupos de 79 y refrescando la solicitud al recibir ese número de tramas) y con el servicio 0xA3 finaliza la transmisión del envío periódico. </p>
<p>Perfecto. Ya tenía un método para obtener el par motor que tanto había buscado. Pero estaba un tanto desconcertado. No era lo que esperaba obtener y me obligaba a escribir un software adhoc para soportar esta nueva casuística. Además, con este método, tampoco podía usar Torque App ni ninguna otra aplicación basada en el método pregunta-respuesta. </p>
<p>La parte positiva es que parecía que la conversión parecía sencilla. Si 0x7E0 se correspondía con 63 Nm., parecía claro que bastaba con dividir por 32 (0x20) el valor transmitido en los dos primeros bytes de datos. </p>
<p>Para tratar de seguir avanzando en el entendimiento de estos servicios (0xA1, 0xA2 y 0xA3), amplié la solicitud de datos con las revoluciones del motor. Este es un dato que tengo identificado y que puedo obtener de varios modos, así que me sería relativamente sencillo identificarlo en los datos de las tramas que recibiera.
</p>
<img src="https://data.toyobaru.es/gfx/blog/Par/0x780_rpmpar.webp" alt="Par motor y RPM ofrecidos por la ECU 0x780 (ABS/VSC/TRC)" title="Par motor y RPM ofrecidos por la ECU 0x780 (ABS/VSC/TRC)" />
<p>Al solicitar los nuevos datos, la programación que hizo <em>TechStream </em>fue:</p>
<img src="https://data.toyobaru.es/gfx/blog/Par/Protocolo_Ax_7.webp" alt="Nueva solicitud Servicio UDS 0xA1 (específico del fabricante)" title="Nueva solicitud Servicio UDS 0xA1 (específico del fabricante)" />
<p>Donde vemos que ahora, en vez de 9 bytes transmite 11 (0x0B) y que los datos iniciales: 0x0605020B0CE10101 han pasado a ser 0x06050403040B0CE10101.
Por otro lado, al invocar al servicio 0xA2, se recibía:
</p>
<img src="https://data.toyobaru.es/gfx/blog/Par/Protocolo_Ax_8.webp" alt="Nueva solicitud Servicio UDS 0xA2 (específico del fabricante)" title="Nueva solicitud Servicio UDS 0xA2 (específico del fabricante)" />
<p>Al poner el coche en marcha es fácil comprobar que los dos primeros bytes tras el 06 muestran las revoluciones, los dos siguientes bytes mandan el valor del par motor que teníamos identificado y finalmente llega el inalterable 03 que no se muy bien que es.</p>
<p>Concluí la prueba y el servicio 0xA3 hizo acto de presencia para finalizar la transmisión de datos.</p>
<p>Empecé a darle vueltas a la transformación que se había producido entre 0x09A10605020B0CE10101 y 0x0BA106050403040B0CE10101.</p>
<p>No sé muy bien como fue. Pero el hecho de que pudiera obtener las revoluciones mediante consulta a la ECU 0x7B0 con el servicio 0x21 y el PID 0x05 (devuelve 7 bytes de datos donde se pueden encontrar las revoluciones del motor, que es algo fácilmente identificable, por que normalmente es un valor entero sin factor de conversión y que está presente en el mensaje CAN ID 0x140) y que he trabajado muchos años con protocolos de comunicaciones de lo más variopintos, me hizo encontrar un cierto sentido a estas tramas.</p>
<img src="https://data.toyobaru.es/gfx/blog/Par/trama_1.webp" alt="Trama solicitud Servicio UDS 0xA1 (específico del fabricante)" title="Trama solicitud Servicio UDS 0xA1 (específico del fabricante)" />
<p>El primer byte en rojo es la longitud total de la trama. Eso lo sabemos por protocolo.</p>
<p>El segundo byte (0xA1) es el identificador de servicio. También lo sabemos por protocolo. Pero como el servicio 0xA1 no está normalizado no sabemos el resto. </p>
<p>El tercer byte (0x06) parece comportarse como el identificador de la programación de datos.</p>
<p>El cuarto byte (0x05) parece actuar como un identificador, del cual se desean el número de datos que se indican a continuación (0x02, como es una longitud también la pongo en rojo). </p>
<p>Luego vienen dos bytes que indican algo sobre lo que se quiere obtener. Entiendo que 0x0B0C identifica de alguna forma al par motor. </p>
<p>El octavo byte (0xE1) es otro identificador, del cual se desean (noveno byte) un único dato, que se identifica por 0x01. </p>
<p>Si aplicamos lo mismo a la segunda trama, tenemos:
</p>
<img src="https://data.toyobaru.es/gfx/blog/Par/trama_2.webp" alt="Nueva trama solicitud Servicio UDS 0xA1 (específico del fabricante)" title="Nueva trama solicitud Servicio UDS 0xA1 (específico del fabricante)" />
<p>El primer byte en rojo es la longitud total de la trama </p>
<p>El segundo byte (0xA1) es el identificador de servicio. </p>
<p>El tercer byte (0x06) es el identificador de la programación de datos. </p>
<p>El cuarto byte (0x05) identificador, del cual se desean el número de datos que se indican a continuación (0x04). Luego vienen cuatro bytes que indican lo que se quiere obtener. 0x0304 identifica a las revoluciones y 0x0B0C identifica -como vimos- al par motor. </p>
<p>Y como antes, el siguiente byte (0xE1) es otro identificador, del cual se desea (0x01) un único dato, que se identifica por 0x01. </p>
<p>Parece cuadrar. </p>
<p>¿ Podemos entonces deducir que el 0x05 que aparece en la solicitud del servicio 0xA1 es el mismo identificador que se usa para consultar con el servicio 0x21 a la ECU ? </p>
<p>Bastaba hacer unas pruebas. Conecté el portátil al coche y provoqué una serie de consultas periódicas a la ECU 0x7B0, servicio 0x21, PID 0x05 mientras recorría unos metros, para luego analizar los datos obtenidos.
</p>
<img src="https://data.toyobaru.es/gfx/blog/Par/Protocolo_21.webp" alt="Solicitud Servicio UDS 0x21 (ReadDataByLocalIdentifier)" title="Solicitud Servicio UDS 0x21 (ReadDataByLocalIdentifier)" />
<p>De los 7 bytes que enviaba la respuesta (en el ejemplo ABCDEFG=818002BD0000E0), es fácil comprobar que el tercer y cuarto byte por la izquierda (CD=02BD en el ejemplo) eran las revoluciones del motor. El análisis del quinto byte (E=00 en el ejemplo) rápidamente se comprobó que se correspondía con el sensor del acelerador (bastaba pisar el pedal para verlo cambiar) y, finalmente, el sexto y séptimo byte (FG=00E0, en el ejemplo) tenía todas las papeletas para ser el par motor.</p>
<p> Como en el volcado del <em>TechStream </em>con el servicio 0xA2, su último byte era siempre 0, por lo que al dividir el número por 32 daba unos valores razonables en Nm. Además, cuando con el coche en marcha no se pisaba el acelerador el valor era negativo o cero, como ocurre con el par motor. </p>
<p><strong>Nota</strong>: No puedo comprobarlo conectando de forma simultánea <em>TechStream </em>y otro programa mandando el servicio 0x21 (por ejemplo, Torque App) y ver que se obtiene lo mismo, porque al no tener el protocolo control de sesión, las sesiones se mezclan y los dos programas encuentran resultados inesperados y fallan. </p>
<p>En cualquier caso, no parecía haber duda. Todas las pruebas que realicé indicaban que con el PID 0x05 y el servicio 0x21 obtenía el par motor en modo pregunta-respuesta interrogando a la ECU 0x7B0.</p>
<p>
Además, como la respuesta al servicio 0x05 también se encuentran las revoluciones del motor, además del par, es posible obtener de forma sencilla la potencia que está entregando el motor. </p>
<p>Así, podemos obtener el par motor como C*256+B en revoluciones por minuto. Para obtener las revoluciones por segundo basta con dividir por 60: (C*256+B)/60 </p>
<p>Y el par motor se obtiene como (SIGNED(F)*256+G)/32. </p>
<p>Para obtener la potencia entregada por el motor basta multiplicar las revoluciones por el par, por tanto: (C*256+B)*(SIGNED(F)*256+G)/1920, obteniendo la potencia en vatios. </p>
<p>Si queremos la potencia en kw, habrá que dividir por 1.920.000 en vez de 1.920 y si preferimos la información en CV, dividiremos por 1.412.158
</p>http://blog.toyobaru.es/index.php?post/2021/11/29/Obteniendo-valor-del-Par-motor-de-las-Ecus-del-Toyobaru#comment-formhttp://blog.toyobaru.es/index.php?feed/atom/comments/142Las ECUs y su conexión al bus CAN (y II)urn:md5:27a62b1a9333c62c4cac60e118cd39202021-09-10T11:24:00+02:002021-09-10T10:36:25+02:00mapBRZBusCANECUGT86TechStreamTécnica<p>En la entrada de este blog, <a href="https://blog.toyobaru.es/index.php?post/2021/03/01/Las-ECUs-y-su-conexi%C3%B3n-al-bus-CAN">Las ECUs y su conexión al bus CAN</a>, vimos que según el manual de reparación del toyobaru, éste tiene hasta 9 ECUs conectadas al bus CAN en el caso del modelo con transmisión automática y 8 ECUs en el caso del modelo con transmisión manual.</p>
<img src="https://data.toyobaru.es/gfx/blog/canbus.webp" /> <p>Desde entonces vengo realizando pruebas para tratar de averiguar como acceder a dichas ECUs y mediante la realización de diversas pruebas se ha podido identificar alguna de ellas.</p>
<div><ul><li><strong>0x7E0</strong> ECU motor</li>
<li><strong>0x7E1</strong> ECU transmisión (sólo en modelos con transmisión automática)</li>
<li><strong>0x7C4</strong> ECU climatización</li>
<li><strong>0x7C0</strong> ECU instrumentación </li>
<li><strong>0x7B0</strong> ECU ABS/TRC</li>
</ul>
</div>
<p>Además se ha determinado, que en los identificadores CAN<strong> 0x730</strong>, <strong>0x780</strong> y <strong>0x7A1</strong> están presentes otras ECUs que aun no han podido identificar.</p>
<p>Pero al <a href="https://blog.toyobaru.es/index.php?post/2021/08/12/Usando-TechStream.">conectar TechStream</a> a mi vehículo, el programa dice que mi coche dispone de hasta 11 ECUs.</p>
<img src="https://data.toyobaru.es/blog/gfx/TS/ECUs.webp" />
<p>¿ cómo es posible ? ¿ está mal la documentación de reparación del vehículo ? ¿ está mal TechStream ? ¿ cómo se explica esta aparente contradicción ?</p>
<p>Afortunadamente puedo capturar el tráfico del CAN bus que intercambian las ECUs con TechStream, lo cual ha facilitado el entendimiento de lo que pasa y la identificación de todas las ECUs.</p>
<p>Por un lado, se ha podido confirmar que los identificadores encontrados se corresponden con 3 ECUs.</p>
<ul><li><strong>0x730</strong> ECU velocidad crucero</li>
<li><strong>0x780</strong> ECU airbag</li>
<li><strong>0x7A1</strong> ECU EPMS (dirección asistida)</li>
</ul>
<p>y por otro lado, identificar al último elemento que se conecta al bus CAN, mediante el uso del CAN ID <strong>0x750</strong>.</p>
<p>Sin embargo, este último elemento, que no había detectado hasta ahora, hace uso de las direcciones extendidas de ISO TP (<span><em>ISO</em> 15765-2)</span> para presentarse como 4 ECUs distintas bajo el mismo identificador <strong>0x750</strong>. Así:</p>
<ul><li><strong>0x750#40</strong> ECU carrocería (Main body)</li>
<li><strong>0x750#B5</strong> ECU llave inteligente (Smart key)</li>
<li><strong>0x750#E9</strong> ECU alimentación eléctrica (Power source control)</li>
<li><strong>0x750#EC</strong> ECU interruptor maestro (Master switch)</li>
</ul>
<p>Así que todo está bien. Son 8 los dispositivos conectados al bus CAN en mi coche y 11 las ECUs que están presentes.</p>
<p>La verdad es que no se me hubiera ocurrido nunca hacer uso de direccionamiento extendido cuando tenemos un montón de identificadores principales sin usar. De no ser por TechStream no lo hubiera encontrado nunca.</p>
<p>Ahora queda ir analizando las posibilidades que tiene cada ECU de ofrecer información relevante. Espero que con la ayuda de TechStream, la tarea pueda hacerse de forma más rápida y sencilla.</p>http://blog.toyobaru.es/index.php?post/2021/09/10/Las-ECUs-y-su-conexi%C3%B3n-al-bus-CAN-%28y-II%29#comment-formhttp://blog.toyobaru.es/index.php?feed/atom/comments/1400x7E1, la ECU responsable de la transmisión del toyobaru.urn:md5:1fa13567dc3498e171f7fa8dd9dafb382021-06-22T17:55:00+02:002021-07-26T08:47:34+02:00mapBRZBusCANECUGT86OBDIITécnica<p><strong>Esta ECU sólo está presente en los vehículos con transmisión automática</strong>, y siguiendo las recomendaciones de la norma ISO 15.765-4, responde bajo el <strong>CAN ID 0x7E1</strong>.</p>
<p>Dado que mi coche tiene una caja manual, tuve que pedirle a mi amigo Santi que me dejara conectar mi portátil a su coche, a lo que accedió con gusto. Y la primera sorpresa con la que me encontré al realizar las pruebas fue que, además de responder a servicios propietarios como el <strong>0x21</strong>, también respondía a servicios normalizados como el <strong>0x01</strong> o el <strong>0x09</strong>.</p> <p>La ventaja de que responda a servicios normalizados es que podemos obtener información de la ECU rápidamente, pues no tenemos que realizar ingeniería inversa para saber que información está mandando la ECU, pues la norma nos ayuda a descodificar los mensajes.</p>
<p>Empecemos viendo que nos ofrece esta ECU bajo el <strong>servicio 0x01 de OBDII</strong>, de identificación de parámetros.</p>
<p>No entro en el detalle de como obtener los servicios disponibles de la ECU pues está explicado en distintas entradas del blog y no quiero ser repetitivo. Baste decir que tras solicitarle a la ECU los servicios disponibles ofreció los siguientes:</p>
<pre>
PID 0x00: PID implementados [01 - 20]
PID 0x01: Estado de los monitores de diagnóstico desde que se borraron los códigos de error DTC
PID 0x05: Temperatura del líquido refrigerante del motor
PID 0x0C: RPM del motor
PID 0x0D: Velocidad del vehículo
PID 0x1C: Estándar OBD implementado en este vehículo
PID 0x1F: Tiempo desde que se puso en marcha el motor
PID 0x20: PID implementados [21 - 40]
PID 0x21: Distancia recorrida con luz de fallo (MIL) encendida
PID 0x30: Número de arranques desde que se borraron los errores
PID 0x31: Distancia recorrida desde que se borraron los errores
PID 0x40: PID implementados [41 - 60]
PID 0x41: Estado de los monitores en este ciclo de conducción
PID 0x42: Voltaje del módulo de control
PID 0x4D: Tiempo transcurrido con MIL encendido
PID 0x4E: Tiempo desde que se borraron los códigos de fallo
</pre>
<p>Si ahora solicitamos cada uno de estos PIDs, la información que devuelve la ECU, una vez formateada, es:</p>
<pre>
0x01 Estado de los monitores de diagnóstico desde que se borraron los códigos de error DTC :
Indicador de mal funcionamiento (MIL) .......................: Apagado
Número de alarmas disponibles para su visualización .........: 0
TESTS generales:
Monitorización de Componentes .......................: COMPLETA
Monitorización del Sistema de Combustible ...........: NO DISPONIBLE
Monitorización de Fallos ............................: NO DISPONIBLE
TESTS específicos:
Monitorización del sistema EGR ......................: NO DISPONIBLE
Monitorización del calentador de la sonda de oxígeno : NO DISPONIBLE
Monitorización de la sonda de oxígeno ...............: NO DISPONIBLE
Monitorización del refrigerante del sistema A/C .....: NO DISPONIBLE
Monitorización del sistema secundario de aire .......: NO DISPONIBLE
Monitorización del sistema de evaporación ...........: NO DISPONIBLE
Monitorización del calentador del catalizador .......: NO DISPONIBLE
Monitorización del catalizador ......................: NO DISPONIBLE
0x05 Temperatura del líquido refrigerante del motor .....: 81 ºC
0x0C RPM del motor .......................................: 0 rpm
0x0D Velocidad del vehículo ..............................: 0 km/h
0x1C Estándar OBD implementado en este vehículo ..........: EOBD y OBD-II
0x1F Tiempo desde que se puso en marcha el motor .........: 0 s
0x21 Distancia recorrida con luz de fallo (MIL) encendida : 0 km
0x30 Número de arranques desde que se borraron los errores: 255 veces
0x31 Distancia recorrida desde que se borraron los errores: 49.332 km
0x41 Estado de los monitores en este ciclo de conducción .:
TESTS generales:
Monitorización de Componentes .......................: COMPLETA
Monitorización del Sistema de Combustible ...........: NO DISPONIBLE
Monitorización de Fallos ............................: NO DISPONIBLE
TESTS específicos:
Monitorización del sistema EGR ......................: NO DISPONIBLE
Monitorización del calentador de la sonda de oxígeno : NO DISPONIBLE
Monitorización de la sonda de oxígeno ...............: NO DISPONIBLE
Monitorización del refrigerante del sistema A/C .....: NO DISPONIBLE
Monitorización del sistema secundario de aire .......: NO DISPONIBLE
Monitorización del sistema de evaporación ...........: NO DISPONIBLE
Monitorización del calentador del catalizador .......: NO DISPONIBLE
Monitorización del catalizador ......................: NO DISPONIBLE
0x42 Voltaje del módulo de control .......................: 11,632 V
0x4D Tiempo transcurrido con MIL encendido ...............: 0 minutos
0x4E Tiempo desde que se borraron los códigos de fallo ...: 51.275 mins.
</pre>
<p>Como no puede ser de otra forma, la información relativa a las monitorizaciones que realiza la ECU unicamente soporta la monitorización de componentes, pues el resto son pruebas pensadas para la ECU principal.</p>
<p>Por lo demás, la información que ofrece la ECU en este modo es poca, relacionada con el tiempo y la distancia desde que se borraron los códigos de error y poco más.</p>
<p>Veamos ahora que información ofrece la ECU bajo el <strong>servicio 0x09 de OBDII</strong>, de identificación de la ECU. Para ello solicitamos los servicios disponibles bajo este servicio y obtenemos:</p>
<pre>
PID 0x00: PID implementados [01 - 20]
PID 0x04: Identificador de la calibración
PID 0x06: Número de verificación de la calibración (CVN)
PID 0x0A: Nombre de la ECU
</pre>
<p>Solicitamos ahora cada uno de estos PIDs, y la información que devuelve la ECU, una vez formateada, es:</p>
<pre>
0x04 Identificador de la calibración ................: ASE5DCB0
0x06 Número de verificación de la calibración (CVN) .: 012B901E12
0x0A Nombre de la ECU ...............................: TCM - TransmisCtrl
</pre>
<p>que nos permite obtener el identificador de la calibración que lleva cargada la ECU.</p>http://blog.toyobaru.es/index.php?post/2021/06/22/0x7E1%2C-la-ECU-responsable-de-la-transmisi%C3%B3n-del-toyobaru.#comment-formhttp://blog.toyobaru.es/index.php?feed/atom/comments/1350x7C4, la ECU responsable de la climatización del toyobaru (II)urn:md5:79784e99f1d8599a135c3b0ee96606042021-03-26T10:41:00+01:002021-07-26T08:47:55+02:00mapBRZBusCANECUGT86OBDIITécnica<p><strong>Avanzamos en el entendimiento de algunos PIDs del servicio 0x21 sobre esta ECU.</strong></p>
<p>Vimos en la anterior entrada, que varios PIDs del servicio <strong>0x21</strong> eran respondidos por la ECU con dos bytes (que llamaremos A y B) y que en el caso del PID <strong>0x29</strong>, ese valor se correspondía con una temperatura cuyo valor se obtenía, en grados centígrados, de aplicar la fórmula (A*256+B)/100.</p> <p>Con esa información, he estado haciendo distintas pruebas en el coche, modificando parámetros de la climatización, pasando el coche de lugares templados y oscuros (como el garaje) a luminosos y más o menos cálidos, como la calle, y tomando algunas temperaturas.</p>
<p>Tras registrar cada cambio, se procede a interrogar a la ECU, y por comparación entre los datos antes y después de la pruebas, se pueden llegar a algunas conclusiones. Estas son las que yo he alcanzado.</p>
<p><strong>PID 0x21</strong></p>
<p>Como ya sabemos, la consulta a este PID</p>
<pre>>> 7C4: 02 21 21 00 00 00 00 00<br /><< 7CC: 04 61 21 08 57 00 00 00</pre>
<p>devuelve 2 bytes (en el ejemplo A = 0x08 y B =0x57) que aplicando la formula (A*256+B)/100 se transforma en una temperatura en ºC (en el ejemplo 21,35 ºC).</p>
<p>Después de todas mis mediciones creo poder asegurar que ese valor se corresponde a la <strong>temperatura del interior del habitáculo</strong>.</p>
<p><strong>PID 0x26</strong></p>
<p>Del mismo modo, esta consulta</p>
<pre>>> 7C4: 02 21 26 00 00 00 00 00<br /><< 7CC: 04 61 26 11 F8 00 00 00</pre>
<p>devuelve 2 bytes. En el ejemplo: A = 0x11 y B=0xF8, para dar una temperatura de 46ºC.</p>
<p>Esta temperatura se corresponde con la del líquido refrigerante del motor. Como vimos, la temperatura del refrigerante pude obtenerse a través del servicio 0x01, con el PID 0x0F consultando a la ECU principal (0x7E0).</p>
<p>Como veremos también cuando escriba en el blog la reseña sobre el mensaje CAN ID 0x360, esta temperatura también está disponible en el tercer byte del mensaje CAN bus con ID 0x360.</p>
<p>Pues bien, en todas las pruebas realizadas, la consulta a la ECU 0x7C4 con el servicio 0x21 y PID 0x26 ha devuelto el mismo valor que el que se corresponde con la <strong>temperatura del refrigerante</strong>.</p>
<p><strong>PID 0x2A</strong></p>
<p>De nuevo una consulta que devuelve dos bytes</p>
<pre>>> 7C4: 02 21 2A 00 00 00 00 00<br /><< 7CC: 04 61 2A 08 98 00 00 00</pre>
<p>que pueden interpretarse como una temperatura. En el ejemplo, A = 0x08, B = 0x98 para dar una temperatura de 22,00 ºC.</p>
<p>En este caso, la <strong>temperatura </strong>se corresponde con la <strong>fijada en el sistema de climatización para el acompañante</strong> (del mismo modo que el PID 0x29 devuelve la temperatura fijada para el conductor, como vimos en la entrada anterior).</p>
<p><strong>PID 0x3D</strong></p>
<p>Otra consulta que devuelve dos bytes es</p>
<pre>>> 7C4: 02 21 3D 00 00 00 00 00<br /><< 7CC: 04 61 3D 05 AF 00 00 00</pre>
<p>En el ejemplo, A = 0x05, B = 0xAF, que permite obtener una temperatura de 14,55 ºC.</p>
<p>Este valor se corresponde con la <strong>temperatura exterior</strong> y coincide (con el redondeo necesario) con la que el vehículo muestra en el cuadro de mandos cuando consultamos dicha temperatura.</p>
<p><strong>PID 0x24</strong></p>
<p>Hay otros PIDs que devuelven dos bytes que podrían tratarse de otras temperaturas, pero aun no he logrado entender su comportamiento. Pero también hay PIDs que devuelven dos bytes que no tienen nada que ver con temperaturas. Uno de ellos es</p>
<pre>>> 7C4: 02 21 24 00 00 00 00 00<br /><< 7CC: 04 61 24 03 7A 00 00 00</pre>
<p>que devuelve dos bytes (en el ejemplo A = 0x03 y B = 0x7A) y que podríamos considerar una temperatura (en el ejemplo sería de 8,9 ºC).</p>
<p>Pero no he encontrado ninguna correlación que pueda indicarme que se trata de una temperatura.</p>
<p>Sin embargo, lo que he observado, es que cuando realizo las pruebas en la penumbra del garaje, este PID devuelve valores muy bajos (0x0002). En las pruebas realizadas durante los atardeceres los valores son un poco más elevados (0x0050) y van disminuyendo con el paso del tiempo (0x0048, 0x0040, 0x003E, 0x003D).</p>
<p>Por otro lado, las muestras que he tomado durante el día, pero a la sombra de un árbol los valores son mayores (0x029E), y las pruebas realizadas a pleno sol -como la del ejemplo- los valores son todavía mayores, como en el ejemplo 0x037A, que es el valor más alto que he obtenido.</p>
<p>Todo ello me hace pensar que este PID nos devuelve el valor del <strong>sensor de iluminación</strong> a la que está sometido el vehículo.</p>
<p><strong>PID 0x3C</strong></p>
<p>Además de poder entender la respuesta de algunos PIDs que devuelven dos bytes, las pruebas realizadas me han permitido comprender la respuesta de algunos de los PDIs que devuelven un solo byte.</p>
<pre>>> 7C4: 02 21 3C 00 00 00 00 00<br /><< 7CC: 03 61 3C 05 00 00 00 00</pre>
<p>En este caso, el byte devuelto es A = 0x05, y tras las pruebas realizadas puedo decir que la respuesta al PID 0x3C contiene la <strong>intensidad del ventilador</strong> entre los valores comprendidos entre 0x00 -cuando el ventilador está apagado- y 0x1F, cuando está al máximo.</p>
<p><strong>PID 0x36</strong></p>
<p>La solicitud del PID 0x36 también devuelve un byte</p>
<pre>>> 7C4: 02 21 36 00 00 00 00 00<br /><< 7CC: 03 61 36 00 00 00 00 00</pre>
<p>En el ejemplo, A = 0x00.</p>
<p>Durante las pruebas solo he obtenido dos valores. 0x00 cuando la <strong>recirculación del aire</strong> no está activa y 0xFF cuando si lo está.</p>
<p><strong>PID 0x41</strong></p>
<p>Otra solicitud que sólo devuelve un byte es la correspondiente al PID 0x41</p>
<pre>>> 7C4: 02 21 41 00 00 00 00 00<br /><< 7CC: 03 61 41 00 00 00 00 00</pre>
<p>De forma análoga a la anterior solicitud, solo me he encontrado dos valores como respuesta. 0x00 cuando el <strong>aire acondicionado</strong> no está activado y 0xFF cuando si lo está.</p>
<p><strong>PID 0x42</strong></p>
<p>Por último, la solicitud al PID 0x42 también devuelve un byte</p>
<pre>>> 7C4: 02 21 42 00 00 00 00 00<br /><< 7CC: 03 61 42 00 00 00 00 00</pre>
<p>Y del mismo modo que las dos anteriores solo he encontrado dos valores durante mis pruebas. 0x00 cuando la opción de <strong>climatización dual</strong> está desactivada y 0xFF cuando está activa.</p>
<p>Con toda esta información podemos ir completando nuestra tabla</p>
<table cellspacing="0" border="1">
<tbody><tr>
<td style="text-align:center;"><strong>PID</strong></td>
<td style="text-align:center;"><strong>Longitud (bytes)</strong></td>
<td style="text-align:center;"><strong>Unidades</strong></td>
<td style="text-align:center;"><strong>Cálculo</strong></td>
<td style="text-align:center;"><strong>Descripción</strong></td>
<td style="text-align:center;"><strong>Status</strong></td>
</tr>
<tr>
<td style="text-align:center;">0x00</td>
<td style="text-align:center;">4</td>
<td style="text-align:center;">-</td>
<td style="text-align:center;">Evaluación de bits</td>
<td style="text-align:center;">PIDs soportados [0x01...0x20]</td>
<td style="text-align:center;">Confirmado</td>
</tr>
<tr>
<td style="text-align:center;">0x03</td>
<td style="text-align:center;">2</td>
<td style="text-align:center;"><br /></td>
<td style="text-align:center;"><br /></td>
<td style="text-align:center;"><br /></td>
<td style="text-align:center;">Desconocido</td>
</tr>
<tr>
<td style="text-align:center;">0x20</td>
<td style="text-align:center;">4</td>
<td style="text-align:center;">-</td>
<td style="text-align:center;">Evaluación de bits</td>
<td style="text-align:center;">PIDs soportados [0x21...0x40]</td>
<td style="text-align:center;">Confirmado</td>
</tr>
<tr>
<td style="text-align:center;">0x21</td>
<td style="text-align:center;">2<br />A,B</td>
<td style="text-align:center;">ºC</td>
<td style="text-align:center;">(A*256+B)/100</td>
<td style="text-align:center;">Temperatura del habitáculo</td>
<td style="text-align:center;">Confirmado</td>
</tr>
<tr>
<td style="text-align:center;">0x24</td>
<td style="text-align:center;">2<br />A,B</td>
<td style="text-align:center;">Por determinar</td>
<td style="text-align:center;">A*256+B</td>
<td style="text-align:center;">Sensor de iluminación</td>
<td style="text-align:center;">Confirmado</td>
</tr>
<tr>
<td style="text-align:center;">0x25</td>
<td style="text-align:center;">1</td>
<td style="text-align:center;"><br /></td>
<td style="text-align:center;"><br /></td>
<td style="text-align:center;"><br /></td>
<td style="text-align:center;">Desconocido</td>
</tr>
<tr>
<td style="text-align:center;">0x26</td>
<td style="text-align:center;">2<br />A,B</td>
<td style="text-align:center;">ºC</td>
<td style="text-align:center;">(A*256+B)/100</td>
<td style="text-align:center;">Temperatura del refrigerante</td>
<td style="text-align:center;">Confirmado</td>
</tr>
<tr>
<td style="text-align:center;">0x29</td>
<td style="text-align:center;">2<br />A,B</td>
<td style="text-align:center;">ºC</td>
<td style="text-align:center;">(A*256+B)/100</td>
<td style="text-align:center;">Temperatura conductor demandada A/C</td>
<td style="text-align:center;">Confimado</td>
</tr>
<tr>
<td style="text-align:center;">0x2A</td>
<td style="text-align:center;">2<br />A,B</td>
<td style="text-align:center;">ºC</td>
<td style="text-align:center;">(A*256+B)/100</td>
<td style="text-align:center;">Temperatura acompañante demandada A/C</td>
<td style="text-align:center;">Confirmado</td>
</tr>
<tr>
<td style="text-align:center;">0x2B</td>
<td style="text-align:center;">2</td>
<td style="text-align:center;"><br /></td>
<td style="text-align:center;"><br /></td>
<td style="text-align:center;"><br /></td>
<td style="text-align:center;">Desconocido</td>
</tr>
<tr>
<td style="text-align:center;">0x2C</td>
<td style="text-align:center;">2</td>
<td style="text-align:center;"><br /></td>
<td style="text-align:center;"><br /></td>
<td style="text-align:center;"><br /></td>
<td style="text-align:center;">Desconocido</td>
</tr>
<tr>
<td style="text-align:center;">0x2D</td>
<td style="text-align:center;">2</td>
<td style="text-align:center;"><br /></td>
<td style="text-align:center;"><br /></td>
<td style="text-align:center;"><br /></td>
<td style="text-align:center;">Desconocido</td>
</tr>
<tr>
<td style="text-align:center;">0x2E</td>
<td style="text-align:center;">2</td>
<td style="text-align:center;"><br /></td>
<td style="text-align:center;"><br /></td>
<td style="text-align:center;"><br /></td>
<td style="text-align:center;">Desconocido</td>
</tr>
<tr>
<td style="text-align:center;">0x2F</td>
<td style="text-align:center;">2</td>
<td style="text-align:center;"><br /></td>
<td style="text-align:center;"><br /></td>
<td style="text-align:center;"><br /></td>
<td style="text-align:center;">Desconocido</td>
</tr>
<tr>
<td style="text-align:center;">0x30</td>
<td style="text-align:center;">2</td><td style="text-align:center;"><br /></td>
<td style="text-align:center;"><br /></td>
<td style="text-align:center;"><br /></td>
<td style="text-align:center;">Desconocido</td>
</tr>
<tr>
<td style="text-align:center;">0x33</td>
<td style="text-align:center;">2</td>
<td style="text-align:center;"><br /></td>
<td style="text-align:center;"><br /></td>
<td style="text-align:center;"><br /></td>
<td style="text-align:center;">Desconocido</td>
</tr><tr>
<td style="text-align:center;">0x34</td>
<td style="text-align:center;">2</td>
<td style="text-align:center;"><br /></td>
<td style="text-align:center;"><br /></td>
<td style="text-align:center;"><br /></td>
<td style="text-align:center;">Desconocido</td>
</tr>
<tr>
<td style="text-align:center;">0x35</td>
<td style="text-align:center;">2</td>
<td style="text-align:center;"><br /></td>
<td style="text-align:center;"><br /></td>
<td style="text-align:center;"><br /></td>
<td style="text-align:center;">Desconocido</td>
</tr>
<tr>
<td style="text-align:center;">0x36</td>
<td style="text-align:center;">1<br />A</td>
<td style="text-align:center;">-</td>
<td style="text-align:center;">0x00 OFF<br />0xFF ON</td>
<td style="text-align:center;">Recirculación del aire</td>
<td style="text-align:center;">Confirmado</td>
</tr>
<tr>
<td style="text-align:center;">0x3C</td>
<td style="text-align:center;">1<br />A</td>
<td style="text-align:center;">-</td>
<td style="text-align:center;">0x00 Mínimo<br />0x1F Máximo</td>
<td style="text-align:center;">Velocidad del ventilador</td>
<td style="text-align:center;">Confirmado</td>
</tr>
<tr>
<td style="text-align:center;">0x3D</td>
<td style="text-align:center;">2<br />A,B</td>
<td style="text-align:center;">ºC</td>
<td style="text-align:center;">(A*256+B)/100</td>
<td style="text-align:center;">Temperatura exterior</td>
<td style="text-align:center;">Confirmado</td>
</tr>
<tr>
<td style="text-align:center;">0x40</td>
<td style="text-align:center;">4</td>
<td style="text-align:center;">-</td>
<td style="text-align:center;">Evaluación de bits</td>
<td style="text-align:center;">PIDs soportados [0x41...0x60]</td>
<td style="text-align:center;">Confirmado</td>
</tr>
<tr>
<td style="text-align:center;">0x41</td>
<td style="text-align:center;">1<br />A</td>
<td style="text-align:center;">-</td>
<td style="text-align:center;">0x00 OFF<br />0xFF ON</td>
<td style="text-align:center;">Aire Acondicionado</td>
<td style="text-align:center;">Confirmado</td>
</tr>
<tr>
<td style="text-align:center;">0x42</td>
<td style="text-align:center;">1<br />A</td>
<td style="text-align:center;">-</td>
<td style="text-align:center;">0x00 OFF<br />0xFF ON</td>
<td style="text-align:center;">Climatización dual</td>
<td style="text-align:center;">Confirmado</td>
</tr>
<tr>
<td style="text-align:center;">0x43</td>
<td style="text-align:center;">1</td>
<td style="text-align:center;"><br /></td>
<td style="text-align:center;"><br /></td>
<td style="text-align:center;"><br /></td>
<td style="text-align:center;">Desconocido</td>
</tr>
<tr>
<td style="text-align:center;">0x44</td>
<td style="text-align:center;">1</td>
<td style="text-align:center;"><br /></td>
<td style="text-align:center;"><br /></td>
<td style="text-align:center;"><br /></td>
<td style="text-align:center;">Desconocido</td>
</tr>
<tr>
<td style="text-align:center;">0x45</td>
<td style="text-align:center;">1</td>
<td style="text-align:center;"><br /></td>
<td style="text-align:center;"><br /></td>
<td style="text-align:center;"><br /></td>
<td style="text-align:center;">Desconocido</td>
</tr>
<tr>
<td style="text-align:center;">0x46</td>
<td style="text-align:center;">1</td>
<td style="text-align:center;"><br /></td>
<td style="text-align:center;"><br /></td>
<td style="text-align:center;"><br /></td>
<td style="text-align:center;">Desconocido</td>
</tr>
<tr>
<td style="text-align:center;">0x47</td>
<td style="text-align:center;">2</td>
<td style="text-align:center;"><br /></td>
<td style="text-align:center;"><br /></td>
<td style="text-align:center;"><br /></td>
<td style="text-align:center;">Desconocido</td>
</tr>
<tr>
<td style="text-align:center;">0x48</td>
<td style="text-align:center;">2</td>
<td style="text-align:center;"><br /></td>
<td style="text-align:center;"><br /></td>
<td style="text-align:center;"><br /></td>
<td style="text-align:center;">Desconocido</td>
</tr>
<tr>
<td style="text-align:center;">0x4B</td>
<td style="text-align:center;">2</td>
<td style="text-align:center;"><br /></td>
<td style="text-align:center;"><br /></td>
<td style="text-align:center;"><br /></td>
<td style="text-align:center;">Desconocido</td>
</tr>
<tr>
<td style="text-align:center;">0x4C</td>
<td style="text-align:center;">2</td>
<td style="text-align:center;"><br /></td>
<td style="text-align:center;"><br /></td>
<td style="text-align:center;"><br /></td>
<td style="text-align:center;">Desconocido</td>
</tr>
<tr>
<td style="text-align:center;">0x60</td>
<td style="text-align:center;">4</td>
<td style="text-align:center;">-</td>
<td style="text-align:center;">Evaluación de bits</td>
<td style="text-align:center;">PIDs soportados [0x61...0x80]</td>
<td style="text-align:center;">Confirmado</td>
</tr>
<tr>
<td style="text-align:center;">0x80</td>
<td style="text-align:center;">4</td>
<td style="text-align:center;">-</td>
<td style="text-align:center;">Evaluación de bits</td>
<td style="text-align:center;">PIDs soportados [0x81...0xA0]</td>
<td style="text-align:center;">Confirmado</td>
</tr>
<tr>
<td style="text-align:center;">0x81</td>
<td style="text-align:center;">4</td>
<td style="text-align:center;"><br /></td>
<td style="text-align:center;"><br /></td>
<td style="text-align:center;"><br /></td>
<td style="text-align:center;">Desconocido</td>
</tr>
<tr>
<td style="text-align:center;">0x82</td>
<td style="text-align:center;">4</td>
<td style="text-align:center;"><br /></td>
<td style="text-align:center;"><br /></td>
<td style="text-align:center;"><br /></td>
<td style="text-align:center;">Desconocido</td>
</tr>
<tr>
<td style="text-align:center;">0x89</td>
<td style="text-align:center;">1</td>
<td style="text-align:center;"><br /></td>
<td style="text-align:center;"><br /></td>
<td style="text-align:center;"><br /></td>
<td style="text-align:center;">Desconocido</td>
</tr>
<tr>
<td style="text-align:center;">0xA0</td>
<td style="text-align:center;">4</td>
<td style="text-align:center;">-</td>
<td style="text-align:center;">Evaluación de bits</td>
<td style="text-align:center;">PIDs soportados [0xA1...0xC0]</td>
<td style="text-align:center;">Confirmado</td>
</tr>
<tr>
<td style="text-align:center;">0xC0</td>
<td style="text-align:center;">4</td>
<td style="text-align:center;">-</td>
<td style="text-align:center;">Evaluación de bits</td>
<td style="text-align:center;">PIDs soportados [0xC1...0xE0]</td>
<td style="text-align:center;">Confirmado</td>
</tr>
<tr>
<td style="text-align:center;">0xE0</td>
<td style="text-align:center;">4</td>
<td style="text-align:center;">-</td>
<td style="text-align:center;">Evaluación de bits</td>
<td style="text-align:center;">PIDs soportados [0xE1...0x100]</td>
<td style="text-align:center;">Confirmado</td>
</tr>
<tr>
<td style="text-align:center;">0xE1</td>
<td style="text-align:center;">7</td>
<td style="text-align:center;"><br /></td>
<td style="text-align:center;"><br /></td>
<td style="text-align:center;"><br /></td>
<td style="text-align:center;">Desconocido</td>
</tr>
<tr>
<td style="text-align:center;">0xE2</td>
<td style="text-align:center;">5</td>
<td style="text-align:center;"><br /></td>
<td style="text-align:center;"><br /></td>
<td style="text-align:center;"><br /></td>
<td style="text-align:center;">Desconocido</td>
</tr>
</tbody></table>http://blog.toyobaru.es/index.php?post/2021/03/26/0x7C4%2C-la-ECU-responsable-de-la-climatizaci%C3%B3n-del-toyobaru-%28II%29#comment-formhttp://blog.toyobaru.es/index.php?feed/atom/comments/1300x7C4, la ECU responsable de la climatización del toyobaru.urn:md5:b20fcbecfc10a2793132c3b6ec9c896c2021-03-14T20:23:00+01:002021-07-26T08:48:08+02:00mapBRZBusCANECUGT86OBDIITécnica<p>Seguimos tratando de descubrir las distintas ECUs del coche y que datos nos pueden ofrecer. Esta vez vamos a centrarnos en la ECU con CAN ID <strong>0x7C4</strong>.</p> <p>En otros Toyotas esta ECU es la responsable de controlar el aire acondicionado y aunque la información que he visto por ahí no obtenía resultados en mi GT86, a base de realizar pruebas, he encontrado una solicitud a esta ECU relacionada con la temperatura que seleccionas para el habitáculo.</p>
<p>Así que tiene toda la pinta de que en el toyobaru, esta ECU tiene la misma función que en otros modelos de Toyota.</p>
<p>Pero vayamos por partes. Antes de analizar las solicitudes en particular, veamos cuales están disponibles. Para ello utilizamos el mismo método que en las ECUs anteriores. Solicitamos el PID <strong>0x00</strong> del servicio <strong>0x21</strong> a la ECU <strong>0x7C4</strong> y vamos elaborando la tabla de PIDs soportados.</p>
<p>Una vez obtenidos los PIDs, solicitamos todos ya cada uno de los PIDs soportados para obtener la respuesta y ver de que longitud es.</p>
<p>Con esa información podemos escribir la siguiente tabla.</p>
<table cellspacing="0" border="0">
<tbody><tr>
<td style="text-align:center;"><strong>PID</strong></td>
<td style="text-align:center;"><strong>Longitud (bytes)</strong></td>
<td style="text-align:center;"><strong>Unidades</strong></td>
<td style="text-align:center;"><strong>Cálculo</strong></td>
<td style="text-align:center;"><strong>Descripción</strong></td>
<td style="text-align:center;"><strong>Status</strong></td>
</tr>
<tr>
<td style="text-align:center;">0x00</td>
<td style="text-align:center;">4</td>
<td style="text-align:center;">-</td>
<td style="text-align:center;">Evaluación de bits</td>
<td style="text-align:center;">PIDs soportados [0x01...0x20]</td>
<td style="text-align:center;">Confirmado</td>
</tr>
<tr>
<td style="text-align:center;">0x03</td>
<td style="text-align:center;">2</td>
<td style="text-align:center;"><br /></td>
<td style="text-align:center;"><br /></td>
<td style="text-align:center;"><br /></td>
<td style="text-align:center;">Desconocido</td>
</tr>
<tr>
<td style="text-align:center;">0x20</td>
<td style="text-align:center;">4</td>
<td style="text-align:center;">-</td>
<td style="text-align:center;">Evaluación de bits</td>
<td style="text-align:center;">PIDs soportados [0x21...0x40]</td>
<td style="text-align:center;">Confirmado</td>
</tr>
<tr>
<td style="text-align:center;">0x21</td>
<td style="text-align:center;">2</td>
<td style="text-align:center;"><br /></td>
<td style="text-align:center;"><br /></td>
<td style="text-align:center;"><br /></td>
<td style="text-align:center;">Desconocido</td>
</tr>
<tr>
<td style="text-align:center;">0x24</td>
<td style="text-align:center;">2</td>
<td style="text-align:center;"><br /></td>
<td style="text-align:center;"><br /></td>
<td style="text-align:center;"><br /></td>
<td style="text-align:center;">Desconocido</td>
</tr>
<tr>
<td style="text-align:center;">0x25</td>
<td style="text-align:center;">1</td>
<td style="text-align:center;"><br /></td>
<td style="text-align:center;"><br /></td>
<td style="text-align:center;"><br /></td>
<td style="text-align:center;">Desconocido</td>
</tr>
<tr>
<td style="text-align:center;">0x26</td>
<td style="text-align:center;">2</td>
<td style="text-align:center;"><br /></td>
<td style="text-align:center;"><br /></td>
<td style="text-align:center;"><br /></td>
<td style="text-align:center;">Desconocido</td>
</tr>
<tr>
<td style="text-align:center;">0x29</td>
<td style="text-align:center;">2</td>
<td style="text-align:center;"><br /></td>
<td style="text-align:center;"><br /></td>
<td style="text-align:center;"><br /></td>
<td style="text-align:center;">Desconocido</td>
</tr>
<tr>
<td style="text-align:center;">0x2A</td>
<td style="text-align:center;">2</td>
<td style="text-align:center;"><br /></td>
<td style="text-align:center;"><br /></td>
<td style="text-align:center;"><br /></td>
<td style="text-align:center;">Desconocido</td>
</tr>
<tr>
<td style="text-align:center;">0x2B</td>
<td style="text-align:center;">2</td>
<td style="text-align:center;"><br /></td>
<td style="text-align:center;"><br /></td>
<td style="text-align:center;"><br /></td>
<td style="text-align:center;">Desconocido</td>
</tr>
<tr>
<td style="text-align:center;">0x2C</td>
<td style="text-align:center;">2</td>
<td style="text-align:center;"><br /></td>
<td style="text-align:center;"><br /></td>
<td style="text-align:center;"><br /></td>
<td style="text-align:center;">Desconocido</td>
</tr>
<tr>
<td style="text-align:center;">0x2D</td>
<td style="text-align:center;">2</td>
<td style="text-align:center;"><br /></td>
<td style="text-align:center;"><br /></td>
<td style="text-align:center;"><br /></td>
<td style="text-align:center;">Desconocido</td>
</tr>
<tr>
<td style="text-align:center;">0x2E</td>
<td style="text-align:center;">2</td>
<td style="text-align:center;"><br /></td>
<td style="text-align:center;"><br /></td>
<td style="text-align:center;"><br /></td>
<td style="text-align:center;">Desconocido</td>
</tr>
<tr>
<td style="text-align:center;">0x2F</td>
<td style="text-align:center;">2</td>
<td style="text-align:center;"><br /></td>
<td style="text-align:center;"><br /></td>
<td style="text-align:center;"><br /></td>
<td style="text-align:center;">Desconocido</td>
</tr>
<tr>
<td style="text-align:center;">0x30</td>
<td style="text-align:center;">2</td><td style="text-align:center;"><br /></td>
<td style="text-align:center;"><br /></td>
<td style="text-align:center;"><br /></td>
<td style="text-align:center;">Desconocido</td>
</tr>
<tr>
<td style="text-align:center;">0x33</td>
<td style="text-align:center;">2</td>
<td style="text-align:center;"><br /></td>
<td style="text-align:center;"><br /></td>
<td style="text-align:center;"><br /></td>
<td style="text-align:center;">Desconocido</td>
</tr><tr>
<td style="text-align:center;">0x34</td>
<td style="text-align:center;">2</td>
<td style="text-align:center;"><br /></td>
<td style="text-align:center;"><br /></td>
<td style="text-align:center;"><br /></td>
<td style="text-align:center;">Desconocido</td>
</tr>
<tr>
<td style="text-align:center;">0x35</td>
<td style="text-align:center;">2</td>
<td style="text-align:center;"><br /></td>
<td style="text-align:center;"><br /></td>
<td style="text-align:center;"><br /></td>
<td style="text-align:center;">Desconocido</td>
</tr>
<tr>
<td style="text-align:center;">0x36</td>
<td style="text-align:center;">1</td>
<td style="text-align:center;"><br /></td>
<td style="text-align:center;"><br /></td>
<td style="text-align:center;"><br /></td>
<td style="text-align:center;">Desconocido</td>
</tr>
<tr>
<td style="text-align:center;">0x3C</td>
<td style="text-align:center;">1</td>
<td style="text-align:center;"><br /></td>
<td style="text-align:center;"><br /></td>
<td style="text-align:center;"><br /></td>
<td style="text-align:center;">Desconocido</td>
</tr>
<tr>
<td style="text-align:center;">0x3D</td>
<td style="text-align:center;">2</td>
<td style="text-align:center;"><br /></td>
<td style="text-align:center;"><br /></td>
<td style="text-align:center;"><br /></td>
<td style="text-align:center;">Desconocido</td>
</tr>
<tr>
<td style="text-align:center;">0x40</td>
<td style="text-align:center;">4</td>
<td style="text-align:center;">-</td>
<td style="text-align:center;">Evaluación de bits</td>
<td style="text-align:center;">PIDs soportados [0x41...0x60]</td>
<td style="text-align:center;">Confirmado</td>
</tr>
<tr>
<td style="text-align:center;">0x41</td>
<td style="text-align:center;">1</td>
<td style="text-align:center;"><br /></td>
<td style="text-align:center;"><br /></td>
<td style="text-align:center;"><br /></td>
<td style="text-align:center;">Desconocido</td>
</tr>
<tr>
<td style="text-align:center;">0x42</td>
<td style="text-align:center;">1</td>
<td style="text-align:center;"><br /></td>
<td style="text-align:center;"><br /></td>
<td style="text-align:center;"><br /></td>
<td style="text-align:center;">Desconocido</td>
</tr>
<tr>
<td style="text-align:center;">0x43</td>
<td style="text-align:center;">1</td>
<td style="text-align:center;"><br /></td>
<td style="text-align:center;"><br /></td>
<td style="text-align:center;"><br /></td>
<td style="text-align:center;">Desconocido</td>
</tr>
<tr>
<td style="text-align:center;">0x44</td>
<td style="text-align:center;">1</td>
<td style="text-align:center;"><br /></td>
<td style="text-align:center;"><br /></td>
<td style="text-align:center;"><br /></td>
<td style="text-align:center;">Desconocido</td>
</tr>
<tr>
<td style="text-align:center;">0x45</td>
<td style="text-align:center;">1</td>
<td style="text-align:center;"><br /></td>
<td style="text-align:center;"><br /></td>
<td style="text-align:center;"><br /></td>
<td style="text-align:center;">Desconocido</td>
</tr>
<tr>
<td style="text-align:center;">0x46</td>
<td style="text-align:center;">1</td>
<td style="text-align:center;"><br /></td>
<td style="text-align:center;"><br /></td>
<td style="text-align:center;"><br /></td>
<td style="text-align:center;">Desconocido</td>
</tr>
<tr>
<td style="text-align:center;">0x47</td>
<td style="text-align:center;">2</td>
<td style="text-align:center;"><br /></td>
<td style="text-align:center;"><br /></td>
<td style="text-align:center;"><br /></td>
<td style="text-align:center;">Desconocido</td>
</tr>
<tr>
<td style="text-align:center;">0x48</td>
<td style="text-align:center;">2</td>
<td style="text-align:center;"><br /></td>
<td style="text-align:center;"><br /></td>
<td style="text-align:center;"><br /></td>
<td style="text-align:center;">Desconocido</td>
</tr>
<tr>
<td style="text-align:center;">0x4B</td>
<td style="text-align:center;">2</td>
<td style="text-align:center;"><br /></td>
<td style="text-align:center;"><br /></td>
<td style="text-align:center;"><br /></td>
<td style="text-align:center;">Desconocido</td>
</tr>
<tr>
<td style="text-align:center;">0x4C</td>
<td style="text-align:center;">2</td>
<td style="text-align:center;"><br /></td>
<td style="text-align:center;"><br /></td>
<td style="text-align:center;"><br /></td>
<td style="text-align:center;">Desconocido</td>
</tr>
<tr>
<td style="text-align:center;">0x60</td>
<td style="text-align:center;">4</td>
<td style="text-align:center;">-</td>
<td style="text-align:center;">Evaluación de bits</td>
<td style="text-align:center;">PIDs soportados [0x61...0x80]</td>
<td style="text-align:center;">Confirmado</td>
</tr>
<tr>
<td style="text-align:center;">0x80</td>
<td style="text-align:center;">4</td>
<td style="text-align:center;">-</td>
<td style="text-align:center;">Evaluación de bits</td>
<td style="text-align:center;">PIDs soportados [0x81...0xA0]</td>
<td style="text-align:center;">Confirmado</td>
</tr>
<tr>
<td style="text-align:center;">0x81</td>
<td style="text-align:center;">4</td>
<td style="text-align:center;"><br /></td>
<td style="text-align:center;"><br /></td>
<td style="text-align:center;"><br /></td>
<td style="text-align:center;">Desconocido</td>
</tr>
<tr>
<td style="text-align:center;">0x82</td>
<td style="text-align:center;">4</td>
<td style="text-align:center;"><br /></td>
<td style="text-align:center;"><br /></td>
<td style="text-align:center;"><br /></td>
<td style="text-align:center;">Desconocido</td>
</tr>
<tr>
<td style="text-align:center;">0x89</td>
<td style="text-align:center;">1</td>
<td style="text-align:center;"><br /></td>
<td style="text-align:center;"><br /></td>
<td style="text-align:center;"><br /></td>
<td style="text-align:center;">Desconocido</td>
</tr>
<tr>
<td style="text-align:center;">0xA0</td>
<td style="text-align:center;">4</td>
<td style="text-align:center;">-</td>
<td style="text-align:center;">Evaluación de bits</td>
<td style="text-align:center;">PIDs soportados [0xA1...0xC0]</td>
<td style="text-align:center;">Confirmado</td>
</tr>
<tr>
<td style="text-align:center;">0xC0</td>
<td style="text-align:center;">4</td>
<td style="text-align:center;">-</td>
<td style="text-align:center;">Evaluación de bits</td>
<td style="text-align:center;">PIDs soportados [0xC1...0xE0]</td>
<td style="text-align:center;">Confirmado</td>
</tr>
<tr>
<td style="text-align:center;">0xE0</td>
<td style="text-align:center;">4</td>
<td style="text-align:center;">-</td>
<td style="text-align:center;">Evaluación de bits</td>
<td style="text-align:center;">PIDs soportados [0xE1...0x100]</td>
<td style="text-align:center;">Confirmado</td>
</tr>
<tr>
<td style="text-align:center;">0xE1</td>
<td style="text-align:center;">7</td>
<td style="text-align:center;"><br /></td>
<td style="text-align:center;"><br /></td>
<td style="text-align:center;"><br /></td>
<td style="text-align:center;">Desconocido</td>
</tr>
<tr>
<td style="text-align:center;">0xE2</td>
<td style="text-align:center;">5</td>
<td style="text-align:center;"><br /></td>
<td style="text-align:center;"><br /></td>
<td style="text-align:center;"><br /></td>
<td style="text-align:center;">Desconocido</td>
</tr>
</tbody></table>
<p>Detectado el PID responsable, sólo había que ir cambiando la temperatura y ver que dos bytes devolvía para ella. Y así obtuve:</p>
<p>0x640 para 16ºC, 0x60E para LO (el mínimo que admite el climatizador), 0xA8C para 27ºC, 0xBB8 para 30ºC y 0xBEA para HI (la máxima temperatura soportada por el climatizador).</p>
<p>Entonces decidí poner el modo dual, y empezar a modificar la temperatura del copiloto. Así puse en el climatizador 20ºC - 20ºC y obtuve 0x7D0. A continuación puse 20ºC - 23 ºC y obtuve el mismo 0x7D0.</p>
<p>Realicé distintas pruebas y todos dieron el mismo resultado. El PID <strong>0x29 </strong>del servicio <strong>0x21 </strong>de la ECU <strong>0x7C4 </strong>sólo cambia su respuesta cuando cambia la temperatura del piloto. La del copiloto no la tiene en cuenta. Habrá que buscarla en otro PID. </p>
<p>Pero en cualquier caso, la evidencia de que la ECU <strong>0x7C4 </strong>estaba relacionada con el sistema de climatización estaba obtenida.</p>
<p>Quedaba por encontrar las unidades en las que la ECU devolvía el valor. Y para mi sorpresa fue trivial. Y es que a 22ºC había devuelto 0x898, que al convertirlo a decimar resultó ser 2200. Para 18ºC había devuelto 0x708, que al convertirlo a decimal resulto 1800. Y así con todos los valores, la ECU devolvía la temperatura seleccionada multiplicada por 100. Para LO obtuve 1550 (15,5ºC) y para HI 3250 (32,5ºC).</p>
<p>Ya podemos por tanto, rellenar la primera entrada de la tabla.</p>
<table cellspacing="0" border="0">
<tbody><tr>
<td style="text-align:center;"><strong>PID</strong></td>
<td style="text-align:center;"><strong>Longitud (bytes)</strong></td>
<td style="text-align:center;"><strong>Unidades</strong></td>
<td style="text-align:center;"><strong>Cálculo</strong></td>
<td style="text-align:center;"><strong>Descripción</strong></td>
<td style="text-align:center;"><strong>Status</strong></td>
</tr>
<tr>
<td style="text-align:center;">0x29</td>
<td style="text-align:center;">2<br />A,B</td>
<td style="text-align:center;">ºC</td>
<td style="text-align:center;">(A*256+B)/100</td>
<td style="text-align:center;">Temperatura conductor demandada A/C</td>
<td style="text-align:center;">Confirmado</td>
</tr>
</tbody></table>
<p>Con paciencia, espero ir rellenado el resto de entradas en la tabla ... </p>http://blog.toyobaru.es/index.php?post/2021/03/14/0x7C4%2C-la-ECU-responsable-de-la-climatizaci%C3%B3n-del-toyobaru.#comment-formhttp://blog.toyobaru.es/index.php?feed/atom/comments/129Mensajes CAN orientados a eventourn:md5:d36f98e2df39b2369d2adfd63cd4debc2021-03-11T11:13:00+01:002021-03-11T11:34:20+01:00mapBRZBusCANGT86Técnica<p><strong>Descubro un nuevo mensaje CAN, y de un nuevo tipo, en el toyobaru.</strong></p>
<p>En una de mis pruebas, tenía el coche en estado <strong>APAGADO</strong> con el ordenador conectado, monitorizando el bus CAN por el que no pasaba ningún mensaje.</p> <p>Era algo que me extrañaba, por que en el cuadro de mandos la luz indicadora del bloqueo del motor parpadea constantemente en ese estado. </p>
<p style="text-align: center;">
<img src="https://data.toyobaru.es/gfx/blog/inmovilizador.webp" alt="Indicador inmovilizador del motor" title="Indicador inmovilizador del motor" align="center" />
</p>
<p>Pero esa información no parecía transmitirse por el bus CAN.</p>
<p>Entonces, no se muy bien porque, bloqueé la puerta del conductor accionando el pestillo. Y de repente, la vida volvió al bus CAN</p>
<pre>(1614012615.706796) can0 44D#4D00800000000000<br />(1614012615.721513) can0 442#4200800000000000<br />(1614012615.742407) can0 440#4000800000000000<br />(1614012615.806950) can0 44D#4D01800000000000<br />(1614012615.812033) can0 37B#5304000B00000000<br />(1614012615.821525) can0 442#4201800000000000<br />(1614012615.831579) can0 282#FE036CFEFE004000<br />(1614012615.842409) can0 440#4001800000000000<br />(1614012615.852092) can0 37B#5304000B00000000<br /><strong>...</strong></pre><p>durante poco más de 31 segundos, hasta que se desvaneció de nuevo</p>
<pre><strong>...<br /></strong>(1614012647.380677) can0 156#0000000000000000<br />(1614012647.390415) can0 152#809C0000000000C0<br />(1614012647.400227) can0 63B#0000230400003180<br />(1614012647.400625) can0 156#0000000000000000<br />(1614012647.410328) can0 152#80AC0000000000C0<br />(1614012647.410389) can0 442#4D32000000000000<br />(1614012647.412036) can0 282#FE036CFEFE004000</pre>
<p>Al empezar a analizar las tramas todo parecía normal, seguía un patrón similar que en el paso de <strong>APAGADO </strong>a '<strong>ACCESSORY'</strong>, hasta llegar a la quinta trama:</p>
<pre>(1614012615.812033) can0 37B#5304000B00000000</pre><p>esta era una nueva trama, hasta ahora nunca vista por mi: su CAN ID era <strong>0x37B</strong>.</p>
<p>Así que exploré la nueva trama, de nuevo con resultados novedosos.</p>
<pre>(1614012615.812033) can0 37B#5304000B00000000<br />(1614012615.852092) can0 37B#5304000B00000000<br />(1614012615.902223) can0 37B#5304000B00000000<br />(1614012615.952238) can0 37B#5304000B00000000<br />(1614012616.002373) can0 37B#5304000B00000000<br />(1614012616.052373) can0 37B#5304000B00000000<br />(1614012616.102463) can0 37B#5304000B00000000<br />(1614012616.152558) can0 37B#5304000B00000000<br />(1614012616.202635) can0 37B#5304000B00000000<br />(1614012616.252688) can0 37B#5304000B00000000<br />(1614012616.302803) can0 37B#5304000B00000000<br />(1614012616.353034) can0 37B#5304000B00000000<br />(1614012616.377927) can0 37B#5300000B00000000</pre><p>La trama presentaba una frecuencia elevada (20 Hz) pero no llegaba a estar presente en el bus más que unas pocas décimas de segundo. Luego desaparecía.</p>
<p>He conseguido reproducir la trama con facilidad. Basta bloquear o desbloquear las puertas, bien con el pestillo interior, bien con la llave, para que la trama aparezca. </p>
<p>Siempre con el mismo comportamiento: presenta una frecuencia de 20 Hz, y aparece unas cuantas veces, durante un tiempo variable que oscila entre las 3 y las 7 décimas de segundo, para desaparecer.</p>
<p>Después de este hallazgo empecé a hacer pruebas tratando de aflorar tráfico con el coche en estado <strong>APAGADO </strong>tratando de encontrar nuevos mensajes, con un éxito desigual.</p>
<p>Desigual, por que he encontrado formas de que el bus CAN vuelva a la vida en este estado. Pisando el pedal del embrague, o él del freno, por ejemplo, el trafico vuelve a activarse en el bus CAN aunque el coche esté en estado <strong>APAGADO</strong>.</p>
<p>Pero de momento no he logrado aflorar ningún nuevo mensaje asociado a otro tipo de evento que no sea el bloqueo o desbloqueo de puertas.</p>
<p>Aun así, esto me ha hecho ampliar mi tabla de mensajes CAN del toyobaru para incorporar mensajes CAN asociados a eventos.</p>
<p style="text-align: center;"><a href="https://data.toyobaru.es/docs/MAPA_CANID_GT86-BRZ_v2.pdf">Tabla de mensajes CAN GT86/BRZ v2</a></p>
<p>Y ha añadido una trama más a mi lista de tramas pendientes de analizar su contenido.</p>
<p>Veremos que nuevas sorpresas nos encontramos en el bus CAN en las próximas pruebas ...</p>http://blog.toyobaru.es/index.php?post/2021/03/11/Mensajes-CAN-orientados-a-evento#comment-formhttp://blog.toyobaru.es/index.php?feed/atom/comments/1280x7C0, la ECU encargada de mostrarnos informaciónurn:md5:ef7b170f13d478c040e02d13f8fa0dfd2021-03-09T22:10:00+01:002021-07-26T08:48:26+02:00mapBRZBusCANECUGT86OBDIITécnica<p>Seguimos explorando las posibilidades de obtener información de las distintas ECUs del toyobaru, y en esta ocasión vamos a encargarnos de la ECU que atiende las solicitudes en el CAN ID <strong>0x7C0</strong>.</p> <p>De acuerdo con informaciones que he encontrado al respecto, en foros de otros vehículos Toyota y Lexus, esta ECU es la responsable del cuadro de mandos. Y en el toyobaru parece que también es así.</p>
<p>Para empezar, elaboramos la tabla de identificadores disponibles bajo el servicio <strong>0x21 </strong>tal y como hemos hecho en entradas anteriores.</p>
<pre>>> 7C0: 02 21 00 00 00 00 00 00<br /><< 7C8: 06 61 00 00 00 60 01 00</pre><p>Empezamos mandando el PID <strong>0x00</strong>, y en función de su respuesta vamos obteniendo que PIDs son soportados por la ECU.</p>
<p>Una vez obtenidos los PIDs soportados, los solicitamos uno a uno y vamos obteniendo de la respuesta, la longitud de la misma, con lo cual podemos elaborar la siguiente tabla:</p>
<table cellspacing="0" border="0">
<tbody><tr>
<td style="text-align:center;"><strong>PID</strong></td>
<td style="text-align:center;"><strong>Longitud (bytes)</strong></td>
<td style="text-align:center;"><strong>Unidades</strong></td>
<td style="text-align:center;"><strong>Cálculo</strong></td>
<td style="text-align:center;"><strong>Descripción</strong></td>
<td style="text-align:center;"><strong>Status</strong></td>
</tr>
<tr>
<td style="text-align:center;">0x00</td>
<td style="text-align:center;">4</td>
<td style="text-align:center;">-</td>
<td style="text-align:center;">Evaluación de bits</td>
<td style="text-align:center;">PIDs soportados [0x01...0x20]</td>
<td style="text-align:center;">Confirmado</td>
</tr>
<tr>
<td style="text-align:center;">0x12</td>
<td style="text-align:center;">3</td>
<td style="text-align:center;"><br /></td>
<td style="text-align:center;"><br /></td>
<td style="text-align:center;"><br /></td>
<td style="text-align:center;">Desconocido</td>
</tr>
<tr>
<td style="text-align:center;">0x13</td>
<td style="text-align:center;">1</td>
<td style="text-align:center;"><br /></td>
<td style="text-align:center;"><br /></td>
<td style="text-align:center;"><br /></td>
<td style="text-align:center;">Desconocido</td>
</tr>
<tr>
<td style="text-align:center;">0x20</td>
<td style="text-align:center;">4</td>
<td style="text-align:center;">-</td>
<td style="text-align:center;">Evaluación de bits</td>
<td style="text-align:center;">PIDs soportados [0x21...0x40]</td>
<td style="text-align:center;">Confirmado</td>
</tr>
<tr>
<td style="text-align:center;">0x21</td>
<td style="text-align:center;">1</td>
<td style="text-align:center;"><br /></td>
<td style="text-align:center;"><br /></td>
<td style="text-align:center;"><br /></td>
<td style="text-align:center;">Desconocido</td>
</tr>
<tr>
<td style="text-align:center;">0x22</td>
<td style="text-align:center;">1</td>
<td style="text-align:center;"><br /></td>
<td style="text-align:center;"><br /></td>
<td style="text-align:center;"><br /></td>
<td style="text-align:center;">Desconocido</td>
</tr>
<tr>
<td style="text-align:center;">0x23</td>
<td style="text-align:center;">1</td>
<td style="text-align:center;"><br /></td>
<td style="text-align:center;"><br /></td>
<td style="text-align:center;"><br /></td>
<td style="text-align:center;">Desconocido</td>
</tr>
<tr>
<td style="text-align:center;">0x29</td>
<td style="text-align:center;">1</td>
<td style="text-align:center;"><br /></td>
<td style="text-align:center;"><br /></td>
<td style="text-align:center;"><br /></td>
<td style="text-align:center;">Desconocido</td>
</tr>
<tr>
<td style="text-align:center;">0x40</td>
<td style="text-align:center;">4</td>
<td style="text-align:center;">-</td>
<td style="text-align:center;">Evaluación de bits</td>
<td style="text-align:center;">PIDs soportados [0x41...0x60]</td>
<td style="text-align:center;">Confirmado</td>
</tr>
<tr>
<td style="text-align:center;">0x60</td>
<td style="text-align:center;">4</td>
<td style="text-align:center;">-</td>
<td style="text-align:center;">Evaluación de bits</td>
<td style="text-align:center;">PIDs soportados [0x61...0x80]</td>
<td style="text-align:center;">Confirmado</td>
</tr>
<tr>
<td style="text-align:center;">0x64</td>
<td style="text-align:center;">1</td>
<td style="text-align:center;"><br /></td>
<td style="text-align:center;"><br /></td>
<td style="text-align:center;"><br /></td>
<td style="text-align:center;">Desconocido</td>
</tr>
<tr>
<td style="text-align:center;">0x68</td>
<td style="text-align:center;">1</td>
<td style="text-align:center;"><br /></td>
<td style="text-align:center;"><br /></td>
<td style="text-align:center;"><br /></td>
<td style="text-align:center;">Desconocido</td>
</tr>
<tr>
<td style="text-align:center;">0x69</td>
<td style="text-align:center;">1</td>
<td style="text-align:center;"><br /></td>
<td style="text-align:center;"><br /></td>
<td style="text-align:center;"><br /></td>
<td style="text-align:center;">Desconocido</td>
</tr>
<tr>
<td style="text-align:center;">0x80</td>
<td style="text-align:center;">4</td>
<td style="text-align:center;">-</td>
<td style="text-align:center;">Evaluación de bits</td>
<td style="text-align:center;">PIDs soportados [0x81...0xA0]</td>
<td style="text-align:center;">Confirmado</td>
</tr>
<tr>
<td style="text-align:center;">0xA0</td>
<td style="text-align:center;">4</td>
<td style="text-align:center;">-</td>
<td style="text-align:center;">Evaluación de bits</td>
<td style="text-align:center;">PIDs soportados [0xA1...0xC0]</td>
<td style="text-align:center;">Confirmado</td>
</tr>
<tr>
<td style="text-align:center;">0xA1</td>
<td style="text-align:center;">1</td>
<td style="text-align:center;"><br /></td>
<td style="text-align:center;"><br /></td>
<td style="text-align:center;"><br /></td>
<td style="text-align:center;">Desconocido</td>
</tr>
<tr>
<td style="text-align:center;">0xA7</td>
<td style="text-align:center;">1</td>
<td style="text-align:center;"><br /></td>
<td style="text-align:center;"><br /></td>
<td style="text-align:center;"><br /></td>
<td style="text-align:center;">Desconocido</td>
</tr>
<tr>
<td style="text-align:center;">0xAD</td>
<td style="text-align:center;">1</td>
<td style="text-align:center;"><br /></td>
<td style="text-align:center;"><br /></td>
<td style="text-align:center;"><br /></td>
<td style="text-align:center;">Desconocido</td>
</tr>
<tr>
<td style="text-align:center;">0xC0</td>
<td style="text-align:center;">4</td>
<td style="text-align:center;">-</td>
<td style="text-align:center;">Evaluación de bits</td>
<td style="text-align:center;">PIDs soportados [0xC1...0xE0]</td>
<td style="text-align:center;">Confirmado</td>
</tr>
<tr>
<td style="text-align:center;">0xE0</td>
<td style="text-align:center;">4</td>
<td style="text-align:center;">-</td>
<td style="text-align:center;">Evaluación de bits</td>
<td style="text-align:center;">PIDs soportados [0xE1...0x100]</td>
<td style="text-align:center;">Confirmado</td>
</tr>
<tr>
<td style="text-align:center;">0xE1</td>
<td style="text-align:center;">7</td>
<td style="text-align:center;"><br /></td>
<td style="text-align:center;"><br /></td>
<td style="text-align:center;"><br /></td>
<td style="text-align:center;">Desconocido</td>
</tr>
<tr>
<td style="text-align:center;">0xE2</td>
<td style="text-align:center;">5</td>
<td style="text-align:center;"><br /></td>
<td style="text-align:center;"><br /></td>
<td style="text-align:center;"><br /></td>
<td style="text-align:center;">Desconocido</td>
</tr>
</tbody></table>
<p>Bien, pero ¿ como sabemos que esta ECU es la responsable de la gestión de la información ?</p>
<p>Encontré una entrada sobre un Lexus que afirmaba que esta ECU era la "ComboMeter ECU' y que tenía descrita una solicitud a esta ECU bajo el servicio <strong>0x21</strong>, en particular el PID <strong>0x29</strong>. Según dicha información, esta solicitud devolvía el depósito que restaba en el depósito en fracciones de medio litro. Esto era fácil de comprobar. Así que realicé la petición:</p>
<pre>>> 7C0: 02 21 29 00 00 00 00 00<br /><< 7C8: 03 61 29 20 00 00 00 00</pre>
<p>El servicio devolvía <strong>0x20</strong>, es decir 32. Que en fracciones de medio litro quería decir que tenía 16 litros en el depósito. Así que me fui para la gasolinera para llenar el depósito.</p>
<p>He repostado multitud de veces en esa gasolinera, siempre en la modalidad de autoservicio, pero ese día salió presto el gasolinero diciéndome: "<em>No se preocupe,déjeme a mi</em>". Ese día precisamente quería repostar yo, pero me dio la impresión de que el gasolinero quería ver el coche de cerca.</p>
<p>Le pedí que llenara el depósito y entré a pagar a su compañero. Nada más salir del surtidor con el coche, aparqué en la misma gasolinera, conecté el ordenador al puerto OBDII y reinvoqué al servicio.</p>
<pre>>> 7C0: 02 21 29 00 00 00 00 00<br /><< 7C8: 03 61 29 5F 00 00 00 00</pre><p>El servicio devolvió <strong>0x5F</strong>, es decir, 95. En unidades de medio litro eso supone 47,5 litros. Se supone que el depósito del toyobaru es de 50 litros, y estando lleno debería devolver <strong>0x64 </strong>(100 decimal).</p>
<p>Entonces miré el ticket, el cual decía que había repostado 31,75 litros.</p>
<p align="center"><img src="https://data.toyobaru.es/gfx/blog/ECU/recibo.webp" alt="Recibo" title="Recibo" style="font-size: 1.4rem;" /></p>
<p>Si originalmente tenía 16 litros y había repostado 31,75 litros entonces tenía en el depósito 47,75 litros. Eso, teniendo en cuenta los redondeos, ya cuadraba más.</p>
<p>Así que tiene toda la pinta de que la solicitud que funcionaba en aquel Lexus también funciona en nuestro toyobaru. Y me alegro un montón de ello, pues conocer con más precisión la cantidad de combustible que queda en el depósito es algo que siempre he buscado en los datos que circulan por el bus CAN, pero no lo he encontrado.</p>
<p>Pero con este servicio ya puedo obtenerlo.</p>
<p>Y además, podemos empezar a completar la tabla:</p>
<table cellspacing="0" border="0">
<tbody><tr>
<td style="text-align:center;"><strong>PID</strong></td>
<td style="text-align:center;"><strong>Longitud (bytes)</strong></td>
<td style="text-align:center;"><strong>Unidades</strong></td>
<td style="text-align:center;"><strong>Cálculo</strong></td>
<td style="text-align:center;"><strong>Descripción</strong></td>
<td style="text-align:center;"><strong>Status</strong></td>
</tr>
<tr>
<td style="text-align:center;">0x29</td>
<td style="text-align:center;">1 (A)</td>
<td style="text-align:center;">litros</td>
<td style="text-align:center;">A / 2</td>
<td style="text-align:center;">Combustible en depósito</td>
<td style="text-align:center;">Confirmado</td>
</tr>
</tbody></table>
Intentaré completarla, a ver si hay suerte ...http://blog.toyobaru.es/index.php?post/2021/03/09/0x7C0%2C-la-ECU-encargada-de-mostrarnos-informaci%C3%B3n#comment-formhttp://blog.toyobaru.es/index.php?feed/atom/comments/1270x7E0, la ECU del motorurn:md5:9a6ff23b2cbb0a80e43f07d8c5f957af2021-03-09T11:35:00+01:002021-03-09T12:10:20+01:00mapBRZBusCANECUFA20DGT86OBDIITécnica<p><strong>Exploramos las posibilidades de obtener información de la ECU del motor a través del servicio 0x21.</strong></p>
<p>La ECU <strong>0x7E0 </strong>ya nos es familiar. Por norma, la ECU del motor debe presentarse en el PID <strong>0x7E0 </strong>y responder a varios servicios OBDII, como el <strong>0x01 </strong>o el <strong>0x09 </strong>-entre otros- que ya hemos visto en este blog.</p> <p>Hemos visto también, que el servicio <strong>0x01 </strong>es respondido tanto desde el CAN ID <strong>0x720 </strong>como desde el CAN ID <strong>0x7E0</strong>, pero sorprendentemente bajo el identificador <strong>0x720 </strong>no responde ni al servicio <strong>0x09 </strong>ni al servicio <strong>0x21</strong>, cosa que si hace bajo el CAN ID <strong>0x7E0</strong>.</p>
<p>En este artículo del blog, vamos a explorar esta ECU, de forma análoga a como hemos hecho con la ECU <strong>0x7B0</strong>, para obtener que PIDs están disponibles bajo el servicio <strong>0x21</strong> y empezar a tratar de dilucidar que información pueden ofrecer.</p>
<p>No detallo el método. Es análogo al comentado en la entrada anterior. Solicitamos a la ECU <strong>0x7E0 </strong>el PID <strong>0x00 </strong>bajo el servicio <strong>0x21:</strong></p>
<pre>>> 7E0: 02 21 00 00 00 00 00 00<br /><< 7E8: 06 61 00 BC 00 00 01 00</pre>
<p>y de su respuesta vamos deduciendo los PIDs disponibles.</p>
<p>Una vez elaborada la lista de PIDs, solicitamos uno a uno dichos PIDs a la ECU, para obtener la longitud que devuelven y poder elaborar la siguiente tabla.</p>
<table cellspacing="0" border="0">
<tbody><tr>
<td style="text-align:center;"><strong>PID</strong></td>
<td style="text-align:center;"><strong>Longitud<br />(bytes)</strong></td>
<td style="text-align:center;"><strong>Unidades</strong></td>
<td style="text-align:center;"><strong>Cálculo</strong></td>
<td style="text-align:center;"><strong>Descripción</strong></td>
<td style="text-align:center;"><strong>Status</strong></td>
</tr>
<tr>
<td style="text-align:center;">0x00</td>
<td style="text-align:center;">4</td>
<td style="text-align:center;">-</td>
<td style="text-align:center;">Evaluación de bits</td>
<td style="text-align:center;">PIDs soportados [0x01...0x20]</td>
<td style="text-align:center;">Confirmado</td>
</tr>
<tr>
<td style="text-align:center;">0x01</td>
<td style="text-align:center;">29</td>
<td style="text-align:center;"><br /></td>
<td style="text-align:center;"><br /></td>
<td style="text-align:center;"><br /></td>
<td style="text-align:center;">Desconocido</td>
</tr>
<tr>
<td style="text-align:center;">0x03</td>
<td style="text-align:center;">5</td>
<td style="text-align:center;"><br /></td>
<td style="text-align:center;"><br /></td>
<td style="text-align:center;"><br /></td>
<td style="text-align:center;">Desconocido</td>
</tr>
<tr>
<td style="text-align:center;">0x04</td>
<td style="text-align:center;">12</td>
<td style="text-align:center;"><br /></td>
<td style="text-align:center;"><br /></td>
<td style="text-align:center;"><br /></td>
<td style="text-align:center;">Desconocido</td>
</tr>
<tr>
<td style="text-align:center;">0x05</td>
<td style="text-align:center;">4</td>
<td style="text-align:center;"><br /></td>
<td style="text-align:center;"><br /></td>
<td style="text-align:center;"><br /></td>
<td style="text-align:center;">Desconocido</td>
</tr>
<tr>
<td style="text-align:center;">0x06</td>
<td style="text-align:center;">13</td>
<td style="text-align:center;"><br /></td>
<td style="text-align:center;"><br /></td>
<td style="text-align:center;"><br /></td>
<td style="text-align:center;">Desconocido</td>
</tr>
<tr>
<td style="text-align:center;">0x20</td>
<td style="text-align:center;">4</td>
<td style="text-align:center;">-</td>
<td style="text-align:center;">Evaluación de bits</td>
<td style="text-align:center;">PIDs soportados [0x21...0x40]</td>
<td style="text-align:center;">Confirmado</td>
</tr>
<tr>
<td style="text-align:center;">0x21</td>
<td style="text-align:center;">12</td>
<td style="text-align:center;"><br /></td>
<td style="text-align:center;"><br /></td>
<td style="text-align:center;"><br /></td>
<td style="text-align:center;">Desconocido</td>
</tr>
<tr>
<td style="text-align:center;">0x22</td>
<td style="text-align:center;">3</td>
<td style="text-align:center;"><br /></td>
<td style="text-align:center;"><br /></td>
<td style="text-align:center;"><br /></td>
<td style="text-align:center;">Desconocido</td>
</tr>
<tr>
<td style="text-align:center;">0x23</td>
<td style="text-align:center;">2</td>
<td style="text-align:center;"><br /></td>
<td style="text-align:center;"><br /></td>
<td style="text-align:center;"><br /></td>
<td style="text-align:center;">Desconocido</td>
</tr>
<tr>
<td style="text-align:center;">0x25</td>
<td style="text-align:center;">6</td>
<td style="text-align:center;"><br /></td>
<td style="text-align:center;"><br /></td>
<td style="text-align:center;"><br /></td>
<td style="text-align:center;">Desconocido</td>
</tr>
<tr>
<td style="text-align:center;">0x26</td>
<td style="text-align:center;">6</td>
<td style="text-align:center;"><br /></td>
<td style="text-align:center;"><br /></td>
<td style="text-align:center;"><br /></td>
<td style="text-align:center;">Desconocido</td>
</tr>
<tr>
<td style="text-align:center;">0x33</td>
<td style="text-align:center;">7</td>
<td style="text-align:center;"><br /></td>
<td style="text-align:center;"><br /></td>
<td style="text-align:center;"><br /></td>
<td style="text-align:center;">Desconocido</td>
</tr>
<tr>
<td style="text-align:center;">0x37</td>
<td style="text-align:center;">18</td>
<td style="text-align:center;"><br /></td>
<td style="text-align:center;"><br /></td>
<td style="text-align:center;"><br /></td>
<td style="text-align:center;">Desconocido</td>
</tr>
<tr>
<td style="text-align:center;">0x39</td>
<td style="text-align:center;">5</td>
<td style="text-align:center;"><br /></td>
<td style="text-align:center;"><br /></td>
<td style="text-align:center;"><br /></td>
<td style="text-align:center;">Desconocido</td>
</tr>
<tr>
<td style="text-align:center;">0x3A</td>
<td style="text-align:center;">9</td>
<td style="text-align:center;"><br /></td>
<td style="text-align:center;"><br /></td>
<td style="text-align:center;"><br /></td>
<td style="text-align:center;">Desconocido</td>
</tr>
<tr>
<td style="text-align:center;">0x3C</td>
<td style="text-align:center;">16</td>
<td style="text-align:center;"><br /></td>
<td style="text-align:center;"><br /></td>
<td style="text-align:center;"><br /></td>
<td style="text-align:center;">Desconocido</td>
</tr>
<tr>
<td style="text-align:center;">0x40</td>
<td style="text-align:center;">4</td>
<td style="text-align:center;">-</td>
<td style="text-align:center;">Evaluación de bits</td>
<td style="text-align:center;">PIDs soportados [0x41...0x60]</td>
<td style="text-align:center;">Confirmado</td>
</tr>
<tr>
<td style="text-align:center;">0x41</td>
<td style="text-align:center;">18</td>
<td style="text-align:center;"><br /></td>
<td style="text-align:center;"><br /></td>
<td style="text-align:center;"><br /></td>
<td style="text-align:center;">Desconocido</td>
</tr>
<tr>
<td style="text-align:center;">0x42</td>
<td style="text-align:center;">10</td>
<td style="text-align:center;"><br /></td>
<td style="text-align:center;"><br /></td>
<td style="text-align:center;"><br /></td>
<td style="text-align:center;">Desconocido</td>
</tr>
<tr>
<td style="text-align:center;">0x44</td>
<td style="text-align:center;">36</td>
<td style="text-align:center;"><br /></td>
<td style="text-align:center;"><br /></td>
<td style="text-align:center;"><br /></td>
<td style="text-align:center;">Desconocido</td>
</tr>
<tr>
<td style="text-align:center;">0x45</td>
<td style="text-align:center;">4</td>
<td style="text-align:center;"><br /></td>
<td style="text-align:center;"><br /></td>
<td style="text-align:center;"><br /></td>
<td style="text-align:center;">Desconocido</td>
</tr>
<tr>
<td style="text-align:center;">0x51</td>
<td style="text-align:center;">29</td>
<td style="text-align:center;"><br /></td>
<td style="text-align:center;"><br /></td>
<td style="text-align:center;"><br /></td>
<td style="text-align:center;">Desconocido</td>
</tr>
<tr>
<td style="text-align:center;">0x52</td>
<td style="text-align:center;">8</td>
<td style="text-align:center;"><br /></td>
<td style="text-align:center;"><br /></td>
<td style="text-align:center;"><br /></td>
<td style="text-align:center;">Desconocido</td>
</tr>
<tr>
<td style="text-align:center;">0x54</td>
<td style="text-align:center;">10</td>
<td style="text-align:center;"><br /></td>
<td style="text-align:center;"><br /></td>
<td style="text-align:center;"><br /></td>
<td style="text-align:center;">Desconocido</td>
</tr>
<tr>
<td style="text-align:center;">0x55</td>
<td style="text-align:center;">8</td>
<td style="text-align:center;"><br /></td>
<td style="text-align:center;"><br /></td>
<td style="text-align:center;"><br /></td>
<td style="text-align:center;">Desconocido</td>
</tr>
<tr>
<td style="text-align:center;">0x60</td>
<td style="text-align:center;">4</td>
<td style="text-align:center;">-</td>
<td style="text-align:center;">Evaluación de bits</td>
<td style="text-align:center;">PIDs soportados [0x61...0x80]</td>
<td style="text-align:center;">Confirmado</td>
</tr>
<tr>
<td style="text-align:center;">0x80</td>
<td style="text-align:center;">4</td>
<td style="text-align:center;">-</td>
<td style="text-align:center;">Evaluación de bits</td>
<td style="text-align:center;">PIDs soportados [0x81...0xA0]</td>
<td style="text-align:center;">Confirmado</td>
</tr>
<tr>
<td style="text-align:center;">0xA0</td>
<td style="text-align:center;">4</td>
<td style="text-align:center;">-</td>
<td style="text-align:center;">Evaluación de bits</td>
<td style="text-align:center;">PIDs soportados [0xA1...0xC0]</td>
<td style="text-align:center;">Confirmado</td>
</tr>
<tr>
<td style="text-align:center;">0xC0</td>
<td style="text-align:center;">4</td>
<td style="text-align:center;">-</td>
<td style="text-align:center;">Evaluación de bits</td>
<td style="text-align:center;">PIDs soportados [0xC1...0xE0]</td>
<td style="text-align:center;">Confirmado</td>
</tr>
<tr>
<td style="text-align:center;">0xC1</td>
<td style="text-align:center;">19</td>
<td style="text-align:center;"><br /></td>
<td style="text-align:center;"><br /></td>
<td style="text-align:center;"><br /></td>
<td style="text-align:center;">Desconocido</td>
</tr>
<tr>
<td style="text-align:center;">0xC2</td>
<td style="text-align:center;">13</td>
<td style="text-align:center;"><br /></td>
<td style="text-align:center;"><br /></td>
<td style="text-align:center;"><br /></td>
<td style="text-align:center;">Desconocido</td>
</tr>
<tr>
<td style="text-align:center;">0xE0</td>
<td style="text-align:center;">4</td>
<td style="text-align:center;">-</td>
<td style="text-align:center;">Evaluación de bits</td>
<td style="text-align:center;">PIDs soportados [0xE1...0x100]</td>
<td style="text-align:center;">Confirmado</td>
</tr>
<tr>
<td style="text-align:center;">0xE1</td>
<td style="text-align:center;">8</td>
<td style="text-align:center;"><br /></td>
<td style="text-align:center;"><br /></td>
<td style="text-align:center;"><br /></td>
<td style="text-align:center;">Desconocido</td>
</tr>
<tr>
<td style="text-align:center;">0xE2</td>
<td style="text-align:center;">5</td>
<td style="text-align:center;"><br /></td>
<td style="text-align:center;"><br /></td>
<td style="text-align:center;"><br /></td>
<td style="text-align:center;">Desconocido</td>
</tr>
<tr>
<td style="text-align:center;">0xE3</td>
<td style="text-align:center;">2</td>
<td style="text-align:center;"><br /></td>
<td style="text-align:center;"><br /></td>
<td style="text-align:center;"><br /></td>
<td style="text-align:center;">Desconocido</td>
</tr>
</tbody></table>
<p>Llama la atención la longitud de los datos devueltos con un buen número de PIDs devolviendo largas cadenas de datos (hasta 36 bytes en el caso del PID <strong>0x44</strong>). No será fácil descodificarlos.</p>
<p>De momento, y con ayuda de la información que encontré en un foro sobre el Toyota Prius, he podido descodificar parcialmente el contenido de la respuesta al PID <strong>0xC1</strong>, que contiene información sobre el modelo del coche y del motor que monta, y que parece mostrar ciertas similitudes con lo que manda la ECU de mi coche.</p>
<p>Si solicitamos ese PID</p>
<pre>>> 7E0: 02 21 C1 00 00 00 00 00<br /><< 7E8: 10 15 61 C1 5A 23 36 23<br />>> 7E0: 30 00 00 00 00 00 00 00<br /><< 7E8: 21 23 23 38 46 41 32 30<br /><< 7E8: 22 20 20 04 01 57 71 01<br /><< 7E8: 23 00 00 00 00 00 00 00</pre>
<p>Decodificando el mensaje de respuesta obtenemos que los datos recibidos son: </p>
<pre>5A 23 36 23 23 23 38 46 41 32 30 20 20 04 01 57 71 01 00</pre>
<p>Y si los representamos en ASCII tenemos:</p>
<pre> Z # 6 # # # 8 F A 2 0 · · W q · ·</pre>
<p>Según he leído, en un Prius este mismo servicio devuelve el identificador del modelo del coche en las 7 primeras posiciones. En mi coche devuelve: <strong>Z#6###8</strong>. Y mi coche tiene como VSD el código <strong>ZN6L81</strong>, con el cual se puede apreciar una cierta similitud. No se muy bien como codifica Toyota el modelo. Habría que hacer pruebas con más toyobarus para ver que devuelven en esa respuesta.</p>
<p>Los siguientes 6 caracteres identifican el motor. En este caso parece que no hay duda pues se ha recibido un claro "<strong>FA20 </strong>". Eso si, me ha llamado la atención que tratándose mi coche de un GT86, no haya enviado "<strong>4U-GSE</strong>", que es la codificación que usa Toyota para el FA20 de Subaru.</p>
<p>El siguiente byte (<strong>0x04</strong>) representaría el número de cilindros del motor.</p>
<p>Del decimoquinto byte (<strong>0x01</strong>) no hay información. Puede ser cualquier cosa.</p>
<p>El siguiente byte (<strong>0x57</strong>), la información que he encontrado dice que hace referencia al destino del coche, pero no se muy bien que se refiere (supongo que será la codificación del destino, no se si será España, Europa, o algo así), así que de momento dejaremos la información en cuarentena hasta que averigüe más cosas.</p>
<p>El decimoséptimo byte (<strong>0x71</strong>) representaría el año de fabricación del coche, contado desde 1.900. Esto encaja, por que mi coche es del 2013, y <strong>0x71 </strong>es 113 en decimal, que sumado a 1900 nos da 2013.</p>
<p>De los dos siguientes bytes no tengo información.</p>
<p>Así que con esta información, podemos rellenar la primera entrada de la tabla</p>
<table>
<tbody><tr>
<td style="text-align:center;"><strong>PID</strong></td>
<td style="text-align:center;"><strong>Longitud<br />(bytes)</strong></td>
<td style="text-align:center;"><strong>Unidades</strong></td>
<td style="text-align:center;"><strong>Cálculo</strong></td>
<td style="text-align:center;"><strong>Descripción</strong></td>
<td style="text-align:center;"><strong>Status</strong></td>
</tr>
<tr>
<td style="text-align:center;">0xC1</td>
<td style="text-align:center;">19<br />ABCDEFGHIJKLMNOPQRS</td>
<td style="text-align:center;">-</td>
<td style="text-align:center;">ASCII<br />ASCII<br />N<br />¿?<br />¿?<br />1900 + Q<br />¿?<br />¿?</td>
<td style="text-align:center;">ABCDEFG → Modelo<br />HIJKLM → Motor<br />N → Número de Cilindros<br />O → ¿?<br />P → ¿destino?<br />Q → Año de fabricación<br />R → ¿?<br />S → ¿?</td>
<td style="text-align:center;">Sospecha<br />Confirmado<br />Confirmado<br />Desconocido<br />Sospecha<br />Confirmado<br />Desconocido<br />Desconocido</td>
</tr>
</tbody></table>
<p>Habrá que seguir analizando datos obtenidos e informaciones que circulan por ahí, para ir completando la tabla poco a poco ...</p>http://blog.toyobaru.es/index.php?post/2021/03/09/0x7E0%2C-la-ecu-del-motor#comment-formhttp://blog.toyobaru.es/index.php?feed/atom/comments/1260x7B0, la ECU responsable del ABS y del control de tracciónurn:md5:ccad89ace0634f8b241bb5d7b022e4082021-03-08T15:41:00+01:002021-03-08T17:37:50+01:00mapABSBRZBusCANECUGT86OBDIITRCTécnica<p><strong>Iniciamos la ardua tarea de tratar de obtener información de las distintas ECUs del toyobaru.</strong></p>
<p>Obtener información sobre las ECUs de un vehículo no es sencillo si no se tiene la información del fabricante. Los protocolos de diagnóstico dejan mucha libertad a los fabricantes para que usen múltiples servicios e identificadores propios y apenas normalizan nada. Y esa libertad la usan plenamente y guardan celosamente la información.</p> <p>Así que solo cabe rebuscar cualquier información que se haya podido filtrar por internet y someter a la ECU a distintas técnicas de 'ingeniería inversa' para tratar de obtener algo de información.</p>
<p>Pese a que es una tarea complicada, me he propuesto intentar avanzar en el conocimiento de las ECUs -cosa que no se si lograré- e ir comentando los avances que realice en este blog.</p>
<p>Y después de buscar información sobre otros modelos de Toyota y Lexus, y realizar mis primeras pruebas, creo haber identificado la ECU que responde al CAN ID <strong>0x7B0</strong> como la ECU responsable del sistema ABS y del control de tracción.</p>
<p>Por un lado, y según la escasa información que circula por internet, el identificador <strong>0x7B0</strong> suele ser asignado con cierta frecuencia por Toyota (y Lexus) a dicha ECU, en otros vehículos.</p>
<p>Esto en si mismo no serviría más que como hipótesis. Para asegurar que la ECU gestiona el ABS y el control de tracción deberíamos obtener alguna otra evidencia.</p>
<p>Y resulta que la primera información que he conseguido obtener de la ECU <strong>0x7B0</strong> -como veremos más adelante- ha sido la velocidad de las ruedas, que es una información que maneja dicha ECU.</p>
<p>Eso me ha llevado a confirmar que también en nuestros GT86 y BRZ, la ECU <strong>0x7B0</strong> se encarga de gestionar estos sistemas.</p>
<p>Pero vayamos por partes. En la entrada anterior hemos visto como identificábamos las direcciones de las ECUs mediante la respuesta al servicio UDS <strong>0x21</strong>. Así, si solicitamos el servicio <strong>0x21</strong> con PID <strong>0x00</strong>.</p>
<pre>>> 7B0: 02 21 00 00 00 00 00 00
</pre>
<p>la ECU nos devuelve</p>
<pre><< 7B8: 06 61 00 3D 50 00 03 00
</pre>
<p>La respuesta resulta familiar para alguien conocedor de los protocolos OBDII, pues en particular esta respuesta tiene la misma forma con la que se contesta al PID <strong>0x00</strong> en otros servicios normalizados (como el <strong>0x01</strong> o el <strong>0x09</strong> que hemos visto en entradas anteriores de este blog)</p>
<p>Decodificando esa respuesta de forma normalizada, obtenemos que la centralita dice soportar los PIDs <strong>0x03</strong>, <strong>0x04</strong>, <strong>0x05</strong>, <strong>0x06</strong>, <strong>0x08</strong>, <strong>0x0A</strong>, <strong>0x0C</strong>, <strong>0x1F</strong> y <strong>0x20</strong> entre los primeros 32 PIDs.</p>
<p>Si el PID <strong>0x20</strong> se comporta de la misma forma que en un servicio 0BDII, su invocación nos dirá que PIDs están soportados en los siguientes 32 PIDs.</p>
<p>Probamos y obtenemos:</p>
<pre>>> 7B0: 02 21 20 00 00 00 00 00
<< 7B8: 06 61 20 80 00 00 CB 00
</pre>
<p>La decodificación de la respuesta dice que la centralita también soporta los PIDs <strong>0x21</strong>, <strong>0x39</strong>, <strong>0x3A</strong>, <strong>0x3D</strong>, <strong>0x3F</strong>, y <strong>0x40</strong>.</p>
<p>Y el procedimiento se repite para el PID <strong>0x40</strong>. Solicitándoselo a la ECU para el servicio <strong>0x21</strong> obtenemos esta vez:</p>
<pre>>> 7B0: 02 21 40 00 00 00 00 00
<< 7B8: 06 61 40 E6 00 00 C3 00
</pre>
<p>Cuya decodificación indica que los PIDs <strong>0x41</strong>, <strong>0x42</strong>, <strong>0x43</strong>, <strong>0x46</strong>, <strong>0x47</strong>, <strong>0x59</strong>, <strong>0x5A</strong>, <strong>0x5F</strong> y <strong>0x60</strong>. Y con éste último repetimos el proceso:</p>
<pre>>> 7B0: 02 21 60 00 00 00 00 00
<< 7B8: 06 61 60 00 00 00 01 00
</pre>
<p>La decodificación esta vez indica que solo se soporta el PID <strong>0x80</strong>, con el que reiteramos la operación:</p>
<pre>>> 7B0: 02 21 80 00 00 00 00 00
<< 7B8: 06 61 80 00 00 00 01 00
</pre>
<p>Devuelve el mismo valor que la invocación al PID <strong>0x60</strong>, indicando en este caso que únicamente está soportado el PID<strong> 0xA0</strong>.</p>
<p>Repetimos la operación, ahora con el PID <strong>0xA0</strong>, y obtenemos:</p>
<pre>>> 7B0: 02 21 A0 00 00 00 00 00
<< 7B8: 06 61 A0 14 00 00 05 00
</pre>
<p>Esta vez la decodificación señala a los PIDs <strong>0xA4</strong>, <strong>0xA6</strong>, <strong>0xBE</strong> y <strong>0xC0</strong> como PIDs soportados.</p>
<p>Solicitamos ahora el PID 0xC0</p>
<pre>>> 7B0: 02 21 C0 00 00 00 00 00
<< 7B8: 06 61 C0 00 00 00 01 00
</pre>
<p>obteniendo como respuesta el mismo valor que obtuvimos a la consulta al PID <strong>0x60</strong> y <strong>0x80</strong> y que indica que sólo el último PID de la serie (el <strong>0xE0</strong> en este caso) está soportado.</p>
<p>Solicitamos el PID <strong>0xE0</strong> y obtenemos</p>
<pre>>> 7B0: 02 21 E0 00 00 00 00 00
<< 7B8: 06 61 E0 C0 00 C0 00 00
</pre>
<p>cuya decodificación confirma a <strong>0xE1</strong>, <strong>0xE2</strong>, <strong>0xF1</strong> y <strong>0xF2</strong> como PIDs soportados.</p>
<p>Con esta última invocación a la ECU hemos finalizado el proceso de identificación de los PIDs que esta ECU soporta bajo el servicio <strong>0x21</strong>.</p>
<p>A continuación paso a solicitar a la ECU todos y cada uno de los PIDs que ha dicho soportar. No tengo ni idea de lo que va a devolver, pero quiero averiguar cuantos datos devuelve cada PID y confirmar que las respuestas, por lo menos, están dentro del protocolo de transporte ISO 15765-2 tal y como ocurre para los servicios OBDII.</p>
<p>Y así es también para este servicio, tanto en las tramas cortas (de 5 bytes de datos o menos) que requieren solo un mensaje CAN</p>
<pre>>> 7B0: 02 21 03 00 00 00 00 00
<< 7B8: 06 61 03 00 00 00 00 00
</pre>
<p>como para las tramas de datos largas, que requieren varias tramas y un diálogo con la ECU.</p>
<pre>>> 7B0: 02 21 05 00 00 00 00 00
<< 7B8: 10 09 61 05 7F 82 02 B3
>> 7B0: 30 00 00 00 00 00 00 00
<< 7B8: 21 00 01 60 00 00 00 00
</pre>
<p>Esto nos permite averiguar cuantos datos va a devolver cada PID y empezar a elaborar la siguiente tabla</p>
<p><strong>ECU 0x7B0. Servicio 0x21</strong></p>
<table cellspacing="0" border="1">
<tbody>
<tr>
<td style="text-align:center;"><strong>PID</strong></td>
<td style="text-align:center;"><strong>Longitud<br />(bytes)</strong></td>
<td style="text-align:center;"><strong>Unidades</strong></td>
<td style="text-align:center;"><strong>Cálculo</strong></td>
<td style="text-align:center;"><strong>Descripción</strong></td>
<td style="text-align:center;"><strong>Status</strong></td>
</tr>
<tr>
<td style="text-align:center;">0x00</td>
<td style="text-align:center;">4</td>
<td style="text-align:center;">-</td>
<td style="text-align:center;">Evaluación de bits</td>
<td style="text-align:center;">PIDs soportados [0x01...0x20]</td>
<td style="text-align:center;"><strong>Confirmado</strong></td>
</tr>
<tr>
<td style="text-align:center;">0x03</td>
<td style="text-align:center;">4</td>
<td style="text-align:center;"><br /></td>
<td style="text-align:center;"><br /></td>
<td style="text-align:center;"><br /></td>
<td style="text-align:center;">Desconocido</td>
</tr>
<tr>
<td style="text-align:center;">0x04</td>
<td style="text-align:center;">1</td>
<td style="text-align:center;"><br /></td>
<td style="text-align:center;"><br /></td>
<td style="text-align:center;"><br /></td>
<td style="text-align:center;">Desconocido</td>
</tr>
<tr>
<td style="text-align:center;">0x05</td>
<td style="text-align:center;">7</td>
<td style="text-align:center;"><br /></td>
<td style="text-align:center;"><br /></td>
<td style="text-align:center;"><br /></td>
<td style="text-align:center;">Desconocido</td>
</tr>
<tr>
<td style="text-align:center;">0x06</td>
<td style="text-align:center;">3</td>
<td style="text-align:center;"><br /></td>
<td style="text-align:center;"><br /></td>
<td style="text-align:center;"><br /></td>
<td style="text-align:center;">Desconocido</td>
</tr>
<tr>
<td style="text-align:center;">0x08</td>
<td style="text-align:center;">1</td>
<td style="text-align:center;"><br /></td>
<td style="text-align:center;"><br /></td>
<td style="text-align:center;"><br /></td>
<td style="text-align:center;">Desconocido</td>
</tr>
<tr>
<td style="text-align:center;">0x0A</td>
<td style="text-align:center;">1</td>
<td style="text-align:center;"><br /></td>
<td style="text-align:center;"><br /></td>
<td style="text-align:center;"><br /></td>
<td style="text-align:center;">Desconocido</td>
</tr>
<tr>
<td style="text-align:center;">0x0C</td>
<td style="text-align:center;">1</td>
<td style="text-align:center;"><br /></td>
<td style="text-align:center;"><br /></td>
<td style="text-align:center;"><br /></td>
<td style="text-align:center;">Desconocido</td>
</tr>
<tr>
<td style="text-align:center;">0x1F</td>
<td style="text-align:center;">1</td>
<td style="text-align:center;"><br /></td>
<td style="text-align:center;"><br /></td>
<td style="text-align:center;"><br /></td>
<td style="text-align:center;">Desconocido</td>
</tr>
<tr>
<td style="text-align:center;">0x20</td>
<td style="text-align:center;">4</td>
<td style="text-align:center;"><strong>-</strong></td>
<td style="text-align:center;">Evaluación de bits</td>
<td style="text-align:center;">PIDs soportados [0x21...0x40]</td>
<td style="text-align:center;"><strong>Confirmado</strong></td>
</tr>
<tr>
<td style="text-align:center;">0x21</td>
<td style="text-align:center;">1</td>
<td style="text-align:center;"><br /></td>
<td style="text-align:center;"><br /></td>
<td style="text-align:center;"><br /></td>
<td style="text-align:center;">Desconocido</td>
</tr>
<tr>
<td style="text-align:center;">0x39</td>
<td style="text-align:center;">1</td>
<td style="text-align:center;"><br /></td>
<td style="text-align:center;"><br /></td>
<td style="text-align:center;"><br /></td>
<td style="text-align:center;">Desconocido</td>
</tr>
<tr>
<td style="text-align:center;">0x3A</td>
<td style="text-align:center;">1</td>
<td style="text-align:center;"><br /></td>
<td style="text-align:center;"><br /></td>
<td style="text-align:center;"><br /></td>
<td style="text-align:center;">Desconocido</td>
</tr>
<tr>
<td style="text-align:center;">0x3D</td>
<td style="text-align:center;">2</td>
<td style="text-align:center;"><br /></td>
<td style="text-align:center;"><br /></td>
<td style="text-align:center;"><br /></td>
<td style="text-align:center;">Desconocido</td>
</tr>
<tr>
<td style="text-align:center;">0x3F</td>
<td style="text-align:center;">2</td>
<td style="text-align:center;"><br /></td>
<td style="text-align:center;"><br /></td>
<td style="text-align:center;"><br /></td>
<td style="text-align:center;">Desconocido</td>
</tr>
<tr>
<td style="text-align:center;">0x40</td>
<td style="text-align:center;">4</td>
<td style="text-align:center;"><strong>-</strong></td>
<td style="text-align:center;">Evaluación de bits</td>
<td style="text-align:center;">PIDs soportados [0x41...0x60]</td>
<td style="text-align:center;"><strong>Confirmado</strong></td>
</tr>
<tr>
<td style="text-align:center;">0x41</td>
<td style="text-align:center;">2</td>
<td style="text-align:center;"><br /></td>
<td style="text-align:center;"><br /></td>
<td style="text-align:center;"><br /></td>
<td style="text-align:center;">Desconocido</td>
</tr>
<tr>
<td style="text-align:center;">0x42</td>
<td style="text-align:center;">4</td>
<td style="text-align:center;"><br /></td>
<td style="text-align:center;"><br /></td>
<td style="text-align:center;"><br /></td>
<td style="text-align:center;">Desconocido</td>
</tr>
<tr>
<td style="text-align:center;">0x43</td>
<td style="text-align:center;">2</td>
<td style="text-align:center;"><br /></td>
<td style="text-align:center;"><br /></td>
<td style="text-align:center;"><br /></td>
<td style="text-align:center;">Desconocido</td>
</tr>
<tr>
<td style="text-align:center;">0x46</td>
<td style="text-align:center;">3</td>
<td style="text-align:center;"><br /></td>
<td style="text-align:center;"><br /></td>
<td style="text-align:center;"><br /></td>
<td style="text-align:center;">Desconocido</td>
</tr>
<tr>
<td style="text-align:center;">0x47</td>
<td style="text-align:center;">5</td>
<td style="text-align:center;"><br /></td>
<td style="text-align:center;"><br /></td>
<td style="text-align:center;"><br /></td>
<td style="text-align:center;">Desconocido</td>
</tr>
<tr>
<td style="text-align:center;">0x59</td>
<td style="text-align:center;">1</td>
<td style="text-align:center;"><br /></td>
<td style="text-align:center;"><br /></td>
<td style="text-align:center;"><br /></td>
<td style="text-align:center;">Desconocido</td>
</tr>
<tr>
<td style="text-align:center;">0x5A</td>
<td style="text-align:center;">2</td>
<td style="text-align:center;"><br /></td>
<td style="text-align:center;"><br /></td>
<td style="text-align:center;"><br /></td>
<td style="text-align:center;">Desconocido</td>
</tr>
<tr>
<td style="text-align:center;">0x5F</td>
<td style="text-align:center;">1</td>
<td style="text-align:center;"><br /></td>
<td style="text-align:center;"><br /></td>
<td style="text-align:center;"><br /></td>
<td style="text-align:center;">Desconocido</td>
</tr>
<tr>
<td style="text-align:center;">0x60</td>
<td style="text-align:center;">4</td>
<td style="text-align:center;"><strong>-</strong></td>
<td style="text-align:center;">Evaluación de bits</td>
<td style="text-align:center;">PIDs soportados [0x61...0x80]</td>
<td style="text-align:center;"><strong>Confirmado</strong></td>
</tr>
<tr>
<td style="text-align:center;">0x80</td>
<td style="text-align:center;">4</td>
<td style="text-align:center;"><strong>-</strong></td>
<td style="text-align:center;">Evaluación de bits</td>
<td style="text-align:center;">PIDs soportados [0x81...0xA0]</td>
<td style="text-align:center;"><strong>Confirmado</strong></td>
</tr>
<tr>
<td style="text-align:center;">0xA0</td>
<td style="text-align:center;">4</td>
<td style="text-align:center;"><strong>-</strong></td>
<td style="text-align:center;">Evaluación de bits</td>
<td style="text-align:center;">PIDs soportados [0xA1...0xC0]</td>
<td style="text-align:center;"><strong>Confirmado</strong></td>
</tr>
<tr>
<td style="text-align:center;">0xA4</td>
<td style="text-align:center;">8</td>
<td style="text-align:center;"><br /></td>
<td style="text-align:center;"><br /></td>
<td style="text-align:center;"><br /></td>
<td style="text-align:center;">Desconocido</td>
</tr>
<tr>
<td style="text-align:center;">0xA6</td>
<td style="text-align:center;">2</td>
<td style="text-align:center;"><br /></td>
<td style="text-align:center;"><br /></td>
<td style="text-align:center;"><br /></td>
<td style="text-align:center;">Desconocido</td>
</tr>
<tr>
<td style="text-align:center;">0xBE</td>
<td style="text-align:center;">1</td>
<td style="text-align:center;"><br /></td>
<td style="text-align:center;"><br /></td>
<td style="text-align:center;"><br /></td>
<td style="text-align:center;">Desconocido</td>
</tr>
<tr>
<td style="text-align:center;">0xC0</td>
<td style="text-align:center;">4</td>
<td style="text-align:center;"><strong>-</strong></td>
<td style="text-align:center;">Evaluación de bits</td>
<td style="text-align:center;">PIDs soportados [0xC1...0xE0]</td>
<td style="text-align:center;"><strong>Confirmado</strong></td>
</tr>
<tr>
<td style="text-align:center;">0xE0</td>
<td style="text-align:center;">4</td>
<td style="text-align:center;"><strong>-</strong></td>
<td style="text-align:center;">Evaluación de bits</td>
<td style="text-align:center;">PIDs soportados [0xE1...0x100]</td>
<td style="text-align:center;"><strong>Confirmado</strong></td>
</tr>
<tr>
<td style="text-align:center;">0xE1</td>
<td style="text-align:center;">7</td>
<td style="text-align:center;"><br /></td>
<td style="text-align:center;"><br /></td>
<td style="text-align:center;"><br /></td>
<td style="text-align:center;">Desconocido</td>
</tr>
<tr>
<td style="text-align:center;">0xE2</td>
<td style="text-align:center;">5</td>
<td style="text-align:center;"><br /></td>
<td style="text-align:center;"><br /></td>
<td style="text-align:center;"><br /></td>
<td style="text-align:center;">Desconocido</td>
</tr>
<tr>
<td style="text-align:center;">0xF1</td>
<td style="text-align:center;">3</td>
<td style="text-align:center;"><br /></td>
<td style="text-align:center;"><br /></td>
<td style="text-align:center;"><br /></td>
<td style="text-align:center;">Desconocido</td>
</tr>
<tr>
<td style="text-align:center;">0xF2</td>
<td style="text-align:center;">6</td>
<td style="text-align:center;"><br /></td>
<td style="text-align:center;"><br /></td>
<td style="text-align:center;"><br /></td>
<td style="text-align:center;">Desconocido</td>
</tr>
</tbody>
</table>
<p>El siguiente reto es completar la tabla y tratar de entender que representa cada PID.</p>
<p>Para ello he empezado solicitando a la ECU<strong> 0x7B0</strong> el PID <strong>0x03</strong> bajo el servicio UDS<strong> 0x21</strong>, con una frecuencia de 20 veces por segundo y me he dado un paseo de un par de kilómetros circulando con el coche.</p>
<p>Una vez recabados los datos hay que analizarlos para tratar de descubrir de que se trata. En la mayoría de las ocasiones puede ser misión imposible, pero esta vez ha resultado relativamente sencillo.</p>
<p>Por un lado, partía de la sospecha de que estaba analizando la ECU responsable del ABS y el control de tracción, así que si eso era cierto me estaba enfrentando a datos relacionados con la dinámica del vehículo. Debía encontrarme con velocidades, aceleraciones, giros y cosas así.</p>
<p>Por otro lado, el análisis de las respuesta muestra que devuelven 4 valores que normalmente coinciden entre si, así que rápidamente uno se hace la idea de que puede estar en frente de las 4 velocidades de las ruedas.</p>
<p>Eso es fácil de comprobar, por que como vimos en una entrada pasada del blog, las velocidades de las ruedas las tenemos disponibles en el bus CAN, en el CAN ID <strong>0x0D4.</strong></p>
<p>Así que si comparamos los dos primeros bytes del mensaje <strong>0x0D4</strong> (con D1 más significativo que D0 y escala en el eje izquierdo) con el tercer byte que manda la ECU (primer byte de datos, con escala en el eje derecho) obtenemos:</p>
<img src="https://data.toyobaru.es/gfx/blog/ECU/7B0-03D3vs0D0-D1D0.webp" alt="Comparativa 0x7B0 Servicio 0x21 PID 0x03 D3 versus CAN ID 0x0D4 D1D0" title="Comparativa 0x7B0 Servicio 0x21 PID 0x03 D3 versus CAN ID 0x0D4 D1D0" />
<p>La gráfica parece encajar bastante bien (escalas a parte) pero se aprecian momentos puntuales donde aparecen ligeras diferencias y las líneas se separan entre si.</p>
<p>Viendo el resto de graficas comparativas, vemos que esas diferencias se producen también en los otros gráficos, pero en sentido contrario. Es decir, parece que estemos analizando las ruedas de forma cruzadas.</p>
<p>Para corroborarlo, comparamos ahora los dos primeros bytes del mensaje <strong>0x0D4</strong> (con D1 más significativo que D0 y escala en el eje izquierdo) con el cuarto byte que manda la ECU (primer byte de datos, con escala en el eje derecho) y obtenemos:</p>
<img src="https://data.toyobaru.es/gfx/blog/ECU/7B0-03D4vs0D0-D1D0.webp" alt="Comparativa 0x7B0 Servicio 0x21 PID 0x03 D4 versus CAN ID 0x0D4 D1D0" title="Comparativa 0x7B0 Servicio 0x21 PID 0x03 D4 versus CAN ID 0x0D4 D1D0" />
<p>donde vemos que las diferencias anteriores ya no aparecen y todo encaja mucho mejor. Y lo mismo ocurre con el resto de datos.</p>
<p>Los bytes D3D2 del mensaje<strong> 0x0D4</strong> encajan con el primer dato enviado por la ECU <strong>0x7B0</strong> en el servicio <strong>0x21</strong> PID 0x03</p>
<img src="https://data.toyobaru.es/gfx/blog/ECU/7B0-03D3vs0D4-D3D2.webp" alt="Comparativa 0x7B0 Servicio 0x21 PID 0x03 D3 versus CAN ID 0x0D4 D3D2" title="Comparativa 0x7B0 Servicio 0x21 PID 0x03 D3 versus CAN ID 0x0D4 D3D2" />
<p>y lo mismo ocurre con los bytes D5D4 del mensaje <strong>0x0D4</strong> y el cuarto dato enviado por la ECU</p>
<img src="https://data.toyobaru.es/gfx/blog/ECU/7B0-03D6vs0D4-D5D4.webp" alt="Comparativa 0x7B0 Servicio 0x21 PID 0x03 D6 versus CAN ID 0x0D4 D5D4" title="Comparativa 0x7B0 Servicio 0x21 PID 0x03 D6 versus CAN ID 0x0D4 D5D4" />
<p>y los bytes D7D6 del mensaje <strong>0x0D4</strong> y el tercer dato enviado por la ECU.</p>
<img src="https://data.toyobaru.es/gfx/blog/ECU/7B0-03D6vs0D4-D7D6.webp" alt="Comparativa 0x7B0 Servicio 0x21 PID 0x03 D5 versus CAN ID 0x0D4 D7D6" title="Comparativa 0x7B0 Servicio 0x21 PID 0x03 D6 versus CAN ID 0x0D4 D7D6" />
<p>Se confirma ... salvo las diferencias de escala y precisión (motivadas por que en un caso usamos 8 bits para representar la información y en el otro caso tenemos hasta 16 bits) estamos en frente de las velocidades de las ruedas.</p>
<p>Queda por encontrar el factor de escala. Si recordamos, la información obtenida en <strong>0x0D4</strong> había que multiplicarla por el factor <strong>0,05747</strong> para obtener la velocidad de las ruedas en km/h.</p>
<p>Podemos, por tanto, deducir por que valor hay que multiplicar la serie de datos que manda la ECU, para aproximar a la velocidad a km/h. El factor corrector que resulta de los cálculos con los datos obtenidos es de <strong>1,3474</strong>, es decir, el valor que envía la ECU hay que multiplicarlo por este valor para tener la velocidad de la rueda en km/h.</p>
<p>No se muy bien que interés puede tener que la ECU ofrezca esta información bajo este servicio cuando la misma información está disponible, con mayor resolución (2 bytes vs. 1 byte) y con una elevada frecuencia de 50 Hz. en el bus CAN, pero por lo menos nos sirve para confirmar que la ECU <strong>0x7B0</strong> es la ECU responsable del ABS y del control de velocidad.</p>
Y podemos rellenar una entrada de la tabla<div><br /><div><strong>ECU 0x7B0. Servicio 0x21</strong><br />
<table cellspacing="0" border="1">
<tbody>
<tr>
<td style="text-align:center;"><strong>PID</strong></td>
<td style="text-align:center;"><strong>Longitud<br />(bytes)</strong></td>
<td style="text-align:center;"><strong>Unidades</strong></td>
<td style="text-align:center;"><strong>Cálculo</strong></td>
<td style="text-align:center;"><strong>Descripción</strong></td>
<td style="text-align:center;"><strong>Status</strong></td>
</tr>
<tr>
<td style="text-align:center;">0x03</td>
<td style="text-align:center;">4<br>A,B,C,D</td>
<td style="text-align:center;">km/h</td>
<td style="text-align:center;">* 1,3474</td>
<td style="text-align:left;">A -> Velocidad rueda delantera derecha<br />
B -> Velocidad rueda delantera izquierda<br />
C -> Velocidad rueda trasera derecha<br />
D -> Velocidad rueda trasera izquierda<br />
</td>
<td style="text-align:center;"><strong>Confirmado</strong></td>
</tr>
</tbody>
</table>
<p>Ahora solo queda ir preparando las distintas pruebas y analizar los datos obtenidos para ir completando la tabla.</p>
</div></div>http://blog.toyobaru.es/index.php?post/2021/03/08/0x7B0%2C-la-ECU-responsable-del-ABS-y-del-control-de-tracci%C3%B3n#comment-formhttp://blog.toyobaru.es/index.php?feed/atom/comments/125Las ECUs y su conexión al bus CANurn:md5:03579b7b5ce451ef7dd76f61833bf9e22021-03-01T19:33:00+01:002021-03-01T20:18:26+01:00mapBRZBusCANECUGT86Técnica<p><strong>Localizamos las ECUs del toyobaru</strong></p>
<p>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.</p> <img src="https://data.toyobaru.es/gfx/blog/canbus.webp" alt="Vista general del bus CAN del GT86/BRZ" title="Vista general del bus CAN del GT86/BRZ" /><p>Donde se observan distintos elementos conectados al mismo y en particular, distintas ECUs.</p>
<p>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. </p>
<img src="https://data.toyobaru.es/gfx/blog/ECU.webp" alt="ECUs y sensores conectados al bus CAN del GT86/BRZ" title="ECUs y sensores conectados al bus CAN del GT86/BRZ" />
<p>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.</p>
<p>La norma OBD2 obliga a que la ECU principal responda bajo el CAN ID <strong>0x7E0</strong> y sugiere (pero no obliga) que la ECU de la transmisión (TCM) responda bajo el <strong>0x7E1</strong>, y que las sucesivas ECUs usen los siguientes identificadores (<strong>0x7E2, …</strong>).</p>
<p>Y efectivamente en el toyobaru, si tu solicitas los servicios OBD2 a la ECU con el CAN ID <strong>0x7E0</strong>, recibes las respuestas conforme a la norma, como ya hemos visto en este blog.</p>
<p>Así que me apresuré a solicitar servicios a los siguientes CAN IDs con la esperanza de localizar las distintas ECUs del vehículo.</p>
<p>Obviamente, el CAN ID <strong>0x7E1</strong> no contestó, pues debería estar reservado para la TCM y en mi coche no aplica. Pero tampoco respondieron los CAN IDs sucesivos.</p>
<p>Me planteé entonces la posibilidad de rastrear todos los CAN IDs desde el <strong>0x700</strong> hasta el <strong>0x7E0</strong>, para lo cual preparé una serie de comandos para lanzar desde mi portátil, conectado al coche, solicitando el servicio <strong>0x01</strong> (“<em>Request Diagnostic Data</em>” del estándar <strong>OBD2</strong>) y el servicio <strong>0x21</strong> (“<em>Read Data By Local Id</em>” que la norma ISO 14.229 <strong>UDS </strong>-<em>Unified diagnostic services</em>- deja abierta a los fabricantes), con la esperanza de que ‘alguien’ respondiera algo.</p>
<p>Estos son los resultados:</p>
<p><strong>0x701</strong></p>
<p>'Algo' atendió la solicitud de servicio <strong>0x01</strong> al CAN <strong>ID 0x701</strong></p>
<pre>>> 701: 02 01 00 00 00 00 00 00<br /><< 700: AC 02 50 50 00 00 00 00</pre>
<p>Pero la respuesta no la acabo de entender. Primero no responde el CAN ID <strong>0x709</strong> (que es el que en principio debería responder una petición al CAN ID<strong> 0x701</strong>) y a los datos recibidos aun no les he encontrado sentido.</p>
<p>La solicitud del servicio <strong>0x21</strong> para ese CAN ID</p>
<pre>>> 701: 02 21 00 00 00 00 00 00
timeout</pre>
<p>finalizó sin respuesta pero, aun así, el CAN ID <strong>0x701</strong> es primer candidato a ser la dirección de una de las ECUs.</p>
<p><strong>0x720</strong></p>
<p>La solicitud del servicio <strong>0x01</strong> al CAN ID <strong>0x720</strong> me deparó una nueva sorpresa, y es que recibí la respuesta desde el CAN ID <strong>0x7E8</strong>.</p>
<pre>>> 720: 02 01 00 00 00 00 00 00<br /><< 7E8: 06 41 00 BE 3F A8 13 00</pre><p>Y recibí la misma respuesta que si se la hubiera solicitado al <strong>0x7E0</strong> (o al <strong>0x7DF</strong> -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.</p>
<p>La solicitud del servicio <strong>0x21</strong> no obtuvo respuesta</p>
<pre>>> 720: 02 21 00 00 00 00 00 00<br />timeout</pre><p>lo cual me sorprendió, pues esperaba que la ECU principal soportara este servicio. Pero se ve que no …</p>
<p><strong>0x730</strong></p>
<p>La solicitud del servicio <strong>0x01</strong> al CAN ID <strong>0x730</strong> también obtuvo respuesta</p>
<pre>>> 730: 02 01 00 00 00 00 00 00<br /><< 738: 03 7F 01 11 00 00 00 00</pre><p>Y esta vez del CAN ID esperado, el <strong>0x738</strong>. La sorpresa vino después al descodificar la respuesta:</p>
<ul><li><strong>0x03</strong> -> 3 bytes</li>
<li><strong>0x7F</strong> -> Respuesta negativa</li>
<li><strong>0x01</strong> -> para el servicio 0x01</li>
<li><strong>0x11</strong> -> Servicio no soportado</li>
</ul>
<p>Ahí sí que había claramente una ECU, que además decía cumpliendo perfectamente la norma que no soportaba ese servicio.</p>
<p>Probé con el servicio <strong>0x21</strong> y si obtuve una respuesta positiva</p>
<pre>>> 730: 02 21 00 00 00 00 00 00<br /><< 738: 06 61 00 3D 50 00 03 00</pre><p>Había encontrado una tercera ECU.</p>
<p><strong>0x780</strong></p>
<p>Algo parecido pasó al interrogar al CAN ID <strong>0x780</strong></p>
<pre>>> 780: 02 01 00 00 00 00 00 00<br /><< 788: 03 7F 01 10 00 00 00 00</pre><p>Con la salvedad de que en vez de devolver el valor <strong>0x11</strong> (Servicio no soportado) devolvía el valor <strong>0x10</strong>: Rechazo general.</p>
<p>No parecía una ECU muy propensa a colaborar, pero estaba claro que ahí había otra ECU. </p>
<p>De nuevo, la solicitud ante el servicio <strong>0x21</strong> fue acogida con mayor agrado.</p>
<pre>>> 780: 02 21 00 00 00 00 00 00<br /><< 788: 06 61 00 AC 80 00 01 00</pre><p>Ya teníamos identificada la cuarta ECU.</p>
<p><strong>0x7A1</strong></p>
<p>El CAN ID <strong>0x7A1</strong> se convirtió en la quinta ECU, con un comportamiento muy similar al de las últimas ECUs, declarando el servicio 0x01 como no soportado</p>
<pre>>> 7A1: 02 01 00 00 00 00 00 00<br /><< 7A9: 03 7F 01 11 00 00 00 00</pre>
<p>Y respondiendo más positivamente ante el requerimiento del servicio 0x21</p>
<pre>>> 7A1: 02 21 00 00 00 00 00 00<br /><< 7A9: 06 61 00 27 F4 0F F1 00</pre>
<p><strong>0x7B0</strong></p>
<p>Exactamente el mismo comportamiento para el CAN ID <strong>0x7B0</strong>, que se convierte en la sexta ECU identificada. No soporta el servicio <strong>0x01</strong>.</p>
<pre>>> 7B0: 02 01 00 00 00 00 00 00<br /><< 7B8: 03 7F 01 11 00 00 00 00</pre>
<p>Y responde afirmativamente ante el requerimiento del servicio <strong>0x21</strong>.</p>
<pre>>> 7B0: 02 21 00 00 00 00 00 00<br /><< 7B8: 06 61 00 3D 50 00 03 00</pre>
<p><strong>0x7C0</strong></p>
<p>Y el CAN ID <strong>0x7C0</strong> se convierte en la séptima ECU identificada con otro comportamiento idéntico, tanto para el servicio <strong>0x01</strong></p>
<pre>>> 7C0: 02 01 00 00 00 00 00 00<br /><< 7C8: 03 7F 01 11 00 00 00 00</pre>
<p>Como para el <strong>0x21</strong>.</p>
<pre>>> 7C0: 02 21 00 00 00 00 00 00<br /><< 7C8: 06 61 00 00 00 60 01 00</pre>
<p><strong>0x7C4</strong></p>
<p>Finalmente, el CAN ID <strong>0x7C4</strong> 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 <strong>0x701</strong>, recibiendo la respuesta del CAN ID <strong>0x700</strong> para el servicio <strong>0x01</strong></p>
<pre>>> 7C4: 02 01 00 00 00 00 00 00<br /><< 700: AC 02 50 50 00 00 00 00</pre>
<p>Con unos datos que aun no he sido capaz de descifrar. Sin embargo, el servicio <strong>0x21</strong> lo recibe positivamente</p>
<pre>>> 7C4: 02 21 00 00 00 00 00 00<br /><< 7CC: 06 61 00 20 00 00 01 00</pre>
<p>y respondiendo desde el CAN ID <strong>0x7CC</strong>, que es el esperado en este caso.</p>
<p>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. </p>
<p>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 <strong>0x01</strong>) y muestran predilección por el servicio <strong>0x21</strong> del que cada fabricante puede hacer ‘<em>de su capa, un sayo</em>’ y del que es muy difícil encontrar documentación al respecto. </p>
<p>Pero se intentará ...</p>http://blog.toyobaru.es/index.php?post/2021/03/01/Las-ECUs-y-su-conexi%C3%B3n-al-bus-CAN#comment-formhttp://blog.toyobaru.es/index.php?feed/atom/comments/124Mensaje CAN BUS 0x63Burn:md5:76d6671b6aa116257cc6755afbb9c3cc2021-02-19T19:09:00+01:002021-02-19T20:14:32+01:00mapBRZBusCANGT86Técnica<p><strong>¿ El reloj interno del toyobaru ?</strong></p>
<p>Siempre me ha intrigado el mensaje <strong>0x63B</strong>. Desde el primer día que empecé a cacharrear con el bus CAN, uno trata de buscar datos que se incrementen o se decrementen de forma continua.</p> <p>Piensas en el odómetro, que es un valor que solo debe crecer. Y si se transmite por el bus CAN puedes tratar de identificarlo con ese método. O en el nivel del depósito del combustible. Hasta el siguiente repostaje, es un valor que lo único que hace es bajar.</p>
<p>Así que la rutina de explorar los datos en busca de información que solo crezca, o solo decrezca, siempre la he mantenido. Sin éxito, he de decir, pues no he sido capaz de encontrar ni el odómetro ni el nivel del depósito de combustible en los datos que se trasmiten por el bus CAN de mi GT86.</p>
<p>Pero en esa rutina de búsqueda siempre me topaba con el mensaje <strong>0x63B</strong>, y es que sus últimos 6 bytes forman un número que siempre crece. Siempre. Nunca manda la misma información. Siempre cambia. Y cambia para aumentar.</p>
<p>Si uno hace un análisis ligero, le parecerá que cada mensaje suma 5 unidades al anterior, y como el mensaje se presenta con una frecuencia de <strong>2 Hz</strong> (o sea, dos veces por segundo), cada segundo se incrementa en 10 unidades, es decir ... mide décimas de segundo.</p>
<p>Y en el análisis de una única sesión de datos todo parece cuadrar. Sin embargo, cuando cogía distintos mensajes <strong>0x63B </strong>de distintas sesiones de datos y los representaba de forma conjunta, no obtenía -para mi perplejidad- una recta.</p>
<p>¿ qué demonios pasaba ?</p>
<p>He tenido que estudiar los distintos modos del coche y sus transiciones para entender lo que realmente ocurría. Y es que no se trata de un contador de 6 bytes que siempre se incrementa. Realmente son dos contadores, uno de dos bytes (<strong>D2D3</strong>) y otro de cuatro bytes (<strong>D4D5D6D7</strong>) que siempre se incrementan.</p>
<p>El primer contador, compuesto por <strong>D2D3</strong>, siendo <strong>D2 </strong>el byte más significativo, se incrementa en uno cada vez que ocurre una transición a estado '<strong>IGNITION ON</strong>' (arranques o no el motor).</p>
<p>Cuando eso ocurre y de forma simultánea, el contador <strong>D4D5D6D7 </strong>(con <strong>D4 </strong>como byte más significativo) se reinicia, y empieza a llevar la cuenta del número de décimas de segundo que hace que el vehículo transitó a ese estado.</p>
<p>Lo curioso es que puedes apagar el coche, volver días después, poner el coche en modo '<strong>ACCESSORY</strong>' y el mensaje <strong>0x63B </strong>vuelve a aparecer manteniendo la cuenta. Hasta que pulsas de nuevo el botón '<strong>ENGINE START STOP</strong>' para entrar en modo '<strong>IGNITION ON</strong>' y <strong>D2D3 </strong>se incremente y <strong>D4D5D6D7 </strong>se reinicia.</p>
<p>Todo esto se puede ver en los siguientes gráficos.</p>
<p>Aquí podemos ver como el byte <strong>D0 </strong>del mensaje <strong>0x44D </strong>nos indica el estado del coche.</p>
<img src="https://data.toyobaru.es/gfx/blog/0x63B_44D.webp" alt="Transiciones de modo 'ACCESSORY', 'IGNITION ON' y PARADO mostradas por el byte D0 del mensaje CAN 0x44D en un GT86" title="Transiciones de modo 'ACCESSORY', 'IGNITION ON' y PARADO mostradas por el byte D0 del mensaje CAN 0x44D en un GT86" />
<p>Podemos ver como el vehículo se encuentra en modo '<strong>ACCESSORY</strong>' (<strong>0x44D D0</strong> con valor 64) hasta poco antes del segundo 100 que se pasa a modo '<strong>IGNITION ON</strong>' (<strong>0x44D D0</strong> con valor 108) para pocos segundos después, pulsar el botón '<strong>ENGINE START STOP</strong>', pasar de nuevo al modo '<strong>ACCESSORY</strong>' durante unos segundos antes de apagarse (modo <strong>APAGADO</strong>, sin actividad en el bus).</p>
<p>Permanece el coche sin contacto durante unas decenas de segundos y sobre el segundo 170 se vuelve a pulsar el botón '<strong>ENGINE START STOP</strong>' para llevar el coche de nuevo a modo '<strong>ACCESSORY</strong>', y sobre el segundo 210, pasar de nuevo a modo '<strong>IGNITION ON</strong>', hasta poco después del segundo 250, que se vuelve a solicitar el paso a <strong>APAGADO </strong>(previo paso por '<strong>ACCESSORY</strong>').</p>
<p>Si vemos ahora como se comporta el contador formado por los bytes <strong>D2D3 </strong>del mensaje <strong>0x63B</strong></p>
<img src="https://data.toyobaru.es/gfx/blog/0x63B_23.webp" alt="Evolución del contador formado por los bytes D2D3 del mensaje CAN 0x63B" title="Evolución del contador formado por los bytes D2D3 del mensaje CAN 0x63B" />
<p>Vemos como coincidiendo con cada transición a modo '<strong>IGNITION ON</strong>' el contador se incrementa en una unidad (Si, mi coche ya ha pasado -en el momento de escribir estas líneas- casi 9.000 veces al modo '<strong>IGNITION ON</strong>')</p>
<p>Por otro lado, si observamos como se comporta el contador formado por los bytes <strong>D4D5D6D7 </strong>del mensaje <strong>0x63B </strong>(represento por separado <strong>D4D5 </strong>y <strong>D6D7 </strong>por que si represento junto <strong>D4D5D6D7 </strong>me sale un valor tan alto que por problemas de escala no se aprecia como se incrementa ...)</p>
<img src="https://data.toyobaru.es/gfx/blog/0x63B_4567.webp" alt="Evolución del contador formado por los bytes D4D5D6D7 del mensaje CAN 0x63B" title="Evolución del contador formado por los bytes D4D5D6D7 del mensaje CAN 0x63B" />
<p>observamos como coincidiendo con cada transición a modo '<strong>IGNITION ON</strong>' el contador se reinicia a 0, para a partir de ese momento incrementarse regularmente al ritmo de 5 décimas de segundo por mensaje.</p>
<p>Se observa también como en el inicio el valor del contador se venía incrementando desde la última vez que el coche estuvo en modo '<strong>IGNITION ON</strong>' (hacía 47 horas ...). Y es que como se puede apreciar durante el periodo que el vehículo está sin contacto, el contador sigue manteniendo su pendiente.</p>
<p>Cabe señalar también que con 4 bytes, pueden llegar a representarse más de 4.294 millones de décimas de segundos ... suficiente para más de 13 años. No parece que se vaya a desbordar el contador por este motivo.</p>
<p>Nos queda por analizar los dos primeros bytes de este mensaje. El byte <strong>D0 </strong>siempre aparece con valor <strong>0x00</strong>, por lo que poco podemos decir de él. El byte <strong>D1 </strong>adopta dos valores <strong>0x00</strong>, que es el valor en el que normalmente se encuentra y <strong>0x80</strong>, valor que adopta únicamente en el primer mensaje <strong>0x63B </strong>que aparece en el bus CAN la primera vez se pulsa el botón '<strong>ENGINE START STOP</strong>'.</p>0x3D1, un nuevo mensaje CAN para la segunda revisión del toyobaru.urn:md5:2f6835c94868758a69ba144d67cab8032021-02-18T21:01:00+01:002021-02-18T21:08:47+01:00mapBRZBusCANGT86Técnica<p>Aunque lo he tenido delante de mis ojos durante muchos meses, no ha sido hasta hoy cuando me he dado cuenta de que en los datos recabados en el coche de Imanol (un toyobaru de 2017) está presente un mensaje CAN que no está presente en mi coche, un GT86 de 2012.</p> <p>El mensaje tiene CAN ID <strong>0x3D1</strong> y está presente en el bus tanto en el modo '<strong>ACCESSORY</strong>' como en el modo '<strong>IGNITION ON</strong>', y tiene una frecuencia de 8 Hz, es decir, aparece 8 veces por segundo. Tengo muy pocos datos para poder saber a que puede hacer referencia este mensaje, pero sin duda debe tratarse de algún sistema que la primera revisión del toyobaru no dispone.</p>
<p>La aparición de nuevos mensajes en los modelos con cambio automático, y ahora en la segunda revisión del modelo, me han hecho entender que el mapa de mensajes CAN del toyobaru no es único. Así que he elaborado una pequeña <a href="https://data.toyobaru.es/docs/MAPA_CANID_GT86-BRZ.pdf">tabla de mensajes y sus frecuencias</a> en función de la revisión del coche, de si tiene una transmisión automática o manual y del modo en el que se encuentre.</p>
<p>(NOTA: Los datos sobre la versión automática de segunda revisión no están confirmados, pues aun no he podido conectarme a un bus CAN de un vehículo de esas características, pero presumiblemente debería tener los mensajes que se recogen en el documento).</p>
<p>Seguiré ampliando la tabla si siguen apareciendo nuevas casuísticas ...</p>http://blog.toyobaru.es/index.php?post/2021/02/18/0x3D1%2C-el-mensaje-CAN-de-la-segunda-revisi%C3%B3n-del-toyobaru.#comment-formhttp://blog.toyobaru.es/index.php?feed/atom/comments/123Mensaje CAN BUS 0x442urn:md5:e0cc0e08d88d0b4306ebd99a3ba92e602021-02-18T20:18:00+01:002021-02-18T20:33:51+01:00mapBRZBusCANGT86Técnica<p><strong>Continuamos analizando los mensajes CAN de la familia 0x44*</strong></p>
<p>Después de haber visto la información que transportan los mensajes CAN <strong>0x440</strong> y <strong>0x44D</strong>, nos queda por examinar el contenido del mensaje <strong>0x442</strong> para finalizar con esta familia de mensajes tan relevantes en los cambio de modo del GT86/BRZ.</p> <p>Si analizamos el byte <strong>D0</strong> vemos que solo adopta tres valores: <strong>0x40</strong>, <strong>0x42</strong> y <strong>0x4D</strong>, que son los mismos valores que adopta este mismo byte en el mensaje <strong>0x440</strong>. Sin embargo, podríamos decir, que en el mensaje <strong>0x442</strong> este byte toma unos valores desplazados frente al mismo byte del mensaje <strong>0x440</strong>. Es decir, si vimos que lo normal es que en el mensaje <strong>0x440</strong> el valor de este byte fuera <strong>0x42</strong>y adoptara el valor <strong>0x40</strong> en las transiciones al estado '<strong>ACCESSORY</strong>', en el caso del mensaje <strong>0x442</strong> lo habitual es que el valor esté en <strong>0x4D</strong> (77 en decimal) y adopte el valor <strong>0x42</strong> (66 en decimal) en las transiciones al estado '<strong>ACCESSORY</strong>'.</p>
<img src="https://data.toyobaru.es/gfx/blog/0x442_D0.webp" alt="Comparativa de los bytes D1 del mensaje 0x44D y D0 de los mensajes 0x440 y 0x442" title="Comparativa de los bytes D1 del mensaje 0x44D y D0 de los mensajes 0x440 y 0x442" />
<p>El valor <strong>0x40</strong> solo he visto que se adopta en un caso particular. Al abandonar el modo '<strong>IGNITION ON</strong>', tras pulsar el botón '<strong>ENGINE START STOP</strong>', el vehículo pasa a estado '<strong>ACCESSORY</strong>' antes de parar toda actividad, lo que ocurre unos 20 segundos después. Pero si antes de que el vehículo alcance el modo <strong>PARADO</strong> volvemos a pulsar el botón '<strong>ENGINE START STOP</strong>', mantenemos el vehículo en estado '<strong>ACCESSORY</strong>' sin alcanzar en el estado <strong>PARADO</strong>. En esa transición especial '<strong>ACCESSORY</strong>' a '<strong>ACCESSORY</strong>' (por así decir), es cuando el byte <strong>D0</strong> adopta el valor <strong>0x40</strong>.</p>
<p>Si analizamos ahora, el byte <strong>D1</strong> vemos que también adopta los mismos 5 valores que adopta este mismo byte en el mensaje <strong>0x440</strong>: <strong>0x00</strong>, <strong>0x01</strong>, <strong>0x02</strong>, <strong>0x12</strong> y <strong>0x32</strong>. De hecho, los valores <strong>0x00</strong> y <strong>0x01</strong> parecen adoptarse simultáneamente en ambos mensajes, es decir, cuando D1 adopta el valor <strong>0x00</strong> en <strong>0x440</strong> (recordemos que lo hacía en el primer mensaje de este tipo que aparecía en el bus), también lo hace en el mensaje <strong>0x442</strong>. Y lo mismo ocurre con el valor <strong>0x01</strong> (recordemos que coincidía con la pulsación del botón '<strong>ENGINE START STOP</strong>').</p>
<img src="https://data.toyobaru.es/gfx/blog/0x442_D1.webp" alt="Comparativa de los bytes D0 del mensaje 0x44D y D1 de los mensajes 0x440 y 0x442" title="Comparativa de los bytes D0 del mensaje 0x44D y D1 de los mensajes 0x440 y 0x442" />
<p>Sin embargo, si recordamos, este byte adoptaba normalmente el valor <strong>0x02</strong> en el mensaje <strong>0x440</strong> el resto del tiempo, salvo los últimos mensajes antes de llegar al modo <strong>PARADO</strong>. Pero en el mensaje <strong>0x442</strong> el valor <strong>0x02</strong> se adopta en el estado '<strong>IGNITION ON</strong>' y ocasionalmente en el estado '<strong>ACCESSORY</strong>' donde también se adopta el valor <strong>0x12</strong> (18 en decimal).</p>
<p>De hecho, tras el inicio, tras un breve paso por el valor <strong>0x02</strong>, el byte adopta el valor el valor <strong>0x12</strong> donde permanece hasta que se pulsa el botón '<strong>ENGINE START STOP</strong>' (adopta el valor <strong>0x01</strong> en ese momento) y el vehículo pasa a modo '<strong>IGNITION ON</strong>' donde adopta el valor <strong>0x02</strong>.</p>
<p>Si salimos del modo '<strong>IGNITION ON</strong>', el valor <strong>0x02</strong> se mantiene unos 15 segundos hasta que adopta de nuevo el valor <strong>0x18</strong> durante unos segundos antes de alcanzar el modo <strong>PARADO</strong>. Ocasionalmente, en el último mensaje antes de ese modo he visto adoptar el valor <strong>0x32</strong>.</p>
<p>El byte <strong>D2</strong> adopta los mismo valores (<strong>0x00</strong> y <strong>0x80</strong>) y tiene el mismo comportamiento que este mismo byte en los mensajes <strong>0x440</strong> y <strong>0x44D</strong>. Es decir, adopta el valor <strong>0x80</strong> en los dos primeros mensajes que aparecen en el bus en el momento de la transición <strong>PARADO</strong> a '<strong>ACCESSORY</strong>' y después permanece en <strong>0x00</strong>.</p>
<p>Y el resto de bytes del mensaje (<strong>D3</strong>, <strong>D4</strong>, <strong>D5</strong>, <strong>D6</strong> y <strong>D7</strong>) solo han adoptado el valor <strong>0x00</strong> en las pruebas que realizado, así que no se puede sacar ninguna conclusión.</p>http://blog.toyobaru.es/index.php?post/2021/02/18/Mensaje-CAN-BUS-0x442#comment-formhttp://blog.toyobaru.es/index.php?feed/atom/comments/122Mensaje CAN BUS 0x440urn:md5:cc6a4d5733e54f34595078fa96a22f0e2021-02-12T18:22:00+01:002021-02-19T20:13:25+01:00mapBRZBusCANGT86Técnica<p><strong>Continuamos analizando los mensajes CAN de la familia 0x44*</strong></p>
<p>Como hemos visto en entradas anteriores, el mensaje 0x440
tiene un papel relevante en los cambios de modo del toyobaru. Vamos a
ver en esta entrada del blog la información que transporta este mensaje.</p> <p>Si analizamos el byte <strong>D0</strong> vemos que sólo adopta 3 valores: <strong>0x40</strong>, <strong>0x42 </strong>y <strong>0x4D</strong>. En la mayoría de los casos el byte adopta el valor <strong>0x42 </strong>(66 decimal) y adopta el valor <strong>0x40 </strong>(64 decimal) en una transición al estado '<strong>ACCESSORY</strong>'.</p>
<p>Es decir, si el coche esta <strong>APAGADO </strong>y pulsamos el botón '<strong>ENGINE START STOP</strong>' (sin pisar el embrague) el coche pasa a estado '<strong>ACCESSORY</strong>'. En ese momento el byte <strong>D0 </strong>adopta el valor <strong>0x40</strong>. Así, las dos primeras tramas que aparecen en el bus de este mensaje, tienen el byte <strong>D0 </strong>a <strong>0x40</strong>, para pasar después a <strong>0x42</strong>.</p>
<p>Del mismo modo, si el coche está en modo '<strong>IGNITION ON</strong>' (con el motor arrancado o no) y pulsamos el botón '<strong>ENGINE START STOP</strong>', provocaremos un paso al estado '<strong>ACCESSORY</strong>'. De nuevo en ese momento, el byte <strong>D0 </strong>adopta el valor <strong>0x40</strong>.</p>
<img src="https://data.toyobaru.es/gfx/blog/0x440_D0.webp" alt="GT86 BUS CAN Mensaje 0x440 Byte D0" title="GT86 BUS CAN Mensaje 0x440 Byte D0" />
<p>El valor <strong>0x4D</strong> (75 decimal) se adopta si forzamos un paso directo <strong>APAGADO </strong>a '<strong>IGNITION ON</strong>', es decir, si pulsamos el botón '<strong>ENGINE START STOP</strong>' con el pedal de embrague pisado. En ese caso, el byte <strong>D0 </strong>toma el valor <strong>0x4D</strong> puntualmente.</p>
<img src="https://data.toyobaru.es/gfx/blog/0x440_D0_0xD4.webp" alt="GT86 BUS CAN Mensaje 0x440 Byte D0. Transición APAGADO a IGNITION ON" title="GT86 BUS CAN Mensaje 0x440 Byte D0. Transición APAGADO a IGNITION ON" />
<p>Si analizamos ahora el byte <strong>D1 </strong>vemos que adopta hasta 5 valores: <strong>0x00</strong>, <strong>0x01</strong>, <strong>0x02</strong>, <strong>0x12 </strong>y <strong>0x32</strong>. Normalmente el byte <strong>D1 </strong>contiene el valor <strong>0x02 </strong>y el resto de valores se presenta ocasionalmente. </p>
<p>Así, el valor <strong>0x00 </strong>sólo lo he visto en el primer mensaje que aparece en el bus CAN. El valor <strong>0x01 </strong>coincide con la pulsación del botón '<strong>ENGINE START STOP</strong>'. Así, este valor está presente en el segundo mensaje <strong>0x440 </strong>que aparece en el bus (pues el botón está pulsado), en cualquier transición de estado, e incluso en el arranque del motor.</p>
<img src="https://data.toyobaru.es/gfx/blog/0x440_D1.webp" alt="GT86 BUS CAN Mensaje 0x440 Byte D1" title="GT86 BUS CAN Mensaje 0x440 Byte D1" />
<p>En el gráfico se puede ver en azul celeste, el valor <strong>D0 </strong>de <strong>0x44D </strong>que como vimos indica el estado en el que se encuentra el vehículo y vemos que en cada transición de este valor, el byte <strong>D1 </strong>de <strong>0x440 </strong>adopta el valor <strong>0x01</strong>. También vemos en verde la revoluciones del motor, de modo que cuando el motor arranca también vemos que el byte <strong>D1 </strong>adopta el valor <strong>0x01 </strong>(dos veces en este caso ... supongo que mantuve el botón pulsado más tiempo del necesario)</p>
<p>Los valores <strong>0x12 </strong>(18 en decimal) y <strong>0x32 </strong>(50 en decimal) se adoptan justo antes de que el vehículo transicione al estado <strong>PARADO</strong>.</p>
<p>Sin embargo he encontrado un caso especial en el que el byte <strong>D1 </strong>no adopta el valor <strong>0x01 </strong>al pulsar el botón '<strong>ENGINE START STOP</strong>'. Es este:</p>
<img src="https://data.toyobaru.es/gfx/blog/0x440_D1_calado.webp" alt="GT86 BUS CAN Mensaje 0x440 Byte D1. Motor calado." title="GT86 BUS CAN Mensaje 0x440 Byte D1. Motor calado." />
<p>Ocurrió en una prueba que al arrancar el coche no me di cuenta que tenía la primera marcha engranada, así que en cuanto solté el embrague el coche, obviamente, se caló. Pues bien, como puede verse en el gráfico en el segundo arranque del coche (para lo cual obviamente hubo que pulsar el botón '<strong>ENGINE START STOP</strong>') el byte <strong>D1 </strong>no adoptó (ignoro el porqué ) el valor <strong>0x01</strong>.</p>
<p>El byte <strong>D2 </strong>únicamente adopta los valores <strong>0x80 </strong>y <strong>0x00 </strong>y se comporta exactamente igual que el byte <strong>D2 </strong>del mensaje <strong>0x44D</strong>, es decir: adopta el valor <strong>0x80 </strong>en los dos primeros mensajes que aparecen en el bus en el momento de la transición <strong>APAGADO </strong>a '<strong>ACCESSORY</strong>' y después permanece en <strong>0x00</strong>.</p>
<img src="https://data.toyobaru.es/gfx/blog/0x440_D2.webp" alt="GT86 BUS CAN Mensaje 0x440 Byte D2" title="GT86 BUS CAN Mensaje 0x440 Byte D2" />
<p>Y el resto de bytes del mensaje (<strong>D3</strong>, <strong>D4</strong>, <strong>D5</strong>, <strong>D6 </strong>y <strong>D7</strong>) solo han adoptado el valor <strong>0x00 </strong>en las pruebas que realizado, así que no se puede sacar ninguna conclusión (probablemente no se usen).</p>http://blog.toyobaru.es/index.php?post/2021/02/12/Mensaje-CAN-BUS-0x440#comment-formhttp://blog.toyobaru.es/index.php?feed/atom/comments/121Transición del modo 'ACCESSORY' al modo 'IGNITION ON' desde el bus CANurn:md5:0e8be04856c290dc8eee9cfed43535052021-02-09T16:44:00+01:002021-02-14T00:16:15+01:00mapBRZBusCANGT86Técnica<p><strong>O como el bus CAN se llena de mensajes.</strong></p>
Del mismo modo que en la entrada anterior hemos visto que ocurre en el bus CAN al pasar de <strong>APAGADO</strong> a modo '<strong>ACCESSORY</strong>', vamos a analizar los mensajes que aparecen en el bus y en que orden lo hacen al pasar desde el modo '<strong>ACCESSORY</strong>' al modo '<strong>IGNITION ON</strong>'. <p>No vamos a entrar todavía en la información que contienen estos mensajes, temas que trataremos en entradas posteriores.</p>
<p>En el modo '<strong>IGNITION ON</strong>' todos los sistemas del vehículo están activos, de modo que el bus CAN se llena de mensajes (hasta 35 mensajes en el modelo con caja de cambios manual), incorporándose al bus 24 nuevos mensajes, que no transitaban por el bus en el modo '<strong>ACCESSORY</strong>'.</p>
<p>Así, si estando en modo '<strong>ACCESSORY</strong>', pulsamos el botón '<strong>ENGINE START STOP</strong>', provocamos la transición al modo '<strong>IGNITION ON</strong>' y los nuevos mensajes empiezan a aparecer.</p>
<p>En los gráficos he optado por mantener los 11 mensajes que ya estaban presenten en el bus en el modo '<strong>ACCESSORY</strong>', pero he optado por colorearlos en gris para dar protagonismo a los nuevos mensajes que aparecen.</p>
<img src="https://data.toyobaru.es/gfx/blog/ignitionon_03s.webp" alt="Tres primeras centésimas de segundo de la transición del modo 'ACCESSORY' al modo 'IGNITION ON' desde el bus CAN del GT86/BRZ" title="Tres primeras centésimas de segundo de la transición del modo 'ACCESSORY' al modo 'IGNITION ON' desde el bus CAN del GT86/BRZ" />
<p>El primer mensaje que hace acto de presencia en el bus es el <strong>0x46C</strong>. De nuevo un mensaje de la serie <strong>0x4**</strong> es el primero en aparecer en el bus ante un cambio de estado, como ya ocurrió en la transición de <strong>APAGADO</strong> a '<strong>ACCESSORY</strong>' con el mensaje <strong>0x44D</strong>. Esto parece seguir confirmando la relación de esta familia de mensajes con las transiciones de modo del vehículo.</p>
<p>Una centésima después de su presencia en el bus aparece el siguiente mensaje, el <strong>0x280</strong>. De nuevo un mensaje de la familia <strong>0x28*</strong> aparece (recordemos que en la transición al estado '<strong>ACCESSORY</strong>' aparecía el mensaje <strong>0x284</strong> después de los de la familia <strong>0x44*</strong>).</p>
<p>La diferencia más significativa ahora, viene en la frecuencia, que en el caso del mensaje<strong> 0x280</strong> es de 50 Hz., por lo que empiezan a aparecer mensajes <strong>0x280</strong> cada 2 centésimas de segundo.</p>
<p>Ningún otro tipo de mensaje aparece hasta que 0,15 centésimas de segundo después de la primera aparición del mensaje <strong>0x46C</strong>, aparece un nuevo mensaje de este tipo, y esto parece ser la señal necesaria para que afloren nuevos mensajes.</p>
<p>Así, dos centésimas más tarde (17 desde la primera aparición del primer mensaje <strong>0x46C</strong>) aparecen los mensajes <strong>0x372</strong> y <strong><a href="https://blog.toyobaru.es/index.php?post/2021/02/03/Las-tramas-indescifrables-del-bus-CAN-del-toyobaru">0x4DD</a></strong>.</p>
<p>Una centésima después (18 centésimas desde el inicio) aparece el mensaje <strong>0x370</strong> y a continuación (19 centésimas desde el inicio) el mensaje <strong><a href="https://blog.toyobaru.es/index.php?post/2021/02/03/Las-tramas-indescifrables-del-bus-CAN-del-toyobaru">0x4C8</a></strong>.</p>
<p>Hay que esperar 20 centésimas de segundo desde la aparición del primer mensaje <strong>0x46C</strong> para que aparezca la familia de mensajes <strong>0x0D*</strong> (<strong>0x0D0</strong>, <strong><a href="https://blog.toyobaru.es/index.php?post/2019/05/24/Mensaje-CAN-BUS-0x0D1">0x0D1</a></strong>, <strong>0x0D2</strong>, <strong>0x0D3</strong> y <strong><a href="https://blog.toyobaru.es/index.php?post/2019/04/25/Mensaje-CAN-BUS-0x0D4">0x0D4</a></strong>). Estos mensajes, que contienen información sobre la dinámica del coche (velocidades, aceleraciones, ...), presentan una frecuencia de 50 Hz., lo que provoca que el tráfico del bus empiece a incrementarse notablemente.</p>
<p>En esa misma centésima aparece el mensaje <strong><a href="https://blog.toyobaru.es/index.php?post/2021/02/03/Las-tramas-indescifrables-del-bus-CAN-del-toyobaru">0x4C3</a></strong>.</p>
<p>Hay que esperar 3 centésimas más, hasta la centésima 23 desde la aparición del primer mensaje <strong>0x46C</strong>, para que aparezca el mensaje <strong><a href="https://blog.toyobaru.es/index.php?post/2019/10/23/Mensaje-CAN-BUS-0x018">0x018</a></strong>. Éste mensaje, que contiene información sobre la dirección comandada por el volante, es el más prioritario de cuantos circulan por el bus del toyobaru y presenta la frecuencia más alta, junto con los mensajes de la familia <strong>0x14x</strong>: 100 Hz.</p>
<p>En esta misma centésima 23 aparece el mensaje <strong><a href="https://blog.toyobaru.es/index.php?post/2021/02/03/Las-tramas-indescifrables-del-bus-CAN-del-toyobaru">0x46C</a></strong>.</p>
<p>Dos centésimas más tarde, en la centésima 25 desde el inicio, aparece la familia de mensajes <strong>0x14*</strong> (<strong><a href="https://blog.toyobaru.es/index.php?post/2019/05/03/Mensaje-CAN-BUS-0x140">0x140</a></strong>, <strong>0x141</strong>, <strong>0x142</strong> y <strong>0x144</strong>), que como hemos comentado, también se presentan en el bus con una frecuencia de 100 Hz. y transportan información relativa al funcionamiento del motor.</p>
<p>Una centésima de segundo más tarde aparecen los mensajes de la familia <strong>0x36*</strong> (<strong>0x360</strong> y <strong>0x361</strong>).</p>
<p>En este momento, ya están presentes en el bus 31 de los 35 tipos de mensajes que circulan normalmente por el bus de un toyobaru (con caja manual).</p>
<p>El resto de mensajes tardarán aun en aparecer.</p>
<img src="https://data.toyobaru.es/gfx/blog/ignitionon_2s.webp" alt="Dos primeros segundos de la transición del modo 'ACCESSORY' al modo 'IGNITION ON' desde el bus CAN del GT86/BRZ" title="Dos primeros segundos de la transición del modo 'ACCESSORY' al modo 'IGNITION ON' desde el bus CAN del GT86/BRZ" />
<p>El mensaje <strong><a href="https://blog.toyobaru.es/index.php?post/2021/02/03/Las-tramas-indescifrables-del-bus-CAN-del-toyobaru">0x4DC</a></strong> tarda casi 1 segundo desde el inicio del proceso en hacer su presencia en el bus, mientras que el mensaje <strong><a href="https://blog.toyobaru.es/index.php?post/2021/02/03/Las-tramas-indescifrables-del-bus-CAN-del-toyobaru">0x4C1</a></strong> necesitará casi una décima más.</p>
<p>Finalmente, los mensajes de la familia <strong>0x6E*</strong> (<strong>0x6E0</strong> y <strong>0x6E1</strong>), los menos prioritarios y menos frecuentes en el bus, no harán acto de presencia hasta más de 1,9 segundos después del inicio del proceso.</p>
<p>De este modo ya tendremos en el bus todos los mensajes CAN del vehículo.</p>
<p>Es curioso observar, como tras la cuarta aparición del mensajes <strong>0x4C6</strong>, los 3 mensajes de la familia <strong>0x44*</strong> (que ya vimos como se distribuían homogéneamente entre ellos tras el inicio del modo '<strong>ACCESSORY</strong>'), hacen en este caso algo similar, redistribuyéndose los 4 mensajes (<strong>0x440</strong>, <strong>0x442</strong>, <strong>0x44D</strong> y <strong>0x46C</strong>) de forma homogénea en el tiempo, y provocando un cambio de frecuencia de los mensajes <strong>0x44*</strong>. De nuevo este hecho, hace pensar que estos 4 mensajes está relacionados.</p>http://blog.toyobaru.es/index.php?post/2021/02/09/Transici%C3%B3n-del-modo-ACCESSORY-al-modo-IGNITION-ON-desde-el-bus-CAN#comment-formhttp://blog.toyobaru.es/index.php?feed/atom/comments/117Transición APAGADO a modo 'ACCESSORY' desde el CAN BUSurn:md5:a3d90e422933ce90414e190a03f913e62021-02-07T13:47:00+01:002021-02-14T00:16:40+01:00mapBRZBusCANGT86Técnica<p><strong>O como el bus CAN del toyobaru vuelve a la vida.</strong></p>
<p>Como hemos visto en la entrada anterior del blog, en el modo '<strong>ACCESSORY</strong>' del toyobaru pueden monitorizarse hasta 11 tipos de mensajes diferentes en el bus CAN.</p> <p>Vamos a ver en esta entrada como estos mensajes van apareciendo en el bus al pasar de estado <strong>APAGADO </strong>a estado '<strong>ACCESSORY</strong>', centrándonos en los identificadores del mensaje. En entradas posteriores nos centraremos en la información que transportan estos mensajes.</p>
<p>Así, si estamos monitorizando el bus CAN en estado <strong>APAGADO </strong>y pulsamos el botón 'ENGINE START STOP', provocando la transición al estado '<strong>ACCESSORY</strong>', los primeros mensajes empiezan a aparecer.</p>
<p>El primero es el mensaje <strong>0x44D</strong>, seguido rápidamente del mensaje <strong>0x440</strong> y <strong>0x442</strong>. Esto parece sugerir que los mensajes del tipo <strong>0x44*</strong> tienen algún tipo de relación con las transiciones de estado del toyobaru.</p>
<p>Hay que esperar casi una décima de segundo hasta que aparece el siguiente mensaje, que vuelve a ser el <strong>0x44D</strong>.</p>
<p>Vimos en la entrada anterior del blog que en los mensajes del tipo <strong>0x44D</strong> tienen una frecuencia de 3,5 Hz., pero el mensaje se ha presentado con una frecuencia mayor, de 10 Hz., en este proceso de iniciación. Esto parece reforzar la relación de este mensaje con el proceso de iniciación.</p>
<img src="https://data.toyobaru.es/gfx/blog/accessory.webp" alt="Transición APAGADO a modo 'ACCESSORY' desde el bus CAN del GT86/BRZ" title="Transición APAGADO a modo 'ACCESSORY' desde el bus CAN del GT86/BRZ" />
<p>Inmediatamente después aparece un nuevo tipo de mensaje, el <strong>0x284</strong>.</p>
<p>Los dos siguientes mensajes en aparecer en el ya son conocidos. De nuevo los mensajes <strong>0x440</strong> y <strong>0x442</strong> hacen acto de presencia, y al igual que el mensaje <strong>0x44D</strong> con una frecuencia más elevada a la que teóricamente les corresponde.</p>
<p>Han pasado poco más de 12 centésimas de segundo desde el arranque cuando aparece por primera vez el mensaje <strong>0x152</strong>.
Le siguen otros 5 mensajes que hasta ahora no habían aparecido. El <strong>0x282</strong>, el <strong>0x374</strong>, el <strong>0x375</strong> y el <strong>0x63B</strong>.</p>
<p>Después de poco más de 15 centésimas de segundo, 9 de los 11 mensajes presentes en el modo ya han aparecido en el bus CAN.</p>
<p>A partir de este momento, los mensajes <strong>0x284</strong>, <strong>0x282</strong> y <strong>0x152</strong>, que presentan frecuencias elevadas comparativamente con el resto de mensajes, empiezan a aparecer repetidamente en el bus.</p>
<p>Llegados a la centésima 19, y manteniendo la inusual frecuencia de 10 Hz vuelve a aparecer el mensaje <strong>0x44D</strong>, que abandona a partir de esta aparición esa frecuencia, para adoptar desde entonces la frecuencia de 3,5 Hz.</p>
<p>Los otros mensajes de la familia <strong>0x44*</strong> también adoptan a partir de ese momento es frecuencia y se distribuyen en el tiempo espaciándose de forma homogénea entre ellos.</p>
<p>Poco después de la tercera aparición del mensaje <strong>0x44D</strong>, aparece por primera vez el mensaje <strong>0x37A</strong>, el décimo mensaje presente en este modo.</p>
<p>El undécimo mensaje tardará unas cuantas centésimas en aparecer pues no es hasta pasada la centésima 50 cuando el <a href="https://blog.toyobaru.es/index.php?post/2019/06/18/Mensaje-CAN-BUS-0x156">mensaje <strong>0x156</strong></a>, siempre tan intrigante -recordemos que siempre presenta 0 en sus datos- hace su presencia.</p>
<p>Llegados a este punto podríamos decir que la transición a estado '<strong>ACCESSORY'</strong> se ha completado -por lo menos desde el punto de vista del bus CAN- y a partir de ese momento los mensajes aparecen en el bus con su frecuencia predeterminada.</p>
<p>En próximas entradas, veremos las distintas transiciones de estado, desde el punto de vista del bus CAN, y entraremos en el análisis de la información que transportan estos mensajes.</p>http://blog.toyobaru.es/index.php?post/2021/02/07/Transici%C3%B3n-APAGADO-a-modo-ACCESSORY-desde-el-CAN-BUS#comment-formhttp://blog.toyobaru.es/index.php?feed/atom/comments/116Los modos del toyobaru y el bus CANurn:md5:15db5f9e2911488d4e19f5920c79d2242021-02-04T19:02:00+01:002021-02-14T00:17:17+01:00mapBRZBusCANGT86Técnica<p><strong>Como cambia la actividad del bus CAN en función del modo del vehículo.</strong></p>
<p>Hasta ahora hemos visto en <a href="https://blog.toyobaru.es/index.php?post/2019/04/12/Mensajes-CAN-y-sus-frecuencias">Mensajes CAN y sus frecuencias</a> (y su <a href="https://blog.toyobaru.es/index.php?post/2020/12/10/Mensajes-CAN-y-sus-frecuencias-%28y-II%29">segunda parte</a>
para el modelo automático), los distintos mensajes que circulan por el
bus CAN del GT86 y el BRZ y la frecuencia con la que lo hacen. Esta
información es correcta cuando el coche está con el contacto activado,
lo que el manual llama modo '<strong>IGNITION ON</strong>'.</p> <p>Sin embargo, el vehículo tienen tres distintos modos que se pueden cambiar (en aquellos vehículos dotados de sistema de llave inteligente, que es mi caso) mediante el botón 'ENGINE START STOP', siempre y cuando no estemos pisando el pedal del embrague (en vehículos con transmisión manual) o el pedal del freno (en vehículos con transmisión automática).</p>
<p>Existen 3 modos:</p>
<ul>
<li><strong>APAGADO</strong>, estado en el que pueden usarse los intermitentes de emergencia y poco más.</li>
<li>'<strong>ACCESSORY</strong>', donde pueden usarse algunos componentes eléctricos y ya tenemos tensión en la toma de corriente.</li>
<li>'<strong>IGNITION ON</strong>', donde todo el cuadro de mandos se ilumina y pueden usarse todos los componentes eléctricos.</li>
</ul>
<p>Si se pulsa el botón 'ENGINE START STOP' con el pedal del embrague pisado (o el freno pisado en el modelo con transmisión automática), se pasa directamente al modo IGNITION ON (o se permanece en él si ya se estaba en dicho estado) y el motor arranca.</p>
<p>Ya conocemos la actividad en el bus CAN en el modo IGNITION ON, pero ¿ cómo afecta al bus CAN los distintos modos ?</p>
<p>En estado APAGADO no se muestra actividad alguna en el bus CAN. Por lo menos a través de la toma OBDII del vehículo. Ignoro si ello es debido a que en este estado la toma OBDII no está operativa o si realmente no hay tráfico. Tengo que buscar alguna forma de acceder directamente al bus CAN, sin pasar por la toma OBDII, para comprobar que efectivamente no hay tráfico alguno en el bus, pero con la información que hoy tengo, no hay tráfico CAN en este estado.</p>
<p>Al pulsar el botón ENGINE START STOP, se cambia al estado ACCESSORY y entonces el bus CAN empieza a mostrar actividad. Pero es una actividad reducida, pues no están presentes los más de treinta mensaje que ya conocemos y que circulan en el modo IGNITION ON, sino que en este estado ACCESSORY, tan sólo 11 mensajes CAN circulan por el bus. </p>
<p>Son estos:</p>
<table style="border-collapse:collapse;table-layout:fixed" width="250" cellspacing="0" cellpadding="0" border="0">
<colgroup><col '="" width="80" span="2" /></colgroup><tbody><tr height="20">
<td width="100'" height="20"><strong>CAN ID</strong></td>
<td width="140"><strong>Frecuencia (Hz)</strong></td>
</tr>
<tr height="20">
<td height="20">0x374</td>
<td align="right">1</td>
</tr>
<tr height="20">
<td height="20">0x375</td>
<td align="right">1</td>
</tr>
<tr height="20">
<td height="20">0x37A</td>
<td align="right">1</td>
</tr>
<tr height="20">
<td height="20">0x63B</td>
<td align="right">2</td>
</tr>
<tr height="20">
<td height="20">0x440</td>
<td align="right"><strong>3,5</strong></td>
</tr>
<tr height="20">
<td height="20">0x442</td>
<td align="right"><strong>3,5</strong></td>
</tr>
<tr height="20">
<td height="20">0x44D</td>
<td align="right"><strong>3,5</strong></td>
</tr>
<tr height="20">
<td height="20">0x284</td>
<td align="right">10</td>
</tr>
<tr height="20">
<td height="20">0x282</td>
<td align="right">16,667</td>
</tr>
<tr height="20">
<td height="20">0x152</td>
<td align="right">50</td>
</tr>
<tr height="20">
<td height="20">0x156</td>
<td align="right">50</td>
</tr>
</tbody></table>Además, llama la atención que los mensajes 0x440, 0x442 y 0x44D, que en modo IGNITION ON presentan una frecuencia de 2,5 Hz, en este estado son más frecuentes, presentándose en el bus con una frecuencia de 3,5 Hz.<div><br /><div>Con estos pocos mensajes presentes, la carga del bus, que en modo IGNITION ON está sobre el 25% de ocupación en el modelo con transmisión manual, se reduce a tan solo un 3% de la capacidad del bus.</div></div>http://blog.toyobaru.es/index.php?post/2021/02/04/Los-modos-del-toyobaru-y-el-bus-CAN#comment-formhttp://blog.toyobaru.es/index.php?feed/atom/comments/115