Aller au contenu

La mémoire du STM32F412

Plan mémoire unifié des Cortex-M

Le STM32F412 utilisé dans nos laboratoires est un microprocesseur 32 bits de la série Armv7.

Le plan mémoire de base des Arm®-Cortex®-M est quasiment identique pour chaque CPU. La mémoire de programme (Flash - ro), la mémoire de données (SRAM - rw), les registres et les ports des entrées et sorties sont organisés dans un espace mémoire linéaire de 4 GB. La mémoire adressable est divisée en 8 blocs principaux de 512 MB chacun.

Le Cortex®-M s’appuie sur une architecture de Harvard qui sépare les bus de code et de données. Le processeur possède plusieurs bus organisés en matrice avec deux niveaux : Master et Slave. Cela lui permet d’effectuer des opérations en parallèle et sur un cycle. Les accès aux données sont soit alignés sur 32 bits, soit non alignés.

Les octets sont codés en mémoire dans le format Little Endian. Dans un mot mémoire (Word), l’octet d’adressage inférieur est le Last Significant Byte et l’octet d’adressage supérieur est le Most Significant Byte.

STM32F412 Bus Matrix

Organisation des bus du STM32F412 (source STM)

La configuration de la matrice de bus dépend du mode de démarrage du processeur.

Plan mémoire du STM32F412

Le STM32F412 dispose de:

  • 256 KB de mémoire SRAM aux adresses 0x2000 0000 - 0x203 FFFF.
  • 1 MB de mémoire Flash aux adresses 0x0800 0000 - 0x080F FFF.

STM32F412 Memory Map

Organisation mémoire du STM32F412 (source STM)

Exercice La mémoire du STM32F412/1

Comment le compilateur est instruit de ces adresses mémoire pour créer le fichier binaire ?

Est-ce qu’il est possible d’utiliser d’autres adresses ?

Solution

En remontant le contenu du fichier .pio/build/DISCO_F/idedata.json, nous retrouvons dans la distribution sous le répertoire <Home>/.platformio/packages/tool-ldscripts-ststm32/stm32f4/le fichier de définition STM32F412ZGTX_FLASH.ld avec les informations d’édition des liens pour la plateforme. Celle-ci est spécifiée dans le fichier de configuration du projet custom_targets.json.

L’option upload_command de platformio permet de redéfinir le logiciel d’upload ainsi que les adresses mémoires où placer le code binaire défini dans le fichier .elf.

Accès aux bits des périphériques

L’accès aux bits de configuration des registres des prériphiques se fait, en principe, individuellement. Le plus souvent cet accès est effectué par l’application de masques (AND et OR) lors d’opérations lecture-modification-écriture sur plusieurs cycles.

les Cortex^®-M disposent d’une solution plus efficace dite Bit-Banding. Un bit de mémoire est lié sur un mot mémoire (alias) et peut être modifié sur un cycle d’instruction.

Le premier MB de la mémoire et le premier MB des périphériques sont liés sur 32 MB de mémoire Bit-Band.

Le calcul de l’adresse en Bit-Band est donné ci-dessous.

\[ band\_address = alias\_base + (reg\_offset \times 32) + (bit\_nbr \times 4) \]

La représentation graphique de ce calcul est illustrée dans la figure ci-dessous.

Bit-Band Memory

liaison Bit-Band en mémoire