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?
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.
la source
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:
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:
la source
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.
la source