2016-09-14 3 views
0

Speziell bei "schnelleren" Geräten wie STMF4xx/F7xx müssen wir die Anzahl der Flash Wait Cycles angeben, basierend auf der Versorgungsspannung und der Systemtaktfrequenz.Warum müssen wir die Anzahl der Flash-Wartezyklen angeben?

Wenn die CPU Anweisungen/oder Konstanten holt, geschieht dies über die FLITF. Habe ich recht mit der Annahme, dass die FLITF eine CPU-Anfrage hält, solange sie die angeforderten Daten bereitstellen kann, was es anderen Bus-Mastern unmöglich macht, währenddessen auf Flash zuzugreifen.

Wenn dies der Fall war, warum sollte es wichtig sein, dass jede Schnittstelle Flash-Wartezyklen kennt? Wie Cache tut Vorladeanweisungen so oder so, unabhängig, wenn es weiß, wie lange zu warten, nicht?

+0

Sie werden/sollten finden, dass der Blitz nicht die einzige Logik in einigen/vielen MCU's ist, die Geschwindigkeitsbegrenzungen haben. Einige werden Ihnen sagen, dass die periphere Uhr X nicht überschreiten kann, obwohl die CPU darüber hinaus gut ist. Insbesondere PLLs haben Min- und Max-Bereiche, die Sie verwenden müssen, sonst könnten Sie mit einer instabilen Uhr enden (könnte niemals sperren oder aus der Sperre gehen und hängt einfach, hängt vom Design ab). Nur weil einige Autos 200mph fahren können, bedeutet das nicht, dass sie alle können. für jeden Logikblock oder jedes Peripheriegerät für jeden Chip müssen Sie das Timing innerhalb der entworfenen Parameter halten oder es können schlimme Dinge passieren. –

Antwort

4

Weil die Flash-Schnittstelle nicht magisch ist.

Es muss die notwendigen Einstell- und Haltezeiten zum Adressieren und Auslesen der Flash-Zellen einhalten, die je nach Spannung etwas variieren. Nehmen wir das STM32F411 als Beispiel (weil ich dieses TRM zur Hand habe), einige Berechnungen mit der Spannung/Frequenz/Wartezustandstabelle impliziert, dass ein Lesen von Flash auf einer dieser in der Größenordnung von ~ 30ns über 2.7V, runter zu ~ 60ns unter 2.1V.

Da der Flash-Schnittstelle keine eigene asynchrone Nanosekunde präzise Zeitmessung Fähigkeit hat (denn das ist unnötig kompliziert, energiehungrige sein würde und dumm), das übersetzt, seine Signale für n Taktzyklen zu behaupten, nach welche es annehmen kann, dass die Datensignale von den Zellen stabil genug sind, um * zurückzulesen. Woher weiß es, wie die Taktfrequenz ist, und was sollte also n sein? Ganz einfach: Sie als Programmierer, der die Uhr gestellt hat, sagen Sie es. Einige Hardware-Dinge sind einfach unendlich viel einfacher mit Software umzugehen.

* und dann durch die weitere shenanigans gehen die relevanten 8 Extrahieren, 16 oder 32 Bits aus der 128-Bit-Leitung es gelesen hat, zu spucken schließlich dass aus der anderen Seite auf den AHB-Bus die wartende CPU, offensichtlich.

+0

Hat mir sehr geholfen. Um nur das zu beenden, besteht das einzige Risiko, das wir riskieren, darin, beschädigte Daten zu erhalten, wenn uns die Wartezyklen egal sind. –

+0

Wahrscheinlich, aber ich würde nichts Wertvolles darauf setzen. Es liegt nicht außerhalb der Möglichkeiten, dass es einige Kontrollsignale geben könnte, die in einen undefinierten Zustand geraten könnten und dazu führen könnten, dass irgendwas drunter und drüber geht. Und es ist nicht so, als ob das Ausführen von nicht notwendigerweise korrekten Anweisungen wahrscheinlich in jeder Hinsicht "sicher" ist. – Notlikethat

+3

Ich habe Erfahrung mit internen Blitzen von ST mit inkorrekten Wartezustandseinstellungen, und selbst wenn ich mit einem ausgeschaltet bin, werden Probleme auftreten, die sehr schwer zu finden sind. Selbst wenn Sie einen Wartezustand unterhalb der von ihnen angegebenen Größe haben. Es kann bei Raumtemperatur arbeiten, beginnt aber dann zu versagen, wenn es kälter oder heißer ist. Wenn Sie herausgefunden haben, dass der Blitz falsch konfiguriert wurde, macht alles Sinn, aber vorher werden Sie verrückt, wenn Sie versuchen, ein Problem an den falschen Stellen aufzuspüren. – rjp

Verwandte Themen