Deploiement et Mise a Jour du Firmware Legacy¶
Ce document decrit les mecanismes de deploiement, mise a jour OTA et bootloader du firmware BP_MQX_ETH.
Retour : Client Embarque BP_MQX_ETH | Voir aussi : Securite | Build | Protocoles | GPIO | Debug | Hardware SC944D
1. Architecture Memoire Flash¶
Le MCF52259 dispose de 512 Ko de flash interne organisee en zones :
┌────────────────────────────┐ 0x00000000
│ Vecteurs d'interruption │
│ + Bootloader │
├────────────────────────────┤
│ .APP_JUMP │ Code de saut vers __boot
├────────────────────────────┤
│ .APP_CRC │ CRC de l'application (2 octets)
├────────────────────────────┤
│ .APP_VERSION │ Version (us_BP_VERSION_SERVEUR)
├────────────────────────────┤
│ │
│ Application principale │ FLASH_APP_SOFT_START
│ (BP_MQX_ETH.elf) │ ↕
│ │ FLASH_APP_SOFT_END
├────────────────────────────┤
│ Zone nouveau programme │ Pour mise a jour OTA
│ (Flash SPI externe │ SST25VF016B, 2 Mbit
│ via CS2) │
└────────────────────────────┘
2. Bootloader¶
Fonctionnement¶
Le bootloader est minimal et remplit 3 fonctions :
- Verification CRC : Compare le CRC stocke dans
.APP_CRCavec le CRC calcule de la zone application - Verification version : Lit
.APP_VERSIONpour reporter au serveur - Saut vers l'application : Execute
APP_CALL()(assembleur inline) pour demarrer MQX
Sections Absolues¶
#pragma section far_absolute R ".APP_JUMP"
// Code assembleur : saut vers __boot
#pragma section far_absolute R ".APP_CRC"
__declspec(far_absolute) unsigned short CRC = 0x0102;
#pragma section far_absolute R ".APP_VERSION"
__declspec(far_absolute) unsigned short VERSION = us_BP_VERSION_SERVEUR; // 37
3. Mise a Jour OTA (Over-The-Air)¶
Flux de Telechargement¶
sequenceDiagram
participant SRV as Serveur Essensys
participant FW as BP_MQX_ETH
participant EEPROM as EEPROM SPI (CS2)
Note over SRV: Nouvelle version disponible
SRV-->>FW: Indication MAJ via /api/myactions
FW->>FW: sc_OpenFlash() — Ouvre zone flash/EEPROM
FW->>FW: sc_EffacerZoneNouveauProgramme() — Efface zone
loop Pour chaque ligne S19
FW->>SRV: Telecharge le fichier firmware
SRV-->>FW: Ligne S19
FW->>FW: sc_FlashMemoriserBinaireRecu()
Note over FW: Parse la ligne S19
FW->>FW: uc_MemoriseLigneS19EnFlash()
FW->>EEPROM: Ecrit les donnees en EEPROM SPI
end
FW->>FW: sc_CheckZoneNouveauProgramme()
Note over FW: Calcul CRC zone complete
alt CRC valide
FW->>FW: Demande reset (MCF52259_REBOOT)
Note over FW: Bootloader copie et redemarre
else CRC invalide
Note over FW: Abandon de la mise a jour
end
FW->>FW: sc_CloseFlash() — Ferme zone flash
Format S19 (Motorola)¶
Le firmware est transmis au format S-Record :
| Type | Description | Traitement |
|---|---|---|
S0 |
Header | Ignore |
S3 |
Donnees 32 bits | Parse et ecrit en EEPROM |
S7 |
End record | Ignore |
Structure d'une ligne S3 :
S3 LL AAAAAAAA DD DD DD ... CC
│ │ │ │ │
│ │ │ │ └─ Checksum (complement a 1)
│ │ │ └────────────── Donnees
│ │ └─────────────────────── Adresse 32 bits
│ └────────────────────────── Longueur (octets apres LL)
└───────────────────────────── Type de record
Verification d'Integrite¶
| Etape | Fonction | Verification |
|---|---|---|
| Ligne S19 | uc_MemoriseLigneS19EnFlash() |
Checksum S19 (complement a 1) |
| Zone complete | us_CalculerCRCZoneNew() |
CRC-16 sur toute la zone (hors zone CRC) |
| Post-reset | Bootloader | Comparaison CRC .APP_CRC vs calcule |
Fonctions Cles¶
| Fonction | Fichier | Role |
|---|---|---|
sc_OpenFlash() |
Ethernet/Download.c |
Ouverture zone flash/EEPROM |
sc_EffacerZoneNouveauProgramme() |
Ethernet/Download.c |
Effacement zone OTA |
sc_FlashMemoriserBinaireRecu() |
Ethernet/Download.c |
Traitement des lignes S19 |
uc_MemoriseLigneS19EnFlash() |
Ethernet/Download.c |
Ecriture en EEPROM SPI |
sc_CheckZoneNouveauProgramme() |
Ethernet/Download.c |
Verification CRC + demande reset |
us_CalculerCRCZoneApp() |
Ethernet/Download.c |
CRC zone application courante |
us_CalculerCRCZoneNew() |
Ethernet/Download.c |
CRC zone nouveau programme |
vd_MCF52259_REBOOT() |
H/Hard.h |
Redemarrage du MCU |
4. Methode JTAG/BDM (acces physique)¶
Prerequis¶
| Element | Description |
|---|---|
| Programmeur | P&E Micro BDM |
| IDE | CodeWarrior pour Coldfire |
| Fichier | BP_MQX_ETH.elf (ELF) |
| Configuration | .launch (fichier de lancement) |
Procedure¶
- Connecter le programmeur BDM au connecteur JTAG de la carte
- Ouvrir
BP_MQX_ETH_m52259evb_Int_Flash_Debug_PEBDM.launchdans CodeWarrior - Lancer le flash/debug
- Le programmeur ecrit directement en flash interne
- Reset de la carte → le bootloader verifie le CRC et lance l'application
Quand utiliser JTAG vs OTA¶
| Critere | JTAG | OTA |
|---|---|---|
| Acces physique | Requis | Non requis |
| Fiabilite | Maximale | Depend de la connexion reseau |
| Usage | Premier flash, recovery | Mises a jour normales |
| Risque de brick | Non (ecrit direct en flash) | Oui (si CRC echoue, ancien firmware conserve) |
5. Note sur l'Obsolescence¶
La mise a jour OTA existe dans le firmware mais les limitations suivantes la rendent rarement utilisee en pratique :
- Le bootloader ne supporte pas le rollback automatique
- La connexion HTTP en clair rend le telechargement vulnerable
- La taille de la flash interne limite les fonctionnalites ajoutables
- L'absence de TLS empeche l'authentification du serveur de mise a jour
- Le firmware est considere comme fige dans son etat actuel
References Sources¶
- Telechargement OTA :
client-essensys-legacy/Ethernet/Download.c - Bootloader :
client-essensys-legacy/C/bootloader.c - Linker script :
client-essensys-legacy/m52259evb_Int_Flash_Debug/intflash.lcf - Reboot :
client-essensys-legacy/H/Hard.h