Einen AVR "übertakten".

In AVR-Datenblättern im Abschnitt Elektrische Eigenschaften finden Sie normalerweise ein Diagramm wie dieses (dieses ist vom ATMega328):

Geben Sie hier die Bildbeschreibung ein

Ich habe Designs gesehen, die zu "funktionieren" scheinen, aber außerhalb der schattierten Hülle funktionieren. Insbesondere habe ich 3,3-V-Designs (Arduino) gesehen, bei denen die Uhr von einem externen 16-MHz-Quarz ausgeführt wird. Das ist eindeutig außerhalb der Spezifikation. Was sind die praktischen negativen Folgen des Laufens außerhalb dieses Rahmens?

Wenn Sie es nur irgendwie in der Spezifikation ausführen, funktioniert es nur irgendwie.
Mag blöd erscheinen, aber könntest du das XTal nicht ersetzen?
Keine gute Idee, höchstwahrscheinlich wird es nicht funktionieren, und Sie gewinnen sowieso nur sehr wenig, wenn Sie einem 20-MIPS-Prozessor weniger als 1 MIPS hinzufügen. Darüber hinaus bin ich zu 100% der AVR wird abstürzen. Sie müssen Setup- und Hold-Zeiten für die internen Signale, die max freq. nimmt das Worst-Case-Szenario im kritischsten Signalpfad innerhalb des AVR an, Herstellungsabweichungen könnten einen Chip etwas immuner gegen Übertaktung machen, aber nur sehr wenig, und denken Sie daran, dass selbst wenn der Kern selbst gut läuft, dies nicht bedeutet, dass die Peripherie es tut oder dass Sie kann es mit einem anderen Chip aus einer anderen Charge replizieren.
Um einen Witz wiederzuverwenden: „Wenn sie vorgeben, uns innerhalb der Spezifikation zu takten, tun wir so, als würden wir arbeiten.“
Dies mag eine dumme Frage sein, aber ich dachte, alle AVR-Arduinos laufen mit 5 V, mit Ausnahme des Mini Pro-3.3v, der nur mit 8 MHz läuft ... oder gibt es ein schnelleres 3,3-V-Modell, das ich nicht gesehen habe?
@Jules Arduino ist nicht genau dasselbe wie AVR. Einige AVR-Mikrocontroller können mit Spannungen bis zu 1,8 V betrieben werden (z. B. ATtiny2313V), und soweit ich weiß, können alle mit 2,7 V betrieben werden, solange die Taktfrequenzgrenzen eingehalten werden. Ich denke, Sie haben Recht, dass die meisten Mainstream-Arduinos, die mit 3,3 V laufen, normalerweise mit 8 MHz arbeiten, um die V-Hz-Kurve zu respektieren, aber ich habe definitiv Arduino-basiertes Design gesehen , das dies nicht beachtet.
en.wikipedia.org/wiki/Shmoo_plot Hier fehlen Faktoren bei maximaler Temperatur bei dieser Spannung bei dieser Frequenz schnell schnell oder langsam langsam verzerrt usw. Das Teil wird funktionieren. Aus diesem Grund können Sie Ihren 4-GHz-x86 mit 7 GHz betreiben. Wenn Sie das Teil kalt, aber nicht zu kalt halten, können Sie Ihre Erfolgschancen erhöhen. Aber wird es im Produktionsmaßstab funktionieren? 10.000 könnten funktionieren, dann die nächsten 1000 nicht und es gibt nichts, was Atmel dagegen tun wird. Wenn Sie dies sehen, sich aber innerhalb des beworbenen Bereichs befinden, können Sie Ihren Anspruch geltend machen und Ihre kostenlosen Ersatzteile erhalten ... (nachdem Sie beweisen, dass Sie sie nicht beschädigt haben).

Antworten (5)

Wie man das Leben interessanter macht 101:

  • Wenn es dir egal ist

dass Ihre Ergebnisse manchmal falsch sein können,
dass Ihr System manchmal abstürzen kann,
dass Ihr Leben interessanter sein kann,
dass Ihr Segway-Klon nur gelegentlich ohne ersichtlichen Grund Gesicht-Pflanzen macht,
dass ...

Dann das Teil auf jeden Fall außerhalb der Herstellerspezifikation laufen lassen.

Sie bekommen, wofür Sie nicht bezahlen.
Wenn Sie einen 10-Dollar-Kopf haben, kaufen Sie einen 10-Dollar-Helm.

  • Es kann oft funktionieren.
  • Es kann sein, dass es manchmal nicht funktioniert.
  • Es ist vielleicht nicht offensichtlich, dass es manchmal nicht funktioniert.
  • Eine Teilung kann normalerweise funktionieren
  • Ein Sprung kann normalerweise ankommen.
  • Eine Tabelle kann korrekt nachgeschlagen werden.
  • Ein ADC-Wert kann korrekt sein.

Oder nicht

Geben Sie hier die Bildbeschreibung ein

Ich liebe diese Antwort lol
Das ist wunderbar.
Eigentlich, wenn Sie einen 10-Dollar-Kopf haben, sollten Sie einen 10-Dollar-Helm kaufen.
@NickJohnson - :-). | Das war (glaube ich) eine Bell-Helme-Werbung aus langem Protokoll (vielleicht noch aktuell?), also kann ich die Worte nicht ändern :-).
Diese Antwort ist perfekt, in echter Freihand-Kreis-Manier.
Ich habe meine neue Tapete gefunden
Das ist genial: "Wenn es dir egal ist (...), dass dein Segway-Klon nur gelegentlich ohne ersichtlichen Grund Gesicht-Pflanzen macht"

Bei diesen Geschwindigkeiten berechnen die meisten Prozessoren alle Signale, die bei einem bestimmten Taktzyklus benötigt werden, warten auf die nächste Taktflanke, während sie sich stabilisieren, speichern alle diese Signale und berechnen die Signale, die beim nächsten Taktzyklus benötigt werden , Warten auf diese Flanke, während sich diese Signale stabilisieren usw. Wenn eine Taktflanke ankommt, bevor sich die erforderlichen Signale stabilisiert haben, besteht die Wirkung darin, dass die nicht stabilisierten Signale möglicherweise nicht sauber zwischengespeichert werden. Wenn dies in einem Mikrocontroller auftritt, können die Auswirkungen unvorhersehbar sein – aus mindestens zwei Gründen:

  1. In vielen Fällen wird die Ausführungsgeschwindigkeit durch die Reaktionszeit des Flash-Arrays begrenzt, von dem der Prozessor Code liest. Wenn ein zu schneller Betrieb des Prozessors dazu führt, dass gelegentlich ein Bit hier oder da falsch gelesen wird, kann dies leicht dazu führen, dass der Prozessor einen völlig anderen Code als beabsichtigt ausführt. In vielen Programmen kann sogar ein einmaliges Fehllesen eines einzelnen Bits das Verhalten radikal ändern; Es ist selten praktikabel, Vorhersagen darüber zu treffen, was in solchen Fällen passieren könnte. Das Beste, was man in einigen Fällen tun kann, ist, bestimmte Teile des Programms zu "panzern", um eine fehlerhafte Ausführung unwahrscheinlich zu machen. Zum Beispiel könnte man ein EEPROM geschützt lassen, bis man es schreiben möchte, und dann Code verwenden wie:
    uint32_t eep_checksum, eep_addr, eep_data;
    
    #define EEPROM_WRITE(Adresse, Daten, Prädikat) \
      eep_checksum = 0xC0DEFACE, eep_addr = (Adresse), eep_data = (Daten), \
      eep_checksum += eep_addr + eep_data, ((prädikat) || HARD_CRASH()), \
      eep_checksum += (0xCAFEBABE - C0DEFACE), eep_do_write()
    
    void eep_do_write(void)
    {
      ENABLE_EEPROM_WRITE_HARDWARE();
      if (eep_checksum != eep_addr + eep_data + 0xCAFEBABE)
      {
        DISABLE_EEPROM_WRITE_HARDWARE();
        HARD_CRASH();
      }
      DO_EEPROM_WRITE();
      DISABLE_EEPROM_WRITE_HARDWARE();
    }  
    
    Es ist sehr unwahrscheinlich, dass eine eeprom_write-Routine versucht, Daten zu schreiben, es sei denn, "eep_checksum = 0xC0DEFACE" wird ausgeführt, bevor die Adresse und die Daten geladen werden. Nach dessen Ausführung wird das Prädikat auf Gültigkeit geprüft, bevor die Prüfsumme auf den richtigen Wert eingestellt und die Routine eeprom_store aufgerufen wird.
  2. Neben den eindeutigen Risiken, die durch die Ausführung von falschem Code entstehen, ist Metastabilität eine weitere Quelle für potenziell zufälliges Verhalten. Normalerweise speichert jedes Flip-Flop bei jedem Zyklus entweder ein High oder ein Low. Wenn sich jedoch der Eingang eines Flip-Flops ändert, sobald der Takt ankommt, kann es für eine beliebige Dauer seltsame Dinge ausgeben, die bis zum nächsten Taktzyklus in jedem Muster willkürlich zwischen hoch und niedrig wechseln können. Es ist durchaus möglich, dass einige Geräte hinter dem Flip-Flop es als "hoch" sehen, während andere es als "niedrig" sehen. Im Allgemeinen verlassen sich Prozessoren darauf, dass sich viele Geräte darauf einigen, was sie tun werden. Wenn während der Ausführung einer "Dekrement-und-Verzweigung-wenn-ungleich"-Anweisung einige Schaltungen denken, dass die Verzweigung genommen werden sollte, andere dies jedoch nicht tun,

Hersteller spezifizieren Betriebsparameter für Prozessoren, sodass die Prozessoren innerhalb dieser Parameter einfach funktionieren. Wenn Sie Dinge außerhalb dieses Bereichs verschieben, kann der Prozessor auf nur 99,9999999 zuverlässig reduziert werden. Das mag nicht allzu böse klingen, aber der Versuch, einen Prozessor zu diagnostizieren, der etwa einmal pro Minute etwas willkürlich falsch macht (mit 16 MHz), macht keinen Spaß.

Es wäre gut anzumerken, dass das Armoring von EEPROM-Schreibvorgängen lediglich ein vollständiges Bricking des Geräts statistisch weniger wahrscheinlich macht, es trägt nicht viel dazu bei, eine fehlerhafte Ausführung weniger wahrscheinlich zu machen. Trotzdem scheint es eine gute Politik zu sein. Ich bin erschrocken, dass 9 Neunen der Zuverlässigkeit eine so hohe Ausfallwahrscheinlichkeit in einer Minute bei nur 16 MHz haben.
@Kevin Vermeer: ​​Angesichts der Möglichkeit von Spannungseinbrüchen, elektrostatischen Ereignissen usw. ist es oft schwierig sicherzustellen, dass ein Gerät niemals außerhalb seines sicheren Betriebsbereichs betrieben wird. Die EEPROM-Panzerung ist nicht darauf ausgelegt, eine fehlerhafte Ausführung wahrscheinlicher zu machen. - Es ist ein Beispiel dafür, wie die Folgen minimiert werden können. Ähnliche Techniken sind häufig für Code nützlich, der externe Hardware betreibt. Man sollte sich bei sicherheitskritischen Systemen nicht auf Code verlassen, aber zB in einem Etikettenhersteller könnte man Logik wie die obige verwenden, um die Etiketten-Feed-Kontrollen zu schützen, damit eine zufällige Ausführung keine 5 $ an Etikettenmaterial zerstört.
Um es klar zu sagen, ich spreche speziell von Atmel AVR-Mikrocontrollern - die sich sehr von Allzweckprozessoren unterscheiden ...
@vicatcu: Gibt es einen bestimmten Weg, an den Sie denken, dass sie sich von PIC, 8x51, 68HC05, ARM usw. unterscheiden? Oder ältere CPUs wie die 6502 oder Z80? Bei modernen CPUs kann das Übertakten zu einer selbstzerstörerischen Überhitzung führen, bei kleineren oder langsameren CPUs ist dies jedoch bei jeder Geschwindigkeit, bei der das Gerät eine Chance hätte, zu funktionieren, kein Problem.

Vereinfachte Antwort auf Ihre Frage:

Das Arbeiten außerhalb des "sicheren Geschwindigkeitsbereichs" kann dazu führen, dass Ihr System instabil arbeitet. Was das bedeutet? Falsche Berechnungsergebnisse, Mikrocontroller-Resets etc.

Wenn Sie das nur aus Spaß tun möchten, sollten Sie sich diese Seiten/Artikel ansehen:

Übertaktung von Arduino mit Flüssigstickstoffkühlung. 20⇒65,3 MHz bei -196 °C/-320 °F

ATmega328 Übertaktung (30MHz)

Eine noch nicht erwähnte Überlegung, die weniger mit dem Betrieb bei gültigen Frequenzen in ungültigen Spannungsbereichen (16 MHz bei 3,3 V), sondern mehr mit dem Betrieb bei ungültigen Frequenzen in gültigen Spannungsbereichen (24 MHz bei 5 V) zu tun hat, ist die Wärmeableitung.

Jedes Mal, wenn ein Gate im Chip ein- oder ausgeschaltet wird, wird Wärme abgeführt. Das Gate, das aus MOSFETs besteht, wirkt in der Zeit zwischen EIN und AUS oder AUS und EIN wie ein variabler Widerstand. Dieser Widerstand leitet natürlich Wärme ab. Je häufiger es schaltet, desto weniger Zeit bleibt zwischen den Schaltvorgängen, damit diese Wärme aus dem Chip abgeführt werden kann, und Sie riskieren einen Wärmestau.

Ergo, je schneller du läufst, desto mehr Hitze kann sich aufbauen. Aus diesem Grund haben PC-CPUs große Lüfter - sie schalten so schnell, dass sie die Wärme nicht schnell genug aus dem Chip bekommen können, also brauchen sie Hilfe.

Die maximale Nenndrehzahl des Chips ist so gewählt, dass der Chip unter den gültigen Betriebsbedingungen (dh Umgebungstemperatur, typischerweise max. 85°C oder 105°C zum Beispiel) seine Wärmeentwicklung zuverlässig abführen kann. Eine Überschreitung dieser Frequenz kann zu einer Überhitzung des Chips führen.

Ja, es kann möglich sein, den Chip schneller als beabsichtigt zu betreiben, wenn Sie etwas Unterstützung bereitstellen - dh einen Kühlkörper und vielleicht einen Lüfter, und sicherstellen, dass eine gute Luftzirkulation um ihn herum vorhanden ist. Aber natürlich kann es an einem warmen Tag im Sommer vorkommen, dass ein Gerät, das den ganzen Winter über ein perfekt funktionierendes Gerät war, plötzlich seltsame Dinge tut.

Eine andere zu berücksichtigende Sache sind die Anstiegsgeschwindigkeiten. Taktsignale (und auch andere Signale) brauchen Zeit, um auf ihren gewünschten Pegel anzusteigen oder abzufallen. Wenn die Interna des Chips bedeuten, dass das Taktsignal beispielsweise 15 ns benötigt, um von einem LOW auf ein HIGH zu steigen, und Sie versuchen, es mit einer Frequenz zu takten, bei der eine HIGH-Periode beispielsweise 42 ns (24 MHz) beträgt, verbleiben nur 27 ns gültiger Takt Zeitraum übrig. Das sind nur 64% der Uhr, die tatsächlich ein Taktsignal sind - der Rest ist Müll. Dasselbe gilt für IO-Pins. Dinge wie SPI-Taktausgänge werden durch die Anstiegsgeschwindigkeit des IO-Pins begrenzt. Wenn Sie also Ihren Chip übertakten, um schnelleres SPI zu erhalten, werden Sie feststellen, dass die Dinge nicht immer wie geplant laufen, da die schöne Rechteckwelle, die Sie vom Taktausgang erwarten ist nicht mehr quadratisch.

Das Gerät funktioniert möglicherweise bei einigen Spannungs-/Temperaturkombinationen nicht.

Da es bei einer bestimmten Spannung / Temperatur (3,3 V und 25 ° C) funktioniert, arbeitet die Uhr nur an der Grenze und nicht an der Nennfrequenz des Kristalls? "funktioniert vielleicht nicht" ist furchtbar vage...
@vicatcu - "Schrecklich vage ist GENAU* die Spezifikation, die Sie erhalten. "Möglicherweise nicht funktionieren" ist **GENAU die Spezifikation. AN den Grenzen wird funktionieren. Sie können also sicher sein, dass es einen Sicherheitsspielraum gibt. Wie groß? Machen Sie ihren Tag ...
haha ja, ich entwerfe nie außerhalb der Spezifikation, ich wollte das ein bisschen provokativ sagen
@vicatcu: Manchmal scheint es fast unmöglich zu vermeiden, zumindest nominell außerhalb der Spezifikation zu entwerfen. Wenn beispielsweise zwei Geräte VOut(Max) und VIn(Max) beide als VDD angeben und eines einen Ausgang von jedem mit einem Eingang des anderen verbindet, tue ich das nicht, selbst wenn sie mit derselben Schiene verbunden sind Sehen Sie, wie man garantieren kann, dass ein vorübergehender Stromstoß in einem Gerät nicht dazu führen kann, dass seine VDD nicht einmal einen Mikrovolt unter die Ausgangsspannung des anderen Geräts fällt. Wenn dies der Fall wäre, könnte dies die spezifizierte Betriebsbedingung überschreiten, dass der Eingang VDD nicht überschreiten darf.
@vicatcu: Ich denke natürlich, dass die meisten Ingenieure denken würden, dass die Art und Weise, wie die Geräte physikalisch konstruiert sind, fast das Vorhandensein einer Toleranz von mindestens einigen Millivolt bei solchen Dingen garantieren würde, aber viele Datenblätter geben keine an. Nicht sicher warum. Ich kann verstehen, dass ein Hersteller nichts in der Nähe dessen angeben möchte, was die heutigen Teile problemlos akzeptieren, aber etwas zu spezifizieren scheint schöner zu sein, als nichts zu spezifizieren.