Mise à jour d'un micrologiciel sur site à l'aide du mode DFU d'un microcontrôleur

Par Jacob Beningo

Avec la contribution de Rédacteurs nord-américains de DigiKey

Presque tous les systèmes embarqués doivent avoir la possibilité de mettre à jour leur micrologiciel sur site afin d'ajouter de nouvelles fonctionnalités ou de corriger les bogues. Toutefois, les mises à jour micrologicielles sur site peuvent représenter un défi pour les développeurs, car ils doivent programmer leur propre chargeur d'amorçage ou s'en procurer un auprès d'un fournisseur de composants tiers.

Mais il existe une solution plus simple. Cet article vous indiquera comment utiliser la fonction DFU (mise à jour micrologicielle) qui est intégrée à de nombreux microcontrôleurs, mais trop souvent négligée.

Options de mise à jour micrologicielle

Le développement d'un chargeur d'amorçage à partir de zéro n'est pas une tâche facile. Les développeurs doivent analyser leur espace Flash pour permettre à plusieurs applications de coexister. Ils doivent ensuite développer un moyen de transférer leurs données binaires compilées vers le microcontrôleur, sans avoir recours à un outil de programmation. Cela leur demande de développer leur propre protocole de communication ou de rendre leur système plus complexe en ajoutant une mémoire externe pour sauvegarder de nouvelles images. Ils peuvent également augmenter la quantité de mémoire interne disponible sur leur microcontrôleur.

De plus, le logiciel lui-même peut devenir plus complexe, car le chargeur d'amorçage devra définir l'état du système et déterminer s'il est sûr ou non d'accéder au code d'application.

L'utilisation d'un chargeur d'amorçage personnalisé peut fournir aux développeurs la flexibilité dont ils ont besoin pour leurs applications, mais il existe une norme de mise à jour micrologicielle qui peut fonctionner dans de nombreuses applications, sans effort de la part du développeur : la classe DFU (mise à niveau micrologicielle) de la norme USB. Elle peut être utilisée pour mettre à jour le code d'application d'un microcontrôleur sur site par le biais de son port USB, réduisant ainsi considérablement le cycle de développement et le processus de mise à jour micrologicielle.

Le mode DFU est devenu tellement omniprésent que certains fournisseurs de microcontrôleurs, tels que STMicroelectronics, incluent même le logiciel nécessaire aux mises à jour en le figeant dans le code de leur mémoire ROM. Ceux qui ne le font pas fournissent souvent un exemple de code à utiliser pour prendre en charge le mode DFU.

Sélection d'un microcontrôleur compatible DFU

Le moyen le plus facile de prendre en charge le mode DFU est de sélectionner un microcontrôleur qui l'intègre déjà dans sa mémoire ROM, comme les microcontrôleurs STM32 de STMicroelectronics. Parmi ces modèles, les dispositifs les plus intéressants à tester pour les développeurs sont ceux proposés sur le nœud de découverte IoT STM32 et le kit de découverte STM32F429.

Image du nœud de découverte IoT STM32 de STMicroelectronics

Figure 1 : Le nœud de découverte IoT STM32 de STMicroelectronics est basé sur un cœur ARM® Cortex®-M4 avec un microcontrôleur STM32L475 intégrant les fonctions de mode DFU pour les mises à jour micrologicielles. Ce dispositif est particulièrement conçu pour être utilisé en tant que nœud IoT. (Source de l'image : STMicroelectronics)

Le nœud de découverte IoT STM32 est une carte de développement économique conçue pour être utilisée en tant que nœud de capteur IoT. La carte comprend différentes interfaces de connexion, comme Wi-Fi ou Bluetooth. Plus intéressant encore, le STM32L475 intégré fournit aux développeurs la possibilité de tester et d'utiliser les fonctions DFU sur un dispositif conçu pour se connecter à Internet.

Pour les développeurs qui souhaitent seulement tester le mode DFU sur un dispositif normal autonome, le kit de découverte STM32F429 est un kit de développement économique et reconnu pour la série STM32F4 de microcontrôleurs. Parlons à présent de la façon dont les développeurs peuvent tester le mode DFU sur ces microcontrôleurs.

Image du kit de découverte STM32F429 de STMicroelectronics

Figure 2 : Le kit de découverte STM32F429 de STMicroelectronics est basé sur un cœur ARM® Cortex®-M4. Le microcontrôleur de cette carte de développement économique inclut également des capacités de mode DFU pour les mises à jour micrologicielles. (Source de l'image : STMicroelectronics)

Un exemple DFU simple

L'accès au mode DFU est différent sur chaque microcontrôleur. À titre d'exemple, regardez comment un développeur pourrait mettre à jour son micrologiciel sur un dispositif doté d'un microcontrôleur STM32L475.

Comme indiqué précédemment, les microcontrôleurs STM32 comprennent un chargeur d'amorçage DFU intégré à leur mémoire ROM. Pour accéder au chargeur d'amorçage, le développeur doit connecter l'une des broches BOOT à la masse, pendant le démarrage du microcontrôleur. Les broches BOOT contrôlent le mode de démarrage du microcontrôleur, par exemple à partir de la mémoire Flash, RAM, ou dans le cas présent, le mode USB DFU.

Préparer une application à être téléchargée à l'aide du mode DFU ne requiert aucun autre effort de la part du développeur. L'ensemble de compilateurs GCC (GNU Compiler Collection), ainsi que d'autres chaînes d'outils, prennent en charge la génération d'un fichier DFU lorsqu'une application est compilée. Ici, la difficulté pour le développeur est de savoir où le fichier est stocké : comme avec n'importe quelle application, le dossier de débogage ou contenant les objets se trouve au même endroit que le fichier .dfu.

Le fichier DFU ressemble beaucoup aux formats d'enregistrement d'autres applications, comme les fichiers binaires, s-record ou hex. Le format de fichier contient l'adresse et les informations de données qui sont transmises via USB, traitées, puis inscrites à l'endroit spécifié dans la mémoire Flash. Le processus est si simple que les développeurs doivent rarement, si ce n'est jamais, examiner le protocole utilisé. Tout cela reste abstrait en arrière-plan, ce qui simplifie le processus de mise à jour micrologicielle et le travail de développement.

Différents outils sont à la disposition des développeurs pour transférer leur application vers leur microcontrôleur à l'aide de DFU. Un outil général de ligne de commande qui peut être utilisé est dfu-util. Il est disponible sur Linux et Windows® en tant que pack logiciel open-source. Lorsqu'un développeur travaille avec une chaîne d'outils STM, il peut tirer parti de l'application DfuSe de STMicroelectronics (Figure 3).

Image de l'outil DfuSe de STMicroelectronics

Figure 3 : L'outil DfuSe de STMicroelectronics peut être utilisé pour programmer un fichier DFU généré par un compilateur comme GCC et chargé sur un microcontrôleur compatible DFU. (Source de l'image : Beningo Embedded Group)

DfuSe est un utilitaire à interface utilisateur graphique Windows permettant de détecter tous les dispositifs STM32 mis sous tension en mode DFU et connectés via USB à l'ordinateur. Les développeurs peuvent récupérer certaines informations, comme le fournisseur du programme et les identifiants de produit. Si l'espace Flash n'a pas été correctement sécurisé, ils sont également en mesure de copier le contenu de la mémoire du microcontrôleur et de le sauvegarder sur l'ordinateur à l'aide de la boîte de commande « Upload Action » (télécharger).

Lorsqu'ils utilisent DfuSe, les développeurs se servent généralement des sections « Upgrade or Verify Action » (mise à niveau ou vérification) uniquement. Dans cette zone, les développeurs peuvent sélectionner le fichier de leur application DFU, puis sélectionner le bouton de mise à niveau. DfuSe coordonnera alors automatiquement le processus de mise à jour micrologicielle jusqu'au chargement complet du fichier sur le microcontrôleur. Les développeurs peuvent ensuite choisir de vérifier la bonne réception de l'image. Une fois la vérification effectuée, les broches BOOT peuvent revenir à leur configuration par défaut, comme le démarrage sur Flash, puis le mode « Leave DFU » (quitter DFU) est sélectionné pour charger et exécuter le micrologiciel mis à jour.

Utilisation du mode DFU sur des dispositifs sans prise en charge DFU

Ce n'est pas parce qu'un microcontrôleur ne comprend pas de chargeur d'amorçage DFU dans la mémoire ROM que les développeurs ne peuvent pas utiliser les fonctions DFU. Le mode DFU est une classe USB et est pris en charge dans de nombreuses piles USB. Cela signifie que les développeurs peuvent tout aussi facilement ajouter une fonction DFU à leurs structures d'application et être en mesure de réaliser une mise à jour DFU.

Par exemple, le AT32UC3A3 de Microchip Technology n'intègre pas le mode DFU (Figure 4). Les développeurs peuvent suivre une simple note d'application décrivant le fonctionnement DFU et la façon de configurer le microcontrôleur pour qu'il puisse prendre en charge correctement le mode DFU.

Image de la carte d'évaluation embarquée AVR 32 bits pour microcontrôleur AT32UC3A3 UC3-A3 XPLD AVR®32 d'Atmel.

Figure 4 : La carte d'évaluation embarquée AVR 32 bits pour microcontrôleur AT32UC3A3 UC3-A3 XPLD AVR®32 n'intègre pas le mode DFU, mais il est possible d'y ajouter un code USB d'infrastructure pour activer la fonction de mise à jour micrologicielle DFU. (Source de l'image : Microchip Technology)

Conseils et astuces concernant la réalisation de mises à jour micrologicielles

La mise à jour d'un micrologiciel sur site ne doit pas nécessairement toujours provenir d'un microcontrôleur compatible DFU. Le développeur peut décider si une autre approche de mise à jour du micrologiciel est nécessaire ou plus pratique à mettre en œuvre. Dans de tels cas, le développeur devra garder à l'esprit quelques conseils relatifs au processus de mise à jour micrologicielle. Ces conseils incluent :

  • Utilisez une somme de contrôle ou un code de hachage pour vérifier l'application qui s'inscrira sur la mémoire du microcontrôleur.
  • Sélectionnez un microcontrôleur avec suffisamment de mémoire pour enregistrer une copie de sauvegarde du micrologiciel afin de le restaurer en cas de problème.
  • Si le microcontrôleur est doté d'un chargeur Flash intégré, assurez-vous que l'utilisateur final ne peut pas le déclencher accidentellement.
  • Assurez-vous que tous les chargeurs d'amorçage de logiciel ont été compilés et optimisés à des fins de format.
  • Verrouillez le périphérique Flash pour que l'application ne puisse pas être extraite de la mémoire et rétroconçue.
  • Vérifiez toujours que le pointeur de pile, le tableau de vecteurs et les registres du compteur ordinal sont définis sur les valeurs d'application adaptées.
  • Pensez à utiliser d'autres méthodes de mise à jour, comme la technique du glisser-déplacer avec USB MSD, comme illustré sur la carte Freedom KL46Z (Figure 5).

Image de la carte Freedom KL46Z de NXP Semiconductor

Figure 5 : La carte Freedom KL46Z de NXP Semiconductor est une carte de développement économique qui ne prend pas en charge le mode DFU par défaut. Les développeurs peuvent utiliser d'autres méthodes de mise à jour, comme USB MSD qui permet de faire glisser l'image d'un nouveau micrologiciel et de la déposer dans la mémoire interne. (Source de l'image : NXP Semiconductor)

Conclusion

Presque tous les systèmes embarqués requièrent une méthode de mise à jour du code d'application sur site pour éviter les rappels. Créer un chargeur d'amorçage à partir de zéro ou en modifier un peut introduire des problèmes d'intégration dans un cycle de développement, ou le rendre plus complexe.

Pour éviter cela, les développeurs peuvent se servir de la fonction DFU éprouvée et intégrée à la norme USB pour réaliser de façon efficace et très rapide des mises à niveau sur site avec un effort limité, voire nul. Pour faciliter ce processus, les développeurs doivent examiner attentivement leurs microcontrôleurs pour déterminer si le mode DFU y est intégré ou s'ils doivent inclure une pile logicielle pour activer les fonctions DFU.
DigiKey logo

Avertissement : les opinions, convictions et points de vue exprimés par les divers auteurs et/ou participants au forum sur ce site Web ne reflètent pas nécessairement ceux de DigiKey ni les politiques officielles de la société.

À propos de l'auteur

Image of Jacob Beningo

Jacob Beningo

Jacob Beningo est un consultant en logiciels embarqués, et il travaille actuellement avec des clients dans plus d'une douzaine de pays pour transformer radicalement leurs activités en améliorant la qualité, les coûts et les délais de commercialisation des produits. Il a publié plus de 200 articles sur les techniques de développement de logiciels embarqués. Jacob Beningo est un conférencier et un formateur technique recherché, et il est titulaire de trois diplômes, dont un master en ingénierie de l'Université du Michigan. N'hésitez pas à le contacter à l'adresse jacob@beningo.com et sur son site Web www.beningo.com, et abonnez-vous à sa newsletter mensuelle Embedded Bytes.

À propos de l'éditeur

Rédacteurs nord-américains de DigiKey