Comment fonctionne la réinitialisation d'usine?

18

Tous les appareils intégrés incluent une option de «réinitialisation d'usine» qui permet à l'utilisateur de réinitialiser son appareil en cas de problème.

Je développe un firmware sur une carte STM32. Le firmware comprend un chargeur de démarrage qui permet de mettre à niveau l'application via UART (en envoyant un fichier binaire qui contient la nouvelle image) et je veux ajouter une autre fonctionnalité: une réinitialisation d'usine. Lorsque l'utilisateur choisit cette option, la carte charge l'image originale.

Qu'est-ce qu'une réinitialisation d'usine? S'agit-il de charger à nouveau tout le fichier binaire en mémoire ou d'appeler simplement une fonction qui réinitialise les variables modifiées par l'utilisateur final?

Quelles sont les meilleures pratiques pour le faire?

Où stocker le FW d'origine? est-ce dans un flash interne ou externe?

Pryda
la source

Réponses:

20

De manière générale, la fonction de réinitialisation d'usine que vous mentionnez restaurera toutes les informations de données variables enregistrées aux valeurs par défaut. Il n'est pas vrai que tous les appareils intégrés aient cette capacité. Certains le font mais pas tous.

Si vous souhaitez que votre appareil prenne en charge lui-même un retour au firmware par défaut, votre conception doit intégrer une mémoire dans le circuit pour stocker cette image. Un composant commun pour cela est une puce flash SPI. Ensuite, votre chargeur de démarrage doit également être modifié pour prendre en charge un mode d'obtention d'une image de micrologiciel à partir de la puce flash SPI au lieu de récupérer l'image via le port série. Si votre appareil ne prend pas en charge le micrologiciel remplaçable par l'utilisateur, il n'est généralement pas nécessaire de fournir un moyen de restaurer le micrologiciel par défaut.

Michael Karas
la source
1
Pas vraiment une réponse, je vais donc le laisser comme un commentaire: certains appareils reviennent simplement aux paramètres par défaut, c'est facile (par exemple, effacez simplement les paramètres utilisateur). D'autres (moins, je pense) réinitialisent le firmware aux paramètres d'usine. C'est plus difficile, car vous avez besoin d'un moyen de remplacer le firmware existant par un firmware plus ancien.
Dithermaster
11

Si vous prenez l'exemple le plus courant des valeurs par défaut, il s'agit de l'UEFI (BIOS) de votre PC.

Il est fabriqué avec une puce flash et une puce de mémoire SRAM de sauvegarde sur batterie volatile. La puce flash contient le programme et la SRAM contient les paramètres.

Lors de la réinitialisation d'usine , le contenu du sram volatile est effacé. Au prochain démarrage, il détecte que la somme de contrôle des paramètres n'est pas valide et restaure les valeurs par défaut contenues dans le programme.

Cela ne se limite pas à la batterie de secours SRAM, la même chose peut être faite avec FLASH ou EEPROM. Mais la batterie de secours SRAM peut être effacée sans mettre la machine sous tension.


Un autre terme est la récupération d'usine , cela signifie simplement qu'il contient deux fois le programme principal. Mais une seule copie peut être mise à niveau par l'utilisateur.
Le double BIOS en est un exemple.

Sur les systèmes de niveau supérieur, comme les téléphones et les ordinateurs, cela signifie qu'il utilise les fichiers d'installation pour restaurer le système d'exploitation aux conditions d'usine.

Jeroen3
la source
10

La réinitialisation d'usine est ce que vous voulez que ce soit. Cela dépend de l'application et du type d'appareil.

Je fais habituellement deux choses:

  1. Assurez-vous qu'il existe toujours un moyen fiable d'entrer dans le chargeur de démarrage , de sorte que même une mise à jour partielle ou incorrecte du micrologiciel ne puisse pas briquer l'appareil.
  2. Avoir un moyen de réinitialiser les paramètres du micrologiciel au cas où l'utilisateur changerait quelque chose, une combinaison de paramètres particulière planterait l'application, etc.

Les deux peuvent être effectués avec des boutons (pressions longues, pressions courtes), des commutateurs DIP ou d'autres moyens de communication (par exemple, UART, USB).

Par exemple, si vous utilisez un GPIO pour un seul bouton, vous pouvez l'utiliser de la manière suivante:

  1. Mise sous tension + bouton enfoncé = invoquer le chargeur de démarrage
  2. Mise sous tension, bouton non enfoncé = attendre 3 s, faire clignoter une led, si un bouton est enfoncé (dans la fenêtre) et maintenu enfoncé pendant 5 s, puis réinitialiser les paramètres du firmware
filo
la source
2

Comme vous l'avez dit, la réinitialisation d'usine recharge l'image d'usine initiale sur l'appareil. Cela peut être nécessaire en cas de mauvaise configuration où l'utilisateur ne savait tout simplement pas ce qu'il faisait ou voulait simplement revenir à la configuration initiale. Dans les cas comme le vôtre où une mise à jour logicielle est effectuée, vous pouvez vouloir couvrir certains scénarios de défaillance pendant la mise à jour. Dans ce cas, vous pouvez même avoir une mémoire flash dédiée avec l'image d'usine d'origine stockée qui peut être sélectionnée à l'aide d'un cavalier pour restaurer la configuration d'usine par défaut. C'est par exemple fait sur les cartes mères de l'ordinateur où vous pouvez restaurer la configuration d'origine du BIOS au cas où une mise à jour échouerait et corromprait l'image principale.

le pape
la source