Scénario
Je souhaite mettre à jour un appareil IoT à faible coût par voie hertzienne avec un nouveau micrologiciel mettant à jour le ou les microcontrôleurs de l'appareil. La mémoire du microcontrôleur est une mémoire flash de l'ordre de 32k à 128k (chaque cent compte). Cette mémoire bon marché a une limitation majeure: elle ne peut être effacée que par bloc.
Question
Cela signifie-t-il que je ne peux pas effectuer de mises à jour différentielles ( delta )? Dois-je toujours mettre à jour toute la mémoire du contrôleur (ou au moins des parties substantielles)?
Je veux réduire le besoin de tout flasher et risquer de bricker complètement l'appareil autant que possible. Existe-t-il des stratégies lors du flashage des microcontrôleurs dans l'air?
Réponses:
La réponse simple est oui - vous avez besoin de suffisamment de blocs flash pour prendre en charge le bootloader et les images de code A / B si vous voulez une haute fiabilité. Avant d'activer la nouvelle image, vous pouvez écrire le tout, le vérifier et éventuellement réessayer.
Cependant, c'est une stratégie coûteuse / fiable et il y a des choses que vous pouvez faire pour réduire les frais généraux. La prise en charge de bas niveau des mises à jour OTA peut également faire partie du micrologiciel ou du système d'exploitation de l'appareil, vous pouvez donc éviter de rouler vous-même à moins que vous ne vouliez apprendre. Cette fonctionnalité peut être décrite comme
FOTA
.Le partitionnement de votre base de code permet des mises à jour incrémentielles, dans le meilleur des cas, le chargeur de démarrage est en mesure de mettre en place la connexion réseau, de télécharger et de vérifier le code sans avoir besoin de code utilisateur de secours. Avec une passerelle locale, la gestion de cette tâche peut être déléguée à partir des points de terminaison à faible coût.
De nombreux appareils ont une petite quantité de flash d'effacement des mots, et même à défaut, vous pouvez généralement définir des bits sans avoir à effacer un bloc entier. Ces fonctionnalités peuvent être utilisées pour manipuler des tables de sauts et assembler du code mis à jour par blocs de tailles de blocs. Même si vous avez initialement prévu un espace de code A / B complet, vous devrez peut-être revenir à un schéma plus complexe lorsque la base de code se développe trop.
Pour clarifier les fonctionnalités qui peuvent être obtenues avec une solution sophistiquée de micrologiciel par voie hertzienne, le chargeur de démarrage et potentiellement une pile de communication principale peuvent rester résidents tandis que l'espace d'application utilisateur restant est flashé à nouveau. Cela ne nécessite aucune surcharge (en particulier si le partitionnement de bloc est doux). Dans le scénario où la pile de communication doit être mise à niveau, la région généralement utilisée pour le code d'application peut être temporairement utilisée pendant le téléchargement et la vérification. Pour y parvenir, il faut un certain support dans le SoC, mais les appareils de 2e et 3e génération conçus dans cet esprit existent déjà.
la source
Mis à part votre code qui effectue la mise à jour qui serait relativement statique, vous devez conserver deux images dans votre stockage: une image active et une image de sauvegarde. Chaque fois que vous devez mettre à jour, faites-le dans la sauvegarde, puis activez-le. Une fois stable, mettez à jour l'ancienne image active qui devrait maintenant être votre sauvegarde.
Dans cet esprit, vous pouvez utiliser des algorithmes de nivellement de l'usure lors de la mise à jour des deux images. Le code de ces algorithmes peut prendre environ 10 à 15% du stockage total, mais cela en vaut la peine pour prolonger la durée de vie de l'appareil.
( Techtarget.com: nivellement d'usure )
la source
Freescale Semiconductor décrit un moyen robuste de mise à niveau du micrologiciel par voie hertzienne pour leurs microcontrôleurs Kinetis .
Il s'appelle: Program Flash Memory Swap .
Vous pouvez mettre à jour des blocs puis les échanger.
Le document lié contient une description détaillée.
Il garantit des mises à niveau plus sûres du micrologiciel, mais comme il nécessite plus de mémoire flash, il coûte certainement plus cher . En outre pas applicable pour tout type de microcontrôleur, seuls ceux qui soutiennent échange blocs flash interne.
la source