Les secrets du bus CAN de la Renault Clio III

 x0r   85
renault clio obd2 elm327 diagnostic can bus

J'ai déjà parlé un peu des dongles OBD2 et des quelques expériences que j'ai faites avec ce dongle sur ma voiture.

Cependant, je me suis assez rapidement rendu compte des limitations du dongle OBD2. Par exemple, la liste des paramètres que l'on peut récupérer est assez limitée. J'ai par exemple pu constater que je ne dispose pas des indications du MAF (flux de mélange air-essence à l'admission) sur mon véhicule. Finalement, mis à part la vitesse, le compte-tours et la température du moteur, il n'y a pas grand-chose avec quoi travailler si on veut fabriquer une planche de bord alternative, par exemple.

La norme OBD2 est conçue pour fonctionner quelle que soit la couche physique sous-jacente, de la même manière que le protocole HTTP reste le même, que l'on soit sur un réseau Ethernet, ATM ou MPLS. Dans le cas de ma Clio III, il y a en réalité un véritable réseau informatique avec un trafic assez conséquent (entre 10 et 100 trames par seconde) avec parfois des contraintes temps-réel. Ce réseau (ou bus) s'appelle CAN (Controller Area Network) et est de plus en plus répandu dans les véhicules en circulation. Sur la Clio, il s'agit de la variante avec des adresses de 11 bits. Le débit est de 500 kbps, même si certaines trames semblent être à 250 kbps.

La puce ELM327 de mon dongle possédant une fonction d'écoute, je me suis amusé à regarder ce qui passait sur le bus. Et c'est là que je me suis rendu compte de l'énorme quantité de données qui circule sur le bus. Lorsque le moteur tourne, j'irais même jusqu'à estimer le taux d'occupation du lien à au moins 20%. Devant cette découverte, je me suis senti obligé de me lancer dans une analyse et voir à quoi correspondent toutes ces trames.

Constatant que je ne suis pas la seule personne à être aussi curieuse (et c'est d'ailleurs ce topic qui a titillé ma curiosité initiale), je publierai donc les résultats intermédiaires de mes recherches, dans l'espoir qu'elles pourront être utiles à certaines personnes. Bien entendu, si vous disposez de renseignements complémentaires, j'en serai toute ouïe.

Je commencerai donc par exposer la méthodologie et les outils de ce travail de rétroingénierie, pour ensuite dresser la liste des adresses CAN que j'ai vues passer sur le bus, pour enfin en déduire le format de chacune des trames CAN. Le code source de mes outils est bien entendu public.

Méthodologie

La méthodologie est relativement simple. Il m'a d'abord fallu régler de façon permanente le dongle pour qu'il communique à 230 400 bauds avec l'hôte. Cette mesure est nécessaire afin d'éviter les erreurs "BUFFER FULL".

J'ai ensuite codé un outil qui envoie automatiquement toutes les commandes nécessaires (dont ATH1, ATCAF0 et ATMA) au dongle, et qui écrit toutes les trames reçues sur la sortie standard, sauf celles qui ont un contenu entièrement identique. Cela permet d'analyser plus facilement les trames qui changent de contenu en fonction des actions que je fais.

J'ai ensuite écouté pas mal de trafic réseau afin de distinguer les adresses CAN qui communiquent même contact coupé, celles qui communiquent avec la clé en position "accessoire" et celles qui communiquent avec la clé en position "marche".

L'étape suivante consistait à appuyer sur tous les boutons, actionner tous les leviers et toucher à tous les réglages, afin de voir quels étaient ceux qui modifiaient des contenus de trames CAN.

Adresses CAN obtenues

Les tableaux suivants résument les différentes adresses CAN que je vois passer, la fréquence (très approximative) de rafraîchissement, la vitesse de ligne utilisée et un résumé succinct de leur contenu.

AdresseDébitFréquenceDescription succincte
0x215500 kbps50 s-1?
0x35d500 kbps40 s-1?
0x60d500 kbps40 s-1État d'interrupteurs et de capteurs divers
0x625500 kbps10 s-1?
0x645500 kbps10 s-1Rétroéclairage tableau de bord
0x6e4500 kbps? s-1?
0x715500 kbps3 sKilométrage total et autres
Adresses CAN présentes à l'arrêt
AdresseDébitFréquenceDescription succincte
0x27f500 kbps50 s-1?
0x284500 kbps50 s-1Vitesse angulaire des roues
0x285500 kbps50 s-1Vitesse angulaire des roues
0x2a0500 kbps50 s-1?
0x354500 kbps25 s-1Vitesse de la voiture, distance parcourue
0x511500 kbps10 s-1?
0x551500 kbps10 s-1Température moteur, consommation
0x5c5500 kbps10 s-1Kilométrage; état frein à main
0x5fd500 kbps50 s-1Kilométrage; âge du véhicule
Adresses CAN présentes en position "accessoire"
AdresseDébitFréquenceDescription succincte
0x0c2500 kbps100 s-1Position et vitesse angulaires du volant
0x161500 kbps??
0x181500 kbps100 s-1État du moteur et des pédales
0x1f9500 kbps100 s-1Régime moteur
0x500500 kbps10 s-1?
0x5e4500 kbps100 s-1?
0x651500 kbps10 s-1État ceinture conducteur et airbag passager
Adresses CAN présentes en position "marche"

Il faut néanmoins noter les choses suivantes :

  • les données sont cumulatives; c'est-à-dire qu'en marche, on verra passer l'ensemble des vingt-trois adresses CAN différentes et pas seulement celles qui sont listées dans le tableau correspondant ;
  • la position "marche" correspond à la position de la clé (celle où toutes les diodes du tableau de bord s'allument pendant quelques secondes), et non pas à l'état du moteur (qui peut être arrêté).

J'ai relevé que certaines trames faisaient l'objet d'un contrôle d'intégrité à l'aide d'un checksum en fin de message. Pour calculer le checksum, faire la somme sur 8 bits de tous les autres octets du message et prendre le complément à 1.

Dissection

J'ai remarqué une première chose, et c'est que tout n'est pas forcément relié au bus CAN. Par exemple, le réglage électrique des rétroviseurs ou le réglage de l'heure ne provoquent pas de trafic ou ne modifie pas de trames. On peut donc conjecturer que Renault a adopté un « principe de parcimonie » : si un paramètre n'intéresse pas un autre calculateur ou système dans la voiture, celui-ci ne sera pas diffusé sur le bus CAN. Le câblage coûte certes cher, mais les transceivers CAN aussi.

Voici pour le moment les informations que j'ai pu déduire de mes observations.

Plage 0x000-0x1ff

0x0c2 -> 8108 7FFF 5B 9D
         └─┬┘ └─┬┘    ─┬
           │    │      │
           │    │      └─── Checksum
           │    └────────── Vitesse de rotation du volant (1)
           └─────────────── Angle du volant (2)

(1): soustraire 0x8000 (unité exacte inconnue)
(2): soustraire 0x8000, résultat en incrément de 0,1°

0x161 -> 30 30 65 00 10
         ─┬
          │
          └──────────────── Couple moteur estimé volonté conducteur (1)

(1): multiplier par 2 puis soustraire 100, résultat en Nm



0x181 -> 4174 4C 52 4D 20 3A 00
         └─┬┘    ─┬    ─┬
           │      │     │
           │      │     └─ Position pédales embrayage/frein (1)
           │      └─────── Position pédale accélérateur (2)
           └────────────── Régime moteur (3)

(1): bit 3 = pédale d'embrayage enfoncée
     bit 0 = pédale de frein enfoncée
(2): varie entre 0x10 (relâché) et 0xe0 (en butée)
(3): diviser par 8 pour la valeur réelle



0x1F9 ─> 22 00 3BA1 CA FF
               └─┬┘
                 │
                 └──────── Régime moteur (1)

(1): diviser par 8 pour la valeur réelle

Plage 0x200-0x2ff

0x215 ─> 42 40 1C 03 0F 0F
            ─┬
             │
             └──────────── Position marche arrière (1)

(1): bit 6 = marche arrière enclenchée

Plage 0x300-0x3ff

0x354 ─> 1815 3312 00 00 04 00
         └─┬┘ └─┬┘       ─┬
           │    │         │
           │    │         └─ État frein (1)
           │    └───────── Distance depuis démarrage (2)
           └────────────── Vitesse (3)

(1): bit 4 = pédale de frein enfoncée
(2): multiplier par 0,1 m
(3): multiplier par 0,01 km/h

Plage 0x500-0x5ff

0x551 ─> 7B 26 6A 00 FF 72 00
         ─┬ ─┬
          │  │
          │  └──────────── Carburant utilisé (1)
          └─────────────── Température du moteur (2)

(1): mesuré depuis le dernier démarrage, avec 12 500 unités = 1 L
(2): soustraire 40 pour obtenir la valeur en °C



0x5C5 ─> 40 0 0C633 06 B0 00 13
         ─┬   └─┬─┘
          │     │
          │     └───────── Kilométrage 
          └─────────────── État frein à main (1)

(1): bit 3 = frein à main enclenché



0x5FD ─> 0C633 235618 0 00 20
         └─┬─┘ └──┬─┘
           │      │
           │      └─────── Âge du véhicule (en min)
           └────────────── Kilométrage

Plage 0x600-0x6ff

0x60D ─> 003618 00 41 7C 02 00
         └──┬─┘    ─┬ ─┬ ─┬ ─┬
            │       │  │  │  │
            │       │  │  │  └─ Inputs (1)
            │       │  │  └──── État marche arrière (2)
            │       │  └─────── Température moteur (3)
            │       └────────── Température extérieure (3)
            └────────────────── État capteurs divers (4)

(1): bit 0 = appui sur bouton "haut" du comodo droit
     bit 1 = appui sur bouton "bas" du comodo droit
(2): bit 4 = marche arrière engagée
(3): mesuré en °C (soustraire 40)
(4): bit 23 = coffre ouvert
     bit 22 = porte arrière droite ouverte
     bit 21 = porte arrière gauche ouverte
     bit 20 = porte avant droite ouverte
     bit 19 = porte avant gauche ouverte
     bit 18 = (FP) feux de position allumés
     bit 17 = (FC) feux de croisement allumés
     bit 14 = (CD) clignotant droit allumé
     bit 13 = (CG) clignotant gauche allumé
     bit 11 = (FR-AL) feux de route allumés (ou appel de phare)
     bit 10 = clé en position marche
     bit 9  = clé en position accessoire
     bit 8  = (PA) feux de brouillard avant allumés
     bit 5  = condamnation des portes enclenchée
     bit 4  = condamnation du coffre enclenchée
     bit 2  = (FBA) feu de brouillard arrière allumé



0x645 ─> 00 FF FF 0900
            ─┬    └─┬┘
             │      │
             │      └────────── Vitesse (× 0,01 km/h)
             └───────────────── Intensité rétroéclairage instruments (1)

(1): Varie entre 0x00 (minimum) à 0xfe (maximum), ou 0xff (éteint)



0x651 ─> 04 F0
         ─┬ ─┬
          │  │
          │  └───────────────── État ceinture (1)
          └──────────────────── État airbag (2)

(1): bit 0 = ceinture conducteur non attachée
(2): bit 2 = 0 si clé en accessoire, 1 si marche
     bit 1 = airbag passager désactivé

Plage 0x700-0x7ff

0x715 ─> 0 0C633 18 1E 3A 99 42
           └─┬─┘
             │
             └───────────────── Kilométrage

Conclusion

À ma grande déception, les informations que l'on obtient sont assez superficielles, à l'image de ma méthodologie qui se contente, in fine, de comparer des actions et des réponses à des entrées précises. Je peux néanmoins être satisfait du fait d'avoir trouvé la plupart des éléments que je pourrais afficher sur un HUD maison, comme la vitesse et le compte-tours.

On peut ensuite ranger le reste des valeurs non décodées en deux catégories : d'une part, celles qui dépendent d'options dont ma voiture n'est pas équipée (par exemple les radars de recul qui donneraient des valeurs de télémétrie, etc.) ; d'autre part, celles qui dépendent de situations que je ne peux que difficilement reproduire à moins d'être sur un circuit fermé (déclenchement des systèmes de sécurité comme l'ABS ou les prétentionneurs, par exemple).

Je pourrais peut-être obtenir des informations intéressantes en injectant des fausses trames à l'aide de mon dongle. La peur de bricker accidentellement ma voiture ou de déclencher des dispositifs pyrotechniques comme les airbags me retient cependant de le faire. Je laisserai l'initiative à une personne plus intrépide que moi.

Commentaires

Poster un commentaire

hydro

Super intéressant, je me suis toujours demandé à quoi ressemblaient les données en obd.

Du coup je suis pas autant calé que toi mais si tu comptes faire un HUD maison en récupérant les données je serais super intéressé :) En plus j'ai une megane 2, du coup sa doit pas être super éloigné.

Aurycom

Bonjour,

Sais-tu s'il est possible de détecter l'appui sur les boutons de commandes au volant de l'autoradio ? Merci d'avance, et super boulot ;-)

x0r

J'avais essayé, et cela n'avait pas l'air d'être le cas.

Simplearetenir

Super article ! Par contre tu n'explique pas comment tu te connecte à la voiture ? Est ce par le même biais que le montage ODB ? Si non, peut tu préciser le montage.

TyoriS72

Salut,

Pour commencer je vais te féliciter pour ton travail, cela à du prendre du temps de récupérer et trier des trames du CAN.

Je travail également sur un projet similaire, mettre un compteur de Megane II dans une vieille Renault pas équipé de CAN.

J'utilise un ARDUINO UNO associe à un Sield CAN bus pour récupérer et convertir les données en Trames. Aujourd'hui j'arrive à allumer et éteindre le compteur avec les commandes suivante: 0x35D ; 10, 03, 00, 00, 00, 00, 50, 00 ==> Allumage Compteur 0x35D ; 00, 00, 00, 00, 00, 00, 00, 00 ==> Éteindre Compteur

Mais lorsqu'il s'allume j'ai le message "Défaillance Electronique"

J'ai essayer plusieurs combinaison 0x35D 8 10 03 00 00 08 C0 12 00 0x35D 8 10 03 00 00 08 C0 12 00 0x35D 8 10 03 00 00 08 C0 12 00 0x35D 8 10 03 00 00 08 C0 12 00 0x35D.......

Il faudrait que j’enregistre TOUTES, oui toutes les trames qui tourne pour ensuite les réinjectées dans le compteur pour voir ça réaction...

TyoriS72

Squall

Bonjour, Nous travaillons actuellement sur un projet faisant usage de l'ELM327, nous avons le problème du BUFFER FULL, mais impossible de résoudre ce problème, pourriez vous nous expliquer la démarche utilisée pour contourner ce problème ? Cordialement, Squall

x0r

Avez-vous essayé d'augmenter la vitesse de transmission de l'ELM327 en passant le port série à 230 400 bauds ou plus ?

De deux choses l'une, soit vous forcez votre ELM327 à communiquer à 230 400 bauds dès le reset en écrivant une valeur spéciale dans un registre (cf. datasheet), ou vous changez le baud-rate en milieu de session. La première méthode est la plus facile mais plus risquée ; la seconde est plus compliquée cependant car il exige que le programme confirme le changement de vitesse dans la milliseconde qui suit la commande de changement.

Je n'ai plus la documentation sous la main, mais la datasheet de l'ELM327 explique assez bien la marche à suivre.

Aleks

Hello This weekend I did exactly the same exploration as you've done with your Clio. I explored the CAN bus of my Megane II. I managed to recognize some parameters but not so far as you've done. Today I found this blog which answered many of my questions. Thank you for your great job.

Could I ask you, how you defined that divider for "Regime moteur" is 8? I suppose that it is 10 but I have no strong evidence.

Also let me add some to your data. CAN-id 0C2 B0-B1 stearing wheel angle (B0*0xff+B1)/10.0 7FFF - neutral position 8E0F - 360 degree right 71EF - 360 degree left B2-B3 stearing speed

x0r

Thanks for the information! Since my car isn't fitted with ESP, I thought Renault wouldn't even bother implementing the steering wheel angle sensors. But you proved me wrong. Thanks a lot!

As for the engine RPM, I figured out the divider by looking at diverse situations where I knew the real value. For instance, I know that my engine runs at 1,750 rpm when in fourth gear at 50 km/h. My engine also runs at approximately 700 rpm when hot and idle. Therefore, I knew the divider could only be 8.

Aleks

You were right. I've just made a test. One ELM sent 21A0 and another one captured farmes from CAN. Now I am sure that divider for RPS is 8. Such way I captured many data and now I am going to try to correlate different data to solve a mystery of CAN-id 161

MiGaNuTs

Un truc pas mal serait de pouvoir trouver le rapport enclenché (si c'est possible ?). Le top ça serais de réussir a intercepter les trames de l'ESP pour avoir les valeurs des accéléromètres. Beau boulot déjà. Tu utilise quoi comme matériel et comme soft pour "sniffer" les trames ?

x0r

Pour trouver le rapport enclenché, ça dépend des voitures et peut-être aussi des boîtes de vitesse. Idem pour l'ESP, pour lequel il faudrait corréler un accéléromètre externe et des captures CAN. Je n'ai pas encore réussi à "déchiffrer" toutes les informations des trames CAN, donc je pourrais encore tomber sur d'agréables surprises.

Comme matériel, j'utilise un dongle USB à base d'ELM327 comme on en trouve des cents et des milles sur eBay. En guise de soft, j'utilise pour le moment un script Perl (que je ne publierai pas parce que j'ai honte du code). J'envisage dans un futur proche de réécrire mes outils en C et en suivant une architecture plus propre.

Arthur

Une analyse, et réalisation, en utilisant le bus CAN, sur un autre véhicule

Aleks

Bonjour

0x161 5 77 2B 77 00 F4 -- -- -- -- | | | | | | | +--???? | | +--???? | +--???? +--"couple moteur estime volonte conducteur" = x*2-100 Nm

x0r

D'accord, le premier octet des trames d'adresse 0x161 correspond donc au « couple moteur estimé volonté conducteur ».

Aleks

Sorry, previous message lost formatting. The first byte of 0x161 is a "couple moteur estime volonte conducteur" = x*2-100 Nm. For my Sagem 3000 it is equal to 4-th byte of 21A5

Duarte

Hi,

I'm using these comands do start reading in dump mode: ["ATI","ATL1","ATH1","ATS1","ATAL","ATSP0","ATCAF0"]

and with baud rate:230400 but does not work, allways get buffer overflow, i have a renaultclio III, what is your comand sequence?

x0r

First I permanently set the ELM327 in 230,400 baud mode with AT PP 0C SV 11, then AT PP 0C ON.

When dumping the CAN bus, I use ATZ, then ATH1, then ATCAF0 and finally ATMA. Immediately after the ATMA command, I read the serial port as fast as I can to ensure as little data remain in the ELM327's buffer as possible. A Perl script running on a low-power Core 2 Duo laptop is fast enough, though.

Alex

IMHO it is quite dangerous way. If serial chip and the cable are not good enough then you can break your ELM. The soft way is to use "AT BRD 11" It switch the baud rate till power cycle or ATZ

<pre> at z at e1 at l1 at h1 at d1 at caf0 at sp 6 at al at cra <interesting address if needed> at brd 11 [wait OK] [change port boudrate] [wait ELM] [send \r] at ma </pre>

x0r

I know, but I just couldn't get the "proper" way to work. Otherwise there's a pin on the ELM327 you can short to ground (or something like that­ – it's in the datasheet) to force it to 9600 baud if you accidentally mess up with the baud rate divider.

Ali

C'est du bon travail, merci x0r,

Pour répondre à Aurycom les commandes au volant circulent sur le bus CAN M "Multimédia", et non sur le bus CAN V "Véhicule", la prise OBD est sur le bus CAN V.

Dans les voitures il y a plusieurs bus CAN, chez Renault c'est le calculateur BCM qui fait office de Gateway, chez Peugeot c'est la BSI.

Les trames CAN transitent d'un bus à l'autre à travers la BCM uniquement si les données sont nécessaires pour les autres calculateurs, comme la donnée Vitesse.

Canz

Le message 27F donne le wheel ticks pour chaque roue. En dérivant ces valeurs pour retombe sur la vitesse angulaire des roues.

x0r

I used my own Perl script to capture raw CAN frames, which works much like yours – only mine runs the ELM327 at 500,000 baud. Then I use another Perl script to format the frames and process the data.

Alex

500000 is to high for my ELM ((( it returns many errors on such speed.

bulbo

Le fait que pour les retro et autre truc genre calculateur d'additivation chez psa, ils n'apparaissent pas car il existe un autre protocole qui est le lin PRotocole très simple qui dialogue souvent directement avec un calculo en face C'est un protocole type maitre esclave.. Il passe par le calculateur d'ahbitacle souvent qui lui fait le relais et transmet ensuite le can à la bonne vitesse...

Les trames ne sont pas toutes publié sur tous les bus..

Il y a plusieurs reseau can dans le vehicule et à des vitesses differentes

Reseau confoort, carosserie et intere calculteur, ce dernier etant le plus rapide et concerne moteur, boite abs ..

les reaseaux conforts sont lent et ne demande pas une vitesse rapide pour les changement de parametres genre affichage vitesse, etc..ca vari mais pas si vite donc reseau confort, clim, reseau carosserie, radar de recul reseau carrosserie etc...

Le reseau diag est lui aussi separé et normalement les trames passent par lui qui est un peut un pass thru mais ca reste à verifier...

fred

Merci pour ces infos une petite question, comment vous faites pour envoyez une demande de donnée à une adresse spécifique 0x161 par exemple (et non 01XX). Bien sur on peu envoyer un ATMA, mais c'est pour pouvoir faire une demande sur différentes adresses en boucle. Merci d'avance

Bes-57

Bonjour, Super ce petit reportage sur le mux. J'aurais besoin de vous car je suis sur un projet de adaptation d'un boîtier Rs monitor de Megane 3 Rs sur une Megane 2 Rs. Le boîtier Megane 3 ne fonctionne pas sur ma Megane 2, ce n'est pas grave car je sais que ce même boîtier est monté sur les dernières Clio 3rs. En le configurant comme une Clio 3, mon boîtier fonctionne sur ma Megane 2 mais je n'ai pas toutes les infos comme sur la Megane 3rs, Il me manque l'info turbo et température air admission. Ma question est est-ce qu'il serait possible de les re-parametrer? Par la même occasion, les infos couples et puissances sont fausses car ma voiture est plus puissante que la Clio 3 Rs donc peut-on modifier la calibration?

Merci d'avance Seb

x0r

Je ne sais pas ; je pense qu'il faudra surtout vous rapprocher du fabricant de votre boîtier. De quel boîtier s'agit-il exactement ?

Bes-57

Je ne sais pas qui le fabrique. C'est l'écran déporté de la radio sur les véhicules Renault sport. Je pense que cet afficheur n'est qu'un lecteur d'info sur le mux. Il ne doit pas avoir grand chose pour le calibré.

x0r

Ah, je viens de rechercher et en effet, les modèles Renault Sport ont un afficheur déporté qui donne ces informations. Je ne le savais pas :)

En réfléchissant un peu, je ne suis pas sûr que le bus CAN d'une Mégane II RS exposerait autant d'informations qu'une Mégane III RS. En effet, j'ai l'impression que la Mégane II et la Clio III ont de très nombreuses trames CAN en commun ; je suis prêt à parier que mes outils actuels fonctionneraient sans modification sur une Mégane II.

J'ai maintenant roulé sur plusieurs centaines de kilomètres avec un laptop sur le siège passager qui capturait les trames CAN. Et bien que mon véhicule soit muni d'un turbo, je n'ai rien trouvé qui puisse être corrélé à sa vitesse de rotation… De plus, en cherchant plus d'informations sur le RS Monitor des Clio III RS, on dirait que celui-ci n'affiche pas d'informations sur le turbo.

Du coup, pour le turbo je ne suis pas sûr qu'on retrouverait l'information sur une Mégane II RS.

Quant au couple et à la puissance, c'est peut-être calculé par le boîtier à partir d'autres informations. Je vois difficilement comment corriger cela autrement qu'en bidouillant le firmware du boîtier, ce qui risque de ne pas être simple… Mais peut-être un défi intéressant à relever.

Bes-57

Je suis sur que tes outils passent sur une Megane 2, c'est les mêmes mux. Clio 3 Rs et Megane 2 Rs ont le même calculateur d'injection le s3000, juste la Megane 2 à la suralimentation en plus. Il faudrait voir si on retrouve une valeur de pression de turbo sur le mux, mais comme toi je ne pense pas qu'elle y soit et surtout pour quelle utilité? Si tu veux, je peux te fournir un Rs monitor essai que tu pourras décortiquer. Peut-on se joindre en privé? Merci Seb

Alex

Hi, it is very interesting for me too. Am I right that you are going to find the analog of such ECU parameter ########

"[PR]PRESSION SURALIMENTATION","PR041","21A0","0.0578125*(N*256+O)+103","0","0","mbar","7E0" ########

among system frames for getting them from CAN without requests?

Bes-57

Alex, c'est pas mieux de prendre le pr312 pression collecteur?

Alex

Maybe, but I'm not sure. As I understand there are three main pressure parameters in S3000

"[PR]PRESSION ATMOSPHERIQUE","PR035", "21A0","1047-(3.7*F)","700","1047","mbar","7E0"

"[PR]PRESSION ADMISSION","PR032", "21A0","0.0578*(D*256+E)+103","114","1048","mbar","7E0"

"[PR]PRESSION SURALIMENTATION","PR041", "21A0","0.0578125*(N*256+O)+103","120","2200","mbar","7E0" (The parameter name depends on firmware of S3000 and can differ)

First one is pressure before air filter

Second one is a pressure beetween filter and turbin (if it is)

And the last one is a pressure afeter turbine.

There is no turbine in my car ((, so I can not check

Alex

When I searched pressure parameters among system frames I used Y-cable and two ELM. One of them captured all frames in monitoring mode and the second one continuously sent requests 21A0. Then I analyzed the captured data and tried to correlate data in 21A0 responces (7E8 CAN address) with unknown data in the system frames.

I did not find anything similar on CAN of my car.

Cedrik

Bonjour tout le monde, je me demandais si d'apres vous il serait possible de "sniffer" les trames envoyees par une sonde CLIP Renault afin d'essayer de comprendre comment sont interroges les differents ECU et surtout comment ils repondent. Je me disais qu'en mettant un cable en Y sur la prise OBD avec d'un cote la sonde CLIP et de l'autre un ELM327 en mode "Monitor All" on pourrait peut etre faire ca, qu'en pensez vous. De mon cote j'avais une sonde CLIP chinoise qui n'a dure que le temps de 3 diag(!!). En tout cas merci pour cette mine d'informations !

Cedrik

Alex, from which document did you find these informations ? :

"[PR]PRESSION ATMOSPHERIQUE","PR035", "21A0","1047-(3.7*F)","700","1047","mbar","7E0" "[PR]PRESSION ADMISSION","PR032", "21A0","0.0578*(D*256+E)+103","114","1048","mbar","7E0" "[PR]PRESSION SURALIMENTATION","PR041", "21A0","0.0578125*(N*256+O)+103","120","2200","mbar","7E0"

I'm very curious to know if you've got other informations about the S3000 ECU ! Thank you

Alex

This information is in format of torque csv. You can get full information about S3000 from DDT2000 software.

Cedrik

Awesome, didn't know DDT2000, just downloaded it and all OBD modes are listed for all ECUs... thank you VERY much !

Alex

Ddt2000 is a bit outdated but contains even more commands and parameters for old ecus then in clip database

Alex

Ddt2000 is a bit outdated but contains even more commands and parameters for old ecus then in clip database

Cedrik

Alex, can you tell me how you get a response from request 21A0 ? I'm trying to do it in CAN mode (protocol 6 on Megane II) with adress 7E0, but I get <NO DATA>. I can get response in KWP2000 mode nut I'm not sure that's the data I want...

Alex

Most complete initialisation sequence is as follows.

at sh 7E0

at cra 7E8

at fc sh 7E0

at fc sd 30 00 00

at fc sm 1

at sp 6

10C0

21A0

With such initialization you can work not only with Engine ECU but with all ECUs on CAN (ABS, TDB, UCH and so on). On my Megane2 ph1 I can read 7 ECUs.

10C0 is a command of opening diagnostic session. It is important that between 10C0 and any following commands should be no more than 5 seconds else the session would be closed and then you should send 10C0 again. You can communicate with S3000 by KWP2000 but all parameters would be returned with zero value. But you can use KWP2000 for reading and erasing errors

Alex

TX RX 7E0 7E8 - INJECTION 740 760 - ABS /ABR 743 763 - TABLEAU DE BORD 745 765 - UNITE CENTRALE HABITACLE 752 772 - AIRBAG / PRETENSIONNEURS 742 762 - DIRECTION ASSISTEE 74D 76D - UPC

Cedrik

Thank you, I just found the 10C0 diagnostic session command in the ddt2000 database. You're my hero ! Have you tried reading/writing ECU parameters ? I'd like to change the maximum speed for roof operation in the roof control (3km/h actually) unit but I fear trying to change it.

Cedrik

I'd like to document the protocol, how did you find the flow control data (at fc sd 30 00 00) ?

Alex

I found information about CAN flow control in ISO 15765-2. Very interesting reading before a sleep )

Alex

It is looks like you can try to change the maximum vehicle speed. Look into UCT_E84_PS.xml. 210A - to read current value and 3B0A - to change it. But you will need to send long command to ECU (longer then 7 bytes). You can do it by switching of CAN auto-formatting ATCAF0 and formatting multi-frame request by yourself, like a

10343B0AXXXXXXXX

21XXXXXXXXXXXXXX

22XXXXXXXXXXXXXX

23XXXXXXXXXXXXXX

Cedrik

Excellent ! is there somewhere we can exchange information (if you're interested)? I don't wanna flood this post.

Alex

I agree not to flood there. Where I can write to you? But I need to correct my mistake in a previous post. Right sequence for changing 3B0A should be

at z

at sh 74B

at cra 76B

at fc sh 74B

at fc sd 30 00 00

at fc sm 1

at al

at caf0

at sp 6

10C0

101A3B0Axxxxxxxx

21xxxxxxxxxxxxxx

22xxxxxxxxxxxxxx

23xxxxxxxxxxxx

Cedrik

you can send me an email at cedricpaille (at) gmail-dot-com

Yo.a

Hello ,

vos infos m’intéresse aussi , j'ai un montage a base de MCP2515 et un clip V160 chinois de très bonne qualité , je découvre les trames renault et j'essaye de comprendre , si vous avez des sites ! merci beaucoup

Cedrik

Salut, En fait comme le disait Aleks, il te faut télécharger l'application DDT2000 (je ne pourrais te dire comment) et fouiller dans les fichiers XML des ECU, c'est une pure mine d'informations. Grace a ca, j'ai pu (thank you Aleks) modifier la limite de vitesse en roulant d'ouverture/fermeture du toit de ma Megane II CC ! Et plein d'autre choses par ailleurs !

Pierrick

Salut,

Très impressionné par le travail effectué! Bravo! J'aimerais savoir comment tu as trouvé la formule de cadrage de la consommation? (12 500 unités = 1 L)

Merci beaucoup!

x0r

J'avais tout d'abord repéré une valeur qui semblait incrémenter plus ou moins vite en fonction de la force d'appui sur l'accélérateur. J'avais conjecturé qu'il s'agissait d'un nombre proportionnel à la consommation de carburant.

J'avais d'abord fait de nombreux petits voyages, de distances plus ou moins grandes, en notant à chaque fois la consommation de carburant indiquée par l'ordinateur de bord et la valeur que je trouvais sur le bus CAN. De là, j'avais pu en conclure que ce chiffre était bien proportionnel à ma consommation d'essence, mais je n'avais pas suffisamment de données précises pour déterminer le coefficient de proportionnalité. Je savais qu'il se situait entre 12 000 et 13 000 unités pour 1 L, mais il me fallait une meilleure précision.

Pour déterminer le coefficient de proportionnalité avec une précision de 1 %, je m'étais dit qu'il me fallait un long voyage où je consommais au moins 10,0 L d'essence. J'ai donc profité d'un voyage aller-retour d'environ 300 km pour ce faire, et j'étais donc arrivé à la conclusion que cela ne pouvait être que 12 500 (et pas 12 800 comme je le pensais à un moment). C'est de plus un chiffre rond, égal à 100 000 divisé par 8.

yoh-there

I am pretty sure a Clio (like my ZOE) has a the multimedia CANbus on the OBD2 connector too. It's on pins 12 and 13, running at 250 kbps.

x0r

I indeed suspect that the entertainment bus is wired to pins 12 and 13 on a Clio as well. I noticed that these pins are wired inside the OBD2 connector in the car (not all pins are populated inside the connector). Someday I'll look into that bus.

Alex

I've just found complete information in ddt2000. System frames of Clio III are described in can_v85.10.xml

There are small part of it:

<Data Name="FuelConsumption_84">

<Bits>

<Scaled Unit="mm3" Step=" 80"/>

</Bits>

</Data>

<Request Name="ECM_GeneralStatus">

<Sent>

<SentBytes>0551</SentBytes>

</Sent>

<Received MinBytes="8">

<DataItem Name="EngineCoolantTemp_84" Ref="1" FirstByte="1"/>

<DataItem Name="FuelConsumption_84" Ref="1" FirstByte="2"/>

<DataItem Name="IdleSpeedControlRequest_84" Ref="1" FirstByte="3"/>

<DataItem Name="DiagMuxOn_84_copy" Ref="1" FirstByte="4"/>

<DataItem Name="MILLamp_84" Ref="1" FirstByte="4" BitOffset="1"/>

yoh-there

I know this is a sidetrack, but maybe some of you are interested. I took the XML files from ddt2000 pertaining to my ZOE, wrenched them through a parser to create flat data in a from a bit like: "ecu, command, bit start, bit end, offset, resolution, name, list values" etc etc, then added a module to the CanZE App ( http://canze.fisch.lu) so you can select one of it's many ECU's and then dump the entire diagnostic (easily 1000 fields). It's not done, but the code works, just need to add all ECU's and dump to a file instead of just the screen.

CanZE is is Android (Java)

Boujou

Très beau travail Xor ! j ai de même pas mal travaillé sur ce compteur et son frère de la Mégane. Pas facile de trouver ces satanés trame.

Boujou

Salut xOr,

J ai une can bus shield et j essaye de faire démarrer ce satané compteur de clio 3 ! J envois les trames suivantes : 0x35D, 0x10, 0x03, 0x00, 0x00, 0x00, 0x00, 0x50, 0x00 réveil 0x60D, 0x04,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 feux de position 0x60D, 0x06,0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 feux de croisement 0x60D, 0x04,0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 feux de route

mais ce satané compteur ne démarre que peut de fois ( ON/OFF sur l alimentation et il démarre qq fois) et n active que les feux de position et les feux de route (pas de feux de croisement et pas d afficheurs lcd)

Par contre , si j envois ces trames sur un compteur de Megane 2 ... Nickel !!!

aurais tu une explication à cela ?

x0r

Je n'ai jamais envoyé la moindre trame CAN sur le bus de ma voiture, donc non, je ne saurais pas dire. Mais c'est une expérience intéressante tout de même !

Boujou

Il me semble que sur la clio3 (et non la megane 2) certaines trames à 10,4 kbps véhiculent certaines autres informations , tel que le +APC...

Manu

Bonjour, Je suis en train de faire quelque chose de similaire pour les afficheurs déportés des autoradios Renault "update list" (liaison CAN entre l'autoradio et l'afficheur). J'ai quelques captures du bus CAN et mon but est de faire afficher des messages personnalisés sur l'afficheur déporté (je n'y arrive pas encore). Le contrôleur CAN semble être dans l'afficheur AFFA2 et l'ID CAN 0x121 contient les trames ASCII de ce qui s'affiche sur l'écran. Si quelqu'un a la référence de l'ECU afficheur, ou encore mieux, le fichier xml correspondant de DDT2000, ça me débloquerai probablement...

Alex

megane.com.pl/topic/47797-wyswietlacz-radia-update-list-protokol/

Alex

DDT2000 has no appropriate xml

Manu

Thanks Alex, that's what I was searching for since a few days!

Yass

Salut tout le monde,

Je viens juste d'obtenir le DDT2000 et je me connecte via un cable DERELEK USB-DIAG3 réf: 4250. Je suis capable de me connecter à une mégane. Mon problème c'est de savoir le layout du connecteur (direction voiture). Je veux détecter les connecteurs CAN plus précisement. Si qq'un possède le layout car la documentation est trés epuisée sur ineternet.

Merci

Manu

J'ai (presque) terminé mon projet d'afficheur Update List (can bus) : https://hackaday.io/project/27439-smart-car-radio Il y a le code pour interfacer l'écran à une carte Arduino. Il me reste à terminer la couche bluetooth pour piloter l'écran depuis mon smartphone.

x0r

Un seul mot : magnifique ! J’imagine que tout ça se passe sur le CAN multimédia et non pas sur le CAN véhicule ?

Ça me rappelle un autre truc que j’avais vu passer récemment sur Hackaday : un billet sur une personne qui avait complètement recodé un nouvel affichage déporté pour sa 207 à partir de la rétroingénierie de son bus CAN. Le résultat final était de très bonne facture : https://hackaday.com/2017/05/04/reverse-engineering-the-peugeot-207s-can-bus/

Manu

Effectivement, c'est sur un bus can dédié à l'autoradio (2 neuds can : l'autoradio et l'afficheur). Sympa le projet sur la 207!

WilliamPufy

Hi. Do you, by any chace still have the can log files?

Michael

Sorry for writing in English.. How can you import these readings into Torque application? I managed to find DPF soot in grams, number of DPF regeneration cycles but I'm particularily interested in ambient air temperature and cannot get the PID for this? Any help is appreciated.

Novsub

Bonjour,

Très intéressant comme article, j'ai cependant une question concernant les clignotants. Comment les avoirs ? Autrement, comment modifier les bauds comme indiqué ?

Merci d'avance.

roland

super post qui m'a bien aidé pour mon projet j'ai un raspberry branché sur la ligne auxilliaire d'une laguna 3 que je contrôle grace a un écran tactile je voulais hacker le comodo du volant via la prise odb située entre les siège j'apporte donc ma modeste contribution: les trames sont récupérées sur le can multimedia (pin 12 et 13 sur prise odb laguna 3) vitesse 500kbps tout se passe sur le can ID: 0x58F les trames: -0x89 0x00 0x03 0xA3 0xA3 0xA3 0xA3 0xA3 : vol+ appui court -0x89 0x00 0x43 0xA3 0xA3 0xA3 0xA3 0xA3 : vol+ appui long -0x89 0x00 0x04 0xA3 0xA3 0xA3 0xA3 0xA3 : vol- appui court -0x89 0x00 0x44 0xA3 0xA3 0xA3 0xA3 0xA3 : vol- appui long -0x89 0x00 0x05 0xA3 0xA3 0xA3 0xA3 0xA3 : mute -0x89 0x01 0x01 0xA3 0xA3 0xA3 0xA3 0xA3 : molette vers le bas -0x89 0x01 0x41 0xA3 0xA3 0xA3 0xA3 0xA3 : molette vers le haut -0x89 0x01 0x00 0xA3 0xA3 0xA3 0xA3 0xA3 : appui molette -0x89 0x00 0x07 0xA3 0xA3 0xA3 0xA3 0xA3 :bouton arriere gauche -0x89 0x00 0x08 0xA3 0xA3 0xA3 0xA3 0xA3 :bouton arriere droit

x0r

Excellent, merci beaucoup ! Ça confirme mes soupçons : les broches 12 et 13, non standardisés, sont également reliés sur la prise OBD de la Clio III (les broches non utilisées n’ont pas de contact métallique, quand on regarde avec une lampe de poche). Il s’agit donc sûrement du CAN multimédia. Les trames sont peut-être différentes sur la Clio.

cedricp

Non, sur Clio 3 comme Megane 2, la commande radio au volant va direct sur l'autoradio, pas de trames CAN pour ca... Pas de ligne CAN multimedia non plus d'ailleurs, sauf pour celles equipees du GPS d'origine.

Novsub

Petite question, est-il possible de récupérer le VIN du véhicule ? et comment ?

CraX

Bonjour, Comment est ce que l'on peut récupérer les fichiers XML du DDT2000 ? J'ai récupéré un exe du DDT2000. Est ce qu'il est dedans, si oui est ce que vous connaissez un soft pour récupérer les fichiers XML facilement ?

Lionel

Bonjour, oui les voies 12 et 13 permettent effectivement de communiquer entre autres avec le systeme radio navigation, question : Peut on communiquer avec la radio medianav via ddt2000 et obd sx en reliant les bornes 12-13 directement au CAN de la radio ? donc sans passer par UCH

Fabien

Bonjour, je me permet de vous contacter pour vous demandez de l'aide. J'ai une clio III phase 2 et j'ai acheter un autoradio neuf d'origine pour remplacer l'ancien dont la peinture s'est détériorée. Après le branchement de l'autoradio j'ai le message d'erreur "connect diag tool" J'ai une prise odb2 que je connecte en bluetooth à mon pc et le logiciel ddt4all La clé odb semble bien appairé au pc mais le logiciel ne se connecte pas. Tout ceci commence à dépasser mes connaissances et je cherche l'aide d'un spécialiste :) En espérant ne pas abuser de votre temps, peut-on échanger par message? Merci d'avance Fabien

Cisko

Bonsoir, peut-être que ce n'est pas grand-chose sur le sujet. J'ai une Nissan Micra 1200 essence 2007, presque une clio. J'ai créé un système de lecture de code obd avec MCP2515, qui fonctionne bien à 500 Kbps. Mais en lisant les données, je ne vois jamais de PID standard. Je me demandais si Nissan, comme Renault, ne les utilise pas. Je ne vois que des PID comme 35D, 2DE, 351,551. Alors que les normes comme 0x01 ou similaire. Merci et salutations de l'Italie

Bouguezzi

Bonjour, Avez vous une solution pour obtenir les codes PID spécifique qui ne sont pas listés avec les code PID standard! et merci

pierregdlj

Bonjour,

Pour répondre aux 2 derniers posts : les PID standards ne sont accessibles que sur interrogation à l'adresse 0x7E0, et la réponse associée est à l'adresse 0x7E8.

A noter que parmi les PID standards, certains ne sont pas renseignés par les calculateurs. A noter par contre que ces PID standards fonctionnent sur tous les véhicules, à l'inverse des trames décrites dans cet article, qui ne concerne que les Clio 3, Mégane 2, Twingo 2, Fluence, et probablement quelques autres modèles (Kangoo, Laguna ?).

Poster un commentaire