Double flash, double carto

Pour commencer, étudions de plus près l’eeprom 29f400bt contenu dans l’edc15.

pinout 29f400bt

Les entrées de A0 à A17 sont les sélections d’adresses (la même adresse que l’on retrouve dans un editeur hexa), le microcontrôleur de l’ecu quand il a besoin d’une info, envoie cette adresse à la 29f400 qui lui redonne les données par les pins DQ0 à DQ15 (les données qu’on retrouvent dans l’éditeur hexa).
Lorsque les données sont disponible sur les pins DQ, la sortie RY/BY# passe de 0 à 1 (de 0v à 5v) (il y a un temps de réponse entre l’entrée des adresses et la sorties des données, c’est le petit chiffre qu’il y a à la fin de l’eprom, 70 voulant dire 70ns).
CE# (chipe enabled) est une entrée d’activation. Lorsque cette pin est à 0 l’eeprom est active, si à 1 elle est désactivée.
VSS est la masse utile a l’alimentation de l’eeprom
OE# (output enable) est une entrée d’activation des sortie. Lorsque cette pin est a 0 les sorties DQ sont active, si a 1 elles sont désactivée.
VCC est l’alimentation en 5v
BYTE# est une entrée de configuration de l’eeprom pour faire marcher les sorties DQ soit sur 8bits (juste DQ0-DQ7) soit sur 16bits (DQ0-DQ15)
WE# (write enabled) est une entrée d’écriture, si a 1 l’eeprom est en lecture, si a 0 en écriture.
RESET# sert à remettre a 0 l’eeprom si elle est mise a 0.
Cette 29f400 contient un fichier de 512ko, une technique pour pouvoir avoir 2 cartos serait donc d’avoir une flash de 1Mo que l’ont couperais en 2.

Maintenant prenons une 29f800.

pinout 29f800bt

On remarque qu’elle est presque identique à la 29f400. Seule une entrée A18 est rajouté a la place de RY/BY# et RY/BY# se retrouve plus haut.
On va utiliser cette entrée A18 pour découper la flash en 2 et en appliquant soit la masse soit du 5v afin de sélectionner l’une ou l’autre partie.
Longtemps j’ai pensé que la pin RY/BY# de la 29f400 d’origine de l’edc15p+ était utilisée. Apres étude du pcb de l’edc15 elle n’est pas reliée au microcontroleur (il est prévu un emplacement pour une résistance mais elle est inexistante).
On va donc pouvoir monter une 29f800 à la place de la 29f400 sans aucun problème.

switch A18

Pour pourvoir switcher entre les deux bank, on va souder un fil à la place de la résistance (séparant microcontrôleur et eeprom) et y appliquer soit un 0 soit un 1.
Dans mon prototype j’utilise un bouton poussoir qui envoi soit la masse, soit 5v, que je viens prendre ailleurs sur le pcb.
Ce n’est pas une bonne solution car elle engendre des plantages, nous y reviendrons par la suite.

Si on regarde l’organisation de la mémoire de la 29f400BT et de la 29f800BT on remarque qu’elles sont partitionnées en différent secteurs.

secteurs 29f400
secteurs 29f800

On retrouve dans le haut de la 29f800 la même organisation que la 29f400 et dans le bas on retrouve 8 autres secteurs supplémentaires. Ce secteurs ont été créés pour être écris indépendamment les uns des autres avec 4 secteurs plus petit (en haut) servant au secteur de boot. Lorsque l’ecu va lire les données d’une bank ou d’une autre bank, il n’y aura pas de problème mais lorsque l’on va l’utiliser pour l’écriture il va falloir faire en sorte que l’ecu soit comme d’origine. (d’origine il y a 11 secteurs, si on est en bank 2 on a bien 11 secteurs, si on est en bank 1 il n’y a plus que 8 secteurs, l’ecu risque de ne pas aimer !)

Concernant la partie programmation, il va falloir créer un ficher de 1Mo comportant 2 fichier de 512ko collé l’un a l’autre.
J’ai utilisé le soft de mon programmateur d’eeprom labtool mais n’importe quel éditeur hexa ou même winols peut le faire.

Je charge mon ori à l’adresse 0

load ori

Et mon mod a l’adresse 80000

load mod

Ce qui me donne mon ori de 0 à 7FFFF et mon mod de 80000 à FFFFF

29f800 on labtool

On peut graver l’eeprom et la monter dans notre ecu, on se retrouve avec nos 2 cartos qu’on peut switcher comme on veut.
Maintenant concernant le flash par obd je pensais pouvoir programmer chaque bank comme je le désirais. Si je voulais programmer la bank 1, je switchais en bank1 et j’envoyais par prise diag mon fichier de 512Ko, idem pour le bank 2.
Bien tenté mais ca ne marche pas. Quand l’interface de diag commence la programmation elle envoie une commande à l’eeprom d’effacement, commande qui efface la totalité de l’eeprom. A la fin du flash, notre fichier est bien présent et notre ecu marche avec le nouveau fichier mais si la on change de bank on switch sur une partie de l’eeprom qui s’est fais effacée et qui est vierge (et la plantage d’ecu !).
Apres réflexions j’ai trouvé une parade, je mets une protection sur les 8 secteurs de la bank 1 (mon fichier ori), protection qui empêche ces secteurs de s’effacer lors d’un effacement complet de l’eeprom.

29f800 protect

Ainsi cette technique marche mais on ne peut programmer par obd seulement notre bank2 (mieux que rien !)

Coté commande, j’ai monté pour mes essais seulement un switch qui basculait entre 0 et 5v retrouvé sur un emplacement de condo de découplage non monté.

switch A18

Le problème est qu’il n’y a pas d’anti-rebond sur le bouton.
Explication: Lorsque l’on switch d’un coté a un autre du bouton, la lamelle qui faisait contact avec le 5v par exemple, décolle et se retrouve un moment au milieu entre le 5v et la masse, elle ne fait plus contact avec ni l’un ni l’autre et l’entrée A18 se retrouve en l’air. Or en numérique, une entrée ne dois rester en l’air, elle se comporte comme une antenne et ce sont soit de 0 soit des 1 qui sont utilisé. On se retrouve a switcher très rapidement entre le bank1 et le bank2 ce qui utilise beaucoup l’eeprom, que le microcontrôleur ne peut lui plus utiliser (risque de plantage de l’ecu).
Dans la suite du mouvement du contact la lamelle viens rentrer en contact avec la masse, mais elle rebondit dessus et repart en arrière, donc on a un 0 puis de nouveau une multitude de 0 et de 1, puis elle revient sur la masse, fais un plus petit rebond ect… jusqu’a se stabiliser sur la masse.
Pour éliminer ce genre de problème on utilise des montages anti rebonds.

Les commentaires sont fermés.