 MPU, Memory Protection Unit MPU est un mécanisme de mémoire de mémoire qui permet de définir les accesses spécifiques pour toutes les appareils de mémoire de l'appareil. FlashMemory, SRAM et Peripheral Register. Cette protection est dynamiquement managée à l'époque. Cela signifie que l'on doit configurer dans votre code. MPU attributes sont seulement faits pour les accesses de CPU. Cela signifie qu'un autre master sur le bus pourrait accéder à tout le data. Par exemple le GMA. Mais je vais vous donner des détails après. Cortex-M Architecture définit deux modes d'exécution, permettant un processus pour un mode privilége ou non privilége. Pour chaque vision de l'MPU, l'access attribute peut être installée indépendamment. La purpose de l'MPU est de contrôler sur le risque sur lequel le système peut accéder à quelle région de mémoire est en haut, en haut et en bas et en exécutant. Cela permet d'utiliser l'application de données correctes utilisées par le système d'opérations. Si vous avez un kernel, vous exécutez dans le mode privilége et vous avez un task dans une région non privilége qui est définie dans votre MPU. Il est séparé entre un task de procédé et un task de bloquement d'access. Cela signifie que vous pouvez être sûr que ce task ne peut pas accéder à ces données. Détectez l'accès à une mémoire inutile par exemple pour l'exemple de la corruption. En plus, l'MPU peut aussi être utilisé pour définir les caractéristiques de mémoire comme attirant et accélérant des comportements de la région différente. Nous pouvons configurer jusqu'à 16 régions, dépendant de la cour, et quelles accèses illégales vont vous conduire à une faute exceptionnelle. La configuration de l'MPU doit et doit être faite seulement dans le mode privilége. L'MPU ne peut pas couvrir l'access de la mémoire d'access, donc la mémoire d'access a un full access sur la map de mémoire. Dans un constrain de sécurité, si vous voulez utiliser l'MPU pour l'isolation, vous devriez avoir cela en mind. Pour chaque région, nous avons des attributs de mémoire. Tout d'abord, nous pouvons mettre la région dans l'exécute-never. Ensuite, nous avons des permets d'access des données. Je vais vous donner des détails dans le next slide. Pour l'extension d'exemple d'access, sur le surlèble, cachable et bufferable, je vais aussi avoir un slide après. Ensuite, sur chaque région, il y a des sub-régions que vous pouvez activer ou réactiver. Ensuite, vous avez la dimension de la région de mémoire. La permission d'access de mémoire, comme précédemment, vous avez une pour la prévélation et une pour l'exécution prévélée. Vous pouvez définir si ce n'est pas d'access, c'est réellement ou c'est d'accord. Les propriétés et les déchets. C'est un peu plus compliqué. Tout d'abord, nous avons un type de mémoire, un ordre normal ou un ordre fort. Dans le mode normal, le ordre normal n'est pas nécessairement apprécié par le CPU dans le liste ordre dans votre programme. Cela signifie que le corps peut réagir un peu. À un moment, ça pourrait être un problème. Dans le mode de dévise, il s'agit d'abord de la région de dévise, et le ordre de dévise est fait dans un ordre fort de votre programme. C'est important quand vous accessiez un ordre ou quand vous configurez un registre pour que ça soit fait exactement dans le bon ordre. Dans le ordre fort, tout est toujours fait dans le liste ordre programmé. Et le CPU s'occupe de l'endroit de l'endroit avant d'exécuter le prochain ordre. Donc je dirais que tout est dans le ordre comme dans votre programme. Donc, c'est un type de mémoire. Vous pouvez définir des façons pour trois flammes. Et après, vous pouvez voir que dans le mode normal, vous avez une, deux, trois descriptions avec le right through, pas le right allocate, le right back, pas le right allocate, le right back with right and read allocate. Je préfère vous donner la définition dans le prochain slide parce que c'est un petit peu dur, je dirais. Ensuite, vous pouvez avoir l'attribut shareable ou pas pour ceux-ci. Donc, sur ces propriétés. Donc, right through with no right allocate. Dans ce cas, sur le right, c'est le right to the cache and the main memory. En miss, it updates the block in the main memory, but non breaking that block to the cache. For the right back with no right allocate. On it, it's right to the cache setting that it is for the block and the main memory is not updated. But on miss, it updates the block in the main memory, not bringing that block to the cache. For the right back on the right and read allocate. For the first part, it's exactly the same than the previous, but on miss, it updates the block in the main memory and brings the block to the cache. This is not an easy aspect, but it's something to have in mind when you want to ensure a coherency and also performance. Some tips. First, the MPU is used at runtime to isolate sensitive code and to manage access to resources according to process currently executing by the device. So it's required a really a good programming skill to manage to switch from one mode to another mode. When I was talking about mode to respond privilege to unprivileged. Often it associated with some OS on secure OS. Another aspect I want to give you a couple of words. It was with Cortex M7 where you have the feature of speculative prefetch or it could have a possible impact on the memory or device which are sensitive to multiple access. So to prevent the speculative prefetch, you can just configure the region in a strictly ordered or to in device memory. Thanks to MPU. Let's check in the family, the availability. As you can see, MPU is available on all our STM32 family except the F0 with the Cortex M0. Here you've got many reference and I really advise you to go deeply if you want to configure MPU. First is quite general one managing memory protection unit. So I will say you've got good overview. Then you have to go in each processor programming manual to have details.