STM32F74x Flash-Seitengröße und Sektoren

Ich schreibe Daten in den internen Flash eines STM32F746 und frage mich, was der Unterschied zwischen Seiten und Sektoren ist. Und was ist der Zweck, stattdessen Sektoren zu verwenden? Beachten Sie, dass ich sehr neu bin und der Grund, warum ich frage, darin besteht, dass ich zuvor in Flash geschrieben habe, wobei ich die Seitengröße und die Anzahl der Seiten kannte. Aber jetzt habe ich stattdessen 8 Sektoren.

Sofern ich es nicht irgendwo übersehen habe, kann ich in keinem Dokument zum STM32F746 einen Hinweis auf Seiten oder Seitengröße finden

Antworten (1)

Das Konzept ist das gleiche, zwischen Seite und Sektoren. Die STM32F7-Dokumentation verwendet den Sektorbegriff , da sie viel größer sind als die typischen Seiten in einem externen Flash-Speicher. Aber es spielt keine Rolle.

Sie können also keine Verweise auf Seiten finden , da das, was Sie Seiten genannt haben, hier Sektoren genannt werden.

Die Einschränkung ist: Wenn Sie löschen möchten, müssen Sie den gesamten Sektor löschen. Wie Sie gesehen haben, gibt es bei STM32F7 8 Sektoren mit unterschiedlichen Größen (4 Sektoren mit 32 KByte, 1 Sektor mit 128 KByte und 3 Sektoren mit 256 KByte). Die Tatsache, dass sie unterschiedliche Größen haben, ermöglicht Ihnen mehr Flexibilität bei der Organisation Ihres Blitzes. Beispielsweise könnten Sie einen Sektor für Konfigurationsdaten reservieren. Auf diese Weise müssen Sie nicht den gesamten Firmware-Code löschen, wenn Sie diesen Teil neu programmieren möchten. Aber Sie müssen immer noch den gesamten Konfigurationssektor löschen, selbst wenn Sie nur ein einziges Byte davon ändern müssen. Und es ist wahr, dass diese Sektoren riesig sind, sodass Sie diesen Flash nicht so einfach verwenden können wie typische externe serielle Flashs, auf denen Sie die Dinge flexibler organisieren (oder sogar ein Dateisystem verwenden könnten).

Wenn Sie eine flexiblere Möglichkeit zum Speichern persistenter Daten benötigen, die sich im Laufe der Zeit ändern können, verwenden Sie je nach Ihren Einschränkungen einen externen Flash oder ein externes EEPROM. Es gibt jedoch einen Trick, den Sie anwenden könnenauf dem Haupt-MCU-Flash: Das Löschen ist nur erforderlich, wenn Sie Bits von 0 auf 1 umschalten. Um Bits von 1 auf 0 umzuschalten, müssen Sie nur die Flash-Bytes programmieren (siehe Hinweis in Kapitel 3.3.7 im Ref-Handbuch). . Die Programmierung der Flash-Bytes kann beliebig oft auf dem Sektor und auf einzelnen Bytes erfolgen. Sie könnten dies also ausnutzen, indem Sie den riesigen "Konfigurations"-Sektor in kleine Stücke aufteilen, die Sie individuell programmieren, wenn sich Ihre Daten ändern. Dann brauchen Sie einen Index, in dem Sie die Bits von 1 bis 0 „verschmelzen“, um zu wissen, in welchem ​​Chunk die neuesten Daten zu finden sind. Schließlich, wenn alle Chunks verwendet wurden, löschen Sie den gesamten Sektor und beginnen von vorne. Dies verschwendet viel Platz, gibt Ihnen aber möglicherweise die Flexibilität, die Sie benötigen, ohne zu große Kompromisse bei der Blitzlebensdauer einzugehen.

Was ist die Mindestanzahl physischer Sektoren, die Sie ausführen können? STM32F7 kann auch eine Anordnung mit 23 Sektoren verwenden. Reichen also 4? Die SPIFFS-Dokumentation spricht über die Verwendung eines 2-MB-Flash mit einer Sektorgröße von 6 KB.
@tothphu Die Mindestanzahl von Sektoren, auf denen Ihr System ausgeführt werden kann? Es ist sicherlich 1, vorausgesetzt, Ihr System ist einfach genug. Ich bin mir nicht sicher, ob ich die Frage verstehe. Wie auch immer, dies ist eine andere Frage und sollte separat gestellt werden. Stellen Sie sicher, dass Sie klar erklären, was Sie erreichen möchten.
Nun ja, wenn Sie die gesamte Sektorgröße im Speicher halten können, reicht 1 Sektor aus. Ich denke jedoch, dass Sie immer noch ein Dateisystem darauf verwenden können, vorausgesetzt, Sie können einige physische Blöcke haben.
@tothphu, ein Dateisystem auf einem internen MCU-Flash zu haben, scheint sehr unzureichend zu sein. Theoretisch können Sie das, aber angesichts der Organisation mit riesigen Sektoren und der normalerweise viel geringeren Lebensdauer als ein externer Flash-Chip glaube ich nicht, dass Sie das erreichen werden, was Sie erwarten. Verwenden Sie einfach einen externen Blitz. Interner Flash ist für Code, der sich fast nie ändert, und schließlich für ein paar Konfigurationsdaten, die sich von Zeit zu Zeit ändern. Nicht, um es wie eine Festplatte zu verwenden.
AFAIK STM32F7 hat eine Lebensdauer von 100.000 auf dem Flash (insgesamt 2 MiB). Auch die Löschblockgröße beträgt 128 KiB (mit der richtigen Konfiguration und ab ~256 KiB aufwärts), während sie 8 Byte geschrieben werden kann (im Gegensatz zu ~256 Byte auf externem Flash). Das Speichern von Einstellungen oder ähnlichem kann Sie vor zusätzlichen Hardwarekomponenten bewahren. Auch ist dies manchmal ein nachträglicher Einfall, wenn HW-Modifikationen unerwünscht sind.
Natürlich, und ich stimme zu, dass der interne Flash vollständig zum Speichern von Einstellungen verwendet werden kann (daher meine Antwort). Dies bedeutet jedoch nicht, dass ein Dateisystem verwendet wird. Die Nutzung eines vollständigen Dateisystems zum Speichern von Einstellungen im internen Flash ist meiner Meinung nach sowohl unnötig als auch unklug. Da auch die Dateiindizes aktualisiert werden müssen, werden mehr Schreibvorgänge als das Minimum durchgeführt usw. Sie können dem jedoch widersprechen.