Concepts de démarrage STM32F4 et relocalisation de table vectorielle

8

Il y a certaines choses que je ne comprends pas sur le processus de démarrage du microcontrôleur STM32F4.

Ma compréhension est la suivante:

  1. Le démarrage ARM Cortex-M4 attend la valeur d'initialisation du pointeur de pile et les vecteurs d'interruption activés 0x00000000 + SCB->VTOR, tandis qu'il SCB->VTORest effacé lors de la réinitialisation.
  2. Il n'y a pas de mémoire à cet endroit. La mémoire flash commence à 0x08000000, SRAM à 0x20000000.
  3. Afin de rendre possible le démarrage, le µC peut mapper la plage de mémoire flash ou SRAM sur 0x00000000. La plage de mémoire à mapper est définie par l'état des broches de démarrage.

Mes questions:

  1. Pourquoi le manuel de référence STM32F4 dit à la page 69 que

    Lorsque le périphérique démarre à partir de SRAM, dans le code d'initialisation de l'application, vous devez déplacer la table vectorielle dans SRAM à l'aide de la table d'exception NVIC et du registre de décalage.

    ? À mon avis, cela n'est pas nécessaire, car toute la région de la mémoire est de toute façon aliasée. Fait intéressant, cela ne semble pas être nécessaire lorsque la région du flash est remappée à l' 0x0espace.

  2. La seule utilisation pour le démarrage à partir de SRAM, je pense que c'est de réduire les cycles d'écriture sur le flash pendant le développement. Avant de libérer le µC de la réinitialisation, vous écrivez le programme dans SRAM à l'aide du débogueur, puis démarrez à partir de là. Cependant, comme vous disposez d'un accès au débogueur, il n'y aura de toute façon aucune restriction sur le démarrage. Alors pourquoi avoir cette fonctionnalité?

    Le fait que la position de démarrage soit dérivée des broches indique (au moins à mon avis) que cette fonctionnalité doit être utilisée non pas pendant le développement mais en fonctionnement final. Et en fonctionnement final, SRAM est clair au démarrage. Par conséquent, il n'est pas logique de démarrer à partir de SRAM.

Multisync
la source
Vous pouvez démarrer à partir de la RAM pour effectuer une mise à jour du firmware. Le code RAM s'exécute et re-flashe le contenu de la mémoire Flash. Une fois la mise à jour terminée, vous réinitialisez l'exécution à nouveau à partir de Flash.
Fotis Panagiotopoulos

Réponses:

5

Question 1:

Je ne peux pas vraiment répondre à votre première question. Mais dans le manuel de programmation où le registre VTOR est décrit ( page 212 ), il indique que le bit 29 est utilisé pour déterminer où se trouve la table vectorielle, soit dans la région de code (0) ou dans la région SRAM (1).

Maintenant, je ne comprends pas pourquoi cela doit être fait pour la même raison que vous dites, la SRAM est aliasée à 0x0, alors pourquoi est-il nécessaire de définir ce décalage?

La seule supposition que j'ai est énoncée à la page 69 que vous avez citée. Ils disent:

la zone de code commence à l'adresse 0x0000 0000 (accessible via les bus ICode / DCode)

la zone de données (SRAM) démarre à l'adresse 0x2000 0000 (accessible via le bus système)

Le Cortex ® -M4 avec CPU FPU récupère toujours le vecteur de réinitialisation sur le bus ICode

Peut-être que sur une interruption, le bus ICode est utilisé, qui ne peut pas accéder à la SRAM même lorsqu'il est remappé (je ne sais pas si c'est vrai). Cela expliquerait pourquoi ce bit doit être défini en conséquence, en disant au noyau d'utiliser le bus système et d'accéder à la SRAM.

Question 2:

Bien qu'il puisse être vrai que la SRAM est vide au premier démarrage de l'appareil, ce n'est pas nécessairement pour les démarrages ultérieurs. Vous pouvez donc créer quelque chose comme un appareil alimenté par batterie qui obtient sa SRAM programmée pendant la production, puis fonctionne jusqu'à ce que la batterie soit morte, ce qui effacerait sa SRAM. Je suppose que cela rendrait la rétro-ingénierie de l'appareil un peu plus difficile.

Dans un appareil alimenté par batterie, vous utiliseriez probablement le mode veille pour économiser de l'énergie, et si vous quittez ce mode, les broches de démarrage sont échantillonnées à nouveau, elles doivent donc avoir le réglage correct pour accéder à nouveau à la SRAM.

Vous pouvez également redémarrer l'appareil en toute sécurité car le contenu de la SRAM n'est pas détruit s'il n'y a pas de coupure de courant.

Pas une application très convaincante pour rectifier tous les problèmes de remappage de la SRAM.

Arsenal
la source