PFlash et DFlash : la mémoire non volatile du microcontrôleur en détail
La mémoire non volatile d'un microcontrôleur moderne se répartit en deux blocs aux rôles opposés : la PFlash (Program Flash) et la DFlash (Data Flash). La fiche la carte mémoire d'un calculateur en donne les adresses ; celle-ci en explique la physique et la raison d'être.
La flash programme : dense et rapide en lecture
La PFlash porte le code applicatif (ASW), les bootloaders et la calibration — c'est elle qui contient les cartographies. Les tailles disent l'évolution : environ 1,5 Mo sur un TC1766, 4 Mo sur un TC1797, 8 Mo sur un AURIX TC29x, et jusqu'à 16 Mo sur un TC39x, organisés en cinq blocs de 3 Mo plus un bloc de 1 Mo (PF0 à PF5). Le processeur y exécute son code en place (sans le recopier ailleurs), ce qui impose une lecture très rapide. Pour cela, la PFlash est découpée en banques : un cœur peut lire une banque pendant qu'une autre est en cours de programmation, mécanisme indispensable aux mises à jour partielles.
La data flash : petite mais endurante
La DFlash émule une EEPROM : elle stocke ce qui change en permanence — adaptatifs, compteurs, codes défaut persistants, et les zones d'identité (VIN, codes immobiliseur, codage injecteurs). Sur AURIX TC3xx, elle se répartit en deux banques (DFLASH0 et DFLASH1) et va de 128 Ko à 1024 Ko selon la variante. Ses secteurs d'émulation EEPROM mesurent 4 Ko en mode simple, ou 2 Ko en mode dit complementary sensing, plus robuste. Le mécanisme d'émulation lui-même fait l'objet de l'EEPROM émulée.
La règle de la NOR embarquée : effacer avant d'écrire
La flash embarquée est une NOR, et elle obéit à une contrainte physique incontournable : on ne réécrit pas un octet en place. L'effacement remet les bits d'un secteur entier à l'état « 1 » ; l'écriture ne peut ensuite que faire passer certains bits de 1 à 0. Autrement dit, pour changer une seule cellule déjà programmée, il faut effacer tout le secteur qui la contient, puis le reprogrammer. C'est cette mécanique — et non un choix logiciel — qui explique le découpage en secteurs de tailles inégales : de petits secteurs (de l'ordre de 16 Ko) en bas de la mémoire pour le bootloader, de gros secteurs (256 Ko et plus) pour l'applicatif. On protège ainsi le chargeur d'amorçage indépendamment du reste, comme le détaille Bootloader et BSL.
La granularité d'écriture
L'écriture, elle, ne se fait pas bit par bit mais par mots larges alignés — typiquement des blocs de plusieurs dizaines d'octets programmés d'un coup (le wide word ou burst). Cette granularité impose l'alignement : une donnée à modifier s'inscrit toujours dans l'unité d'écriture minimale du composant. Pour le motoriste, cela reste transparent — l'outil de programmation respecte ces contraintes — mais cela explique pourquoi une opération de flash procède par blocs, effaçant puis reprogrammant des régions entières, et non octet par octet.
Pourquoi deux flashs et non une seule
C'est le point de fond. La calibration (en PFlash) ne change qu'exceptionnellement : une reprogrammation en atelier, un rappel constructeur. Les adaptatifs (en DFlash) changent en permanence, à chaque cycle de conduite. Ces deux usages ont des besoins d'endurance opposés : la PFlash est optimisée pour la densité et la vitesse de lecture, la DFlash pour l'endurance et l'altération fréquente de petites quantités de données. Fusionner les deux imposerait à toute la mémoire l'endurance la plus exigeante, au prix de la densité. Séparer les deux mémoires, c'est donner à chacune la technologie que son usage réclame — un arbitrage détaillé dans l'endurance et la rétention de la flash.
Ce que cela implique pour une lecture
La conséquence pratique est claire : une lecture sérieuse doit capturer les deux mémoires. Une lecture qui ne récupère que la PFlash laisse de côté l'identité et les adaptatifs de la DFlash, avec le risque, en cas de restauration, d'un non-démarrage ou d'un déséquilibre cylindre. C'est pourquoi la sauvegarde intégrale précède toute intervention. Le fonctionnement de la NOR embarquée diffère par ailleurs de celui de la flash NOR parallèle externe des générations anciennes : intégrée au processeur, elle est inséparable de ses protections, ce qui change les modes d'accès décrits dans OBD, bench, boot. Enfin, chaque mot lu est vérifié par l'ECC : la mémoire ne se contente pas de stocker, elle contrôle en continu son propre contenu.
Lire pendant qu'on écrit, et les blocs de configuration
Le découpage en banques a une raison qui dépasse la performance : il autorise la lecture d'une banque pendant la programmation d'une autre. C'est précieux lors d'une mise à jour, où le calculateur doit disposer d'un code exécutable tant que la nouvelle image n'est pas intégralement écrite et validée — une écriture interrompue par une coupure ne doit jamais laisser le processeur sans programme. À côté des banques applicatives, le silicium réserve de petits blocs de configuration qui portent des paramètres d'usine et des réglages relatifs à l'accès à la mémoire ; ils font partie de l'organisation interne au même titre que les secteurs de programme, et déterminent quelles régions sont accessibles et dans quelles conditions. Enfin, un en-tête de démarrage placé en tête de flash indique au processeur le point d'entrée du code : c'est lui qui est lu en premier au reset, avant même l'applicatif, ce qui explique la place particulière des tout premiers secteurs et le soin apporté à leur protection. Comprendre cette organisation évite de raisonner sur la flash comme sur un simple bloc homogène : c'est une structure hiérarchisée où chaque région a un rôle et un régime d'accès propres.
Voir aussi la carte mémoire d'un calculateur, EPROM, EEPROM, Flash et l'EEPROM émulée.
Sur ANP Engineering — file service de reprogrammation moteur pour professionnels : file service ECU, correction de checksum, calculateurs pris en charge, tarifs.
