Cet article traite du fonctionnement logiciel du MS41. Je ne vais que gratter la surface.
J’ai analysé une grosse partie du logiciel MS41 ID41. Tout n’est pas parfait et il y a encore des inconnues. mais j’explique ici de manière simplifié le fonctionnement de certaines partie de ce que j’ai pu comprendre du logiciel.
Des fautes peuvent êtres présentes ou même des approximations.
J’essayerai d’ajouter dans le futur les modifications des autres version logicielles.
Plages d’adresses et octets par fonction:
Le MS41 est composé de 256Ko de mémoire flash, cependant cette mémoire est sur le même bus que la ram. donc toute une partie n’est pas adressable.
| Catégorie | Octets identifiés |
| Moteur | 20 166 |
| Sécurité | 11 622 |
| K-line | 9054 |
| Système | 8270 |
| Cliquetis | 7324 |
| Adaptations | 6470 |
| Injection | 6404 |
| Allumage | 5766 |
| EEPROM | 5470 |
| EWS | 2858 |
31,8 % du fichier full read est du code identifié pendant que 64,3 % est de la flash vierge
| Catégorie | addresses full read (début →fin) |
| ADAPTATIONS | 0x2974E–0x2A754 ; 0x2B610–0x2B70C ; 0x2DB14–0x2E358 |
| ALLUMAGE | 0x00E78–0x01E80 ; 0x2BB42–0x2BCC8 ; 0x35FAA–0x362F0 ; 0x36606–0x36816 |
| CLIQUETIS | 0x236D4–0x24000 ; 0x28BE2–0x28F84 ; 0x2C000–0x2CD8E ; 0x2EF1C–0x2F15C |
| EEPROM | 0x05718–0x05BCC ; 0x20096–0x202D6 ; 0x202D6–0x21140 |
| EWS | 0x0473C–0x0496C ; 0x04A24–0x04D28 ; 0x2268E–0x227B2 ; 0x2BFB8–0x2BFFE ; 0x2F840–0x2F9EC ; 0x362F0–0x365D2 |
| INJECTION | 0x0006C–0x001BC ; 0x008EE–0x00E78 ; 0x21434–0x214F2 ; 0x22E16–0x236D4 ; 0x288F4–0x28BE2 ; 0x2A754–0x2A8A4 ; 0x2E358–0x2E780 ; 0x36614–0x3665C |
| KLINE | 0x0496C–0x0498A ; 0x04D28–0x05438 ; 0x0552E–0x05718 ; 0x20000–0x20096 ; 0x26428–0x27118 ; 0x27688–0x27C62 ; 0x27D70–0x28000 ; 0x2BD10–0x2BF7A ; 0x2F37C–0x2F568 |
| MOTEUR | 0x06D90–0x071B8 ; 0x2234E–0x224C4 ; 0x24000–0x25404 ; 0x25FB6–0x26428 ; 0x286B4–0x288F4 ; 0x28F84–0x2974E ; 0x2B48C–0x2B610 ; 0x2B91E–0x2BB42 ; 0x2CD8E–0x2D700 ; 0x2E780–0x2EB06 ; 0x2F15C–0x2F37C ; 0x34BD8–0x35FAA ; 0x366BE–0x366D4 |
| SECURITE | 0x05BCC–0x05C14 ; 0x21140–0x21434 ; 0x219E6–0x221A8 ; 0x224C4–0x2268E ; 0x227B2–0x22E16 ; 0x25404–0x25FB6 ; 0x27118–0x27688 ; 0x27C62–0x27D70 ; 0x2B70C–0x2B91E ; 0x2BCC8–0x2BD10 ; 0x2BF7A–0x2BFB8 ; 0x2F568–0x2F840 ; 0x2F9EC–0x2FC52 ; 0x365D2–0x36606 |
| SYSTEME | 0x00000–0x000DE ; 0x04000–0x04730 ; 0x05438–0x0552E ; 0x06270–0x06400 ; 0x071B8–0x076AE ; 0x221A8–0x2234E ; 0x280F2–0x28438 ; 0x34000–0x34BD8 |
EWS
1- A la mise sous tension du calculateur moteur, le CPU initialise son port série.(ASC1)
2- Le Calculateur moteur attend ensuite les trois lettres « BMW » envoyé sur le fil par l’EWS. Sans ca rien ne se passe.
3- Le DME présente un chalenge composé du code ISN ainsi que sa date de fabrication.
4- Le DME Calcule la réponse attendue de la par l’EWS. le résultat est une série de 4 octets
5- le DME compare le résultat avec celui de l’EWS.
Si ça correspond: Le calculateur autorise le fonctionnement normal du moteur
Si ça ne correspond pas: le calculateur retente 2 fois en incrémentant un compteur avant d’abandonner et de reste en immobilisation active.
Accès KLINE sécurisé
Il existe dans le calculateur un second jeu, non documenté et non utilisé dans INPA ou autres logiciels dispo de BMW, un mode de diagnostique avancé caché derrière un mot de passe.
L’accès sécurisé permet, entre autres, de:
- Réécrire des zones mémoires
- Tester pour trouver les premières zones non vides de mémoire
- Lecture de la mémoire
- Selftest de l’EEPROM (pas la flash ni la ram)
Le moyen d’y accéder se fait par une commande suivit d’un mot de passe.
Cette commande défini un flag qui permet ensuite d’utiliser un set de commande caché
0x25, 0x21, 0x31 et d’autres. Je prendrait le soin de tout documenter dans la section ADS/ MS41du Wiki.
Le paquet magique de déverrouillage est le suivant:
12 08 90 42 4D 57 0E DC
Bien que connu, puisque utilisé par des logiciels qui permettent de flasher les MS41, celui ci été resté secret. (pas de secret avec moi)
