STM32 – MPU-Speicherschutzeinheit (1)

Lassen Sie uns zuerst die MPU erklären. MPU hat viele Bedeutungen. Unsere gemeinsamen sind:

MPU: Memory Protection Unit, Speicherschutzeinheit (der in diesem Artikel beschriebene Inhalt);

MPU: Mikroprozessoreinheit, Mikroprozessor;

Das Gyroskop MPU-6050 ist noch schlimmer als dieses

also bitte nicht verwechseln

STM32–MPU-Speicherschutzeinheit (2)

MPU

MPU, die Speicherschutzeinheit, kann die Speicherzugriffseigenschaften verschiedener Speicherbereiche (z. B. nur privilegierten Zugriff oder Vollzugriff unterstützen ) und Speicherattribute (z. B. zwischenspeicherbar, pufferbar und gemeinsam nutzbar) und für Speicher (hauptsächlich Speicher und Peripheriegeräte ) festlegen ). ) bietet Schutz und erhöht dadurch die Systemzuverlässigkeit

Durch diese Regeln können die folgenden Funktionen erreicht werden

  • Verhindern Sie, dass nicht vertrauenswürdige Anwendungen auf geschützte Speicherbereiche zugreifen.
  • Verhindern Sie, dass Benutzeranwendungen vom Betriebssystem verwendete Daten beschädigen.
  • Indem Tasks daran gehindert werden, auf Datenbereiche anderer Tasks zuzugreifen.
  • Ermöglicht das Definieren von Speicherbereichen als schreibgeschützt, um wichtige Daten zu schützen.
  • Erkennen Sie unerwartete Speicherzugriffe.

Das heißt, Speicherschutz, Peripherieschutz und Codezugriffsschutz legen fest, ob ein Teil des Speichers schreibgeschützt ist oder nur hochprivilegierten Zugriff zulässt oder den Zugriff verbietet usw.

Der Bereich, den die MPU schützen kann, ist der Speicherabbildungsbereich

Der Speicherzuordnungsbereich ist der Adressraum von 0 bis 2^32 -1 mit insgesamt 4 GB, der vom 32-Bit-CM7-Kernel als Ganzes adressiert werden kann. Über diese Adressen kann auf RAM, Flash, Peripherie usw. zugegriffen werden. Das folgende Schema stellt das Speicherabbild dar. Wenn der IC-Hersteller es verwendet, wird es unterteilt und die entsprechenden Hardwarefunktionen werden hinzugefügt.

Bildbeschreibung hier einfügen

Das heißt, MPU kann unseren geschützten Speicherbereich (SRAM-Bereich) vor illegalen Eingriffen schützen und kann auch unseren Peripheriebereich (wie FMC) schützen.

MPU-Region (Region)

Die MPU des STM32H7 bietet bis zu 16 programmierbare Schutzregionen (Regionen) mit einer Mindestanforderung von 256 Bytes für jede Region, und der Seriennummernbereich ist 0 bis 15. Jede Region (Region) kann auch weiter in kleinere Unterregionen unterteilt werden (Unterregionen). Region), hat jede Region ihre eigene programmierbare Startadresse, Größe und Einstellungen.

Diese Speicherbereiche können verschachtelt und überlappt sein, so dass es ein Prioritätsproblem gibt, wenn diese Bereiche verschachtelt oder überlappt sind. Die Seriennummern der 16 Speicherbereiche, die von der MPU konfiguriert werden können, liegen im Bereich von 0 bis 15. Am höchsten ist die Priorität der Seriennummer 15, die entsprechend abnimmt als Hintergrundregion. Die Seriennummer -1 ist die Priorität der Hintergrundregion. niedrigste. Diese Prioritäten sind festgelegt

Die MPU-Funktion muss aktiviert werden, um wirksam zu sein. Standardmäßig ist die MPU deaktiviert

Wenn die MPU ihre Funktionen ausführt, ist die Einheit "Bereichsbereich". Eine Region ist eigentlich eine fortlaufende Adresse, aber ihr Standort und ihre Reichweite müssen einige Einschränkungen erfüllen (Ausrichtung, Mindestkapazität usw.)

Priorität der MPU-Region

Durch die MPU definierte Regionen können sich auch überlappen. Wenn ein Speicherblock in mehrere Regionen fällt, werden die Zugriffsattribute und -berechtigungen von der Region mit der höchsten Nummer bestimmt. Wenn beispielsweise Region 3 Region 5 überlappt, wird der überlappende Teil von Region 5 gesteuert

Beispielsweise befindet sich der Speicher von Bereich 5 im Nur-Lese-Modus und der Speicher von Bereich 3 im Lese-Schreib-Modus, sodass der überlappende Teil zum Nur-Lese-Modus wird und ein Fehler gemeldet wird, wenn Daten dorthin geschrieben werden .

Bildbeschreibung hier einfügen

MPU-Hintergrundbereich

Die MPU liegt außerhalb des Region-Bereichs und ermöglicht auch, einen Hintergrundbereich (also alle anderen Adressräume ohne MPU-Einstellungen) zu aktivieren, den leeren Speicherbereich des obigen Bildes. Im Hintergrundbereich ist nur ein privilegierter Zugriff erlaubt. Nachdem die MPU aktiviert ist, darf weder auf den Adressbereich außerhalb der Definition noch auf die nicht autorisierte Region (Region) zugegriffen werden, da dies sonst als "Zugriffsverletzung" behandelt und eine MemManage-Ausnahme ausgelöst wird

Insbesondere erklären wir es im Register, und Sie werden ein klares Verständnis haben.


Die MPU-Einstellungen werden von Registern wie CTRL, RNR, RBAR und RASR gesteuert, von denen das wichtigste das RASR-Register ist.Lassen Sie uns sie einzeln vorstellen.

1. MPU-Steuerregister (CTRL), nur die niedrigsten drei Bits dieses Registers sind gültig

Bildbeschreibung hier einfügen

  • Das PRIVDEFENA-Bit wird verwendet, um festzulegen, ob der Hintergrundbereich (Bereich) aktiviert werden soll.Durch Setzen dieses Bits auf 1 kann der Hintergrundbereich eingeschaltet werden.
  • Das HFNMIENA-Bit wird verwendet, um zu steuern, ob das NMI und die Hardware fehlerhaft sind
  • Das ENABLE-Bit wird verwendet, um zu steuern, ob die MPU aktiviert ist

Wenn PRIVDEFENA auf 0 gesetzt ist, kann nur auf den von der MPU eingestellten Speicherbereich zugegriffen werden, und es wird ein Fehler gemeldet, wenn auf andere Adressen zugegriffen wird

2. MPU-Bereichsnummernregister (RNR), Bildbeschreibung hier einfügen
nur die unteren 8 Bits sind gültig und können gelesen und geschrieben werden

Vor dem Konfigurieren einer Region muss die Region in der MPU ausgewählt werden, indem wir die Regionsnummer in das MPU_RNR-Register schreiben. Nur die unteren 8 Bits dieses Registers sind gültig, aber da der STM32H7 nur bis zu 16 Bereiche unterstützt, sind tatsächlich nur die niedrigsten 4 Bits gültig (0~15). Nach der Konfiguration der Bereichsnummer können wir die Bereichseigenschaften festlegen.

Das heißt, um den zu konfigurierenden Speicherbereich einzustellen

3. MPU-Bereichsattribut und Kapazitätsregister (RASR)
Bildbeschreibung hier einfügen
Dieses Register ist ein 32-Bit-Register, von dem 31:29 Bits, 27 Bits, 23:22 Bits gespeichert werden und keine Wirkung haben

  • XN (28 Bit): Es wird verwendet, um zu steuern, ob Befehle aus diesem Bereich extrahiert werden dürfen.Wenn XN=1, bedeutet dies, dass die Befehlsextraktion aus dem Bereich verboten ist,d.h. die Ausführung von Programmcode in diesem verboten ist Speicherbereich Wenn XN=0 gesetzt ist, dürfen Anweisungen extrahiert werden Blockspeicherbereich kann Programmcode ausführen
  • Das AP-Bit (Bit[26:24]) dient zur Steuerung der Zugriffsberechtigung (Zugriffserlaubnis) auf die Daten im Bereich Region.Die drei Bits entsprechen den 8 Fällen.

Die spezifischen Einstellungen sind wie folgt:
Bildbeschreibung hier einfügen

Hinweis: Die folgenden TEX, C, B und S setzen alle den Cache-Cache. Die normale Verwendung der MPU dient dem Speicherschutz. Das obige AP-Bit kann verwendet werden. Wenn der Cache nicht verwendet wird, kann die folgende Konfiguration verstanden werden. Verbieten Sie es direkt, wenn die HAL-Bibliothek konfiguriert ist, es hat keine Auswirkung

Wenn Sie Cache nicht kennen, können Sie Folgendes sehen: STM32H7 - Cache (1)

Die Definitionen von TEX, C, B und S lauten wie folgt: Dies betrifft nur TEX = 000 und 001, und andere TEX-Konfigurationen werden grundsätzlich nicht verwendet.
Bildbeschreibung hier einfügen

  • C-Bit: Wird verwendet, um den Cache zu aktivieren oder zu deaktivieren
  • B-Bit: Wird verwendet, um mit dem C-Bit zusammenzuarbeiten, um zu erkennen, ob eine Pufferung unter Cache verwendet werden soll
  • S-Bit: Wird verwendet, um die gemeinsam genutzten Eigenschaften des Speichers zu steuern, S=1, der Sekundärspeicher kann nicht zwischengespeichert werden (Cache), wenn S=0
    gesetzt , kann er zwischengespeichert werden (Cache), im Allgemeinen setzen wir dieses Bit auf 0 es.

Je nach Konfiguration kann es in die folgenden vier Typen unterteilt werden:
Bildbeschreibung hier einfügen

Der Unterschied zwischen Lesen/Durchschreiben/Zurück/Zuweisen:
1. CPU liest Cache

  1. Durchlesen : Daten direkt aus dem Speicherbereich lesen
  2. Read allocate : Lesen Sie zuerst die Daten in den Cache und lesen Sie dann die Daten aus dem Cache

2. Wenn die CPU
bei einem Treffer in den Cache schreibt, gibt es zwei Verarbeitungsmethoden:

  1. Durchschreiben : Wenn die Daten aktualisiert werden, werden die Daten gleichzeitig in den Cache und den Speicherbereich geschrieben.Die
    Operation ist einfach, aber die Schreibgeschwindigkeit ist langsam
  2. Rückschreiben : Nur wenn die Daten aus dem Cache ersetzt werden, werden die geänderten Cache-Daten in den Backend-Speicher geschrieben.
    Die Schreibgeschwindigkeit ist hoch, aber sobald ein Stromausfall auftritt, wenn die aktualisierten Daten nicht geschrieben werden, können die Daten nicht abgerufen werden

Wenn es fehlt, gibt es zwei Möglichkeiten, damit umzugehen:

  1. Write allocate : Laden Sie zuerst die zu schreibenden Daten in den Cache, schreiben Sie den Cache und schreiben Sie sie dann in den Speicher > durch Leeren.
  2. No-write allocate : Anstatt den Schreibort in den Cache zu lesen, schreiben Sie die zu schreibenden Daten direkt in den Speicher.

Was ist ein Hit/Miss:

1. Lesevorgang
Wenn die von der CPU zu lesenden Daten im SRAM-Bereich in den Cache geladen wurden, wird dies als Cache-Hit bezeichnet, wenn sich nichts im Cache befindet, wird dies als Lese-Cache-Mißerfolg bezeichnet.
2. Schreibvorgang
Wenn die von der CPU zu schreibenden SRAM-Bereichsdaten bereits einen entsprechenden Bereich im Cache (der Fachbegriff heißt Cache Line, in Einheiten von 32 Bytes) erschlossen hat, spricht man von einem Write-Hit (Cache-Hit). ), wenn im Cache kein Cache vorhanden ist, wie man den entsprechenden Bereich aufschließt, ist dies der sogenannte Write Cache Miss.

  • SRD-Bit : Wird verwendet, um den Teilbereich des Speicherbereichs zu steuern, insgesamt 8 Bits, ein Bit steuert einen Teilbereich, im Allgemeinen eingeschaltet
  • RegionSIZE-Bit : Konfigurieren Sie die Größe des Region-Speicherbereichs, das Minimum beträgt 32 Bit, es können 32 KB, 64 KB, 128 KB usw. sein.

4. MPU-Basisadressregister (RBAR)
Bildbeschreibung hier einfügen

  • ADDR: Die erste Adresse des Region-Speicherbereichs

Beachten Sie, dass die erste Adresse mit der Größe des Speicherbereichs (Bit RegionSIZE) übereinstimmen muss.Wenn wir beispielsweise die Kapazität einer Region (Bit RegionSIZE) auf 64 KB festlegen, muss ihre Basisadresse (ADDR) durch teilbar sein 64 KB, das heißt Diese Adresse ist 64 KB, das heißt 0x00010000, der Rest ist gleich 0, wie 0X0001 0000, 0X0002 0000, 0X0003 0000 usw. kann teilbar sein

  • Unabhängig davon, ob die VALID-Bereichsnummer überschrieben wird, wenn sie 1 ist, wird die Nummer des Speicherbereichs der ADDR-Region erneut modifiziert
  • REGION-Segment (bit[3:0]): neue Nummer, entsprechend der Vier-Bit-Adresse (0~15)

Die Nummer des Speicherbereichs Region wird während der Initialisierung gesetzt, daher wird das VALID-Bit im Allgemeinen auf 0 gesetzt

Lassen Sie uns hier einige Grundprinzipien und Register der MPU besprechen.Im nächsten Artikel werden wir uns die Konfiguration der MPU in der HAL-Bibliothek und ihre Verwendung ansehen.

Standardzuordnung und Eigenschaften des STM32H7-Speichers

Bildbeschreibung hier einfügen

STM32H7 FMC-Adresse

Bildbeschreibung hier einfügen

Ich denke du magst

Origin blog.csdn.net/as480133937/article/details/123656394
Empfohlen
Rangfolge