Übertakten eines AVR


12

In den AVR-Datenblättern im Abschnitt "Elektrische Eigenschaften" finden Sie normalerweise eine Grafik wie die folgende (diese stammt vom ATMega328):

Bildbeschreibung hier eingeben

Ich habe Designs gesehen, die zu "funktionieren" scheinen, aber außerhalb des schattierten Umschlags funktionieren. Insbesondere habe ich 3,3-V-Designs (Arduino) gesehen, bei denen die Uhr von einem externen 16-MHz-Kristall aus betrieben wird. Dies entspricht eindeutig nicht den Spezifikationen. Was sind die praktischen negativen Konsequenzen eines Laufens außerhalb dieses Umschlags?


13
Wenn Sie es nur sortof in spec ausführen, funktioniert es nur sortof.
Olin Lathrop

Mag dumm erscheinen, aber konnten Sie den XTal nicht ersetzen?
Hossein

Keine gute Idee, die meisten Chancen stehen gut, dass es nicht funktioniert, und trotzdem hat das Hinzufügen von weniger als 1 MIPS zu einem 20-MIPS-Prozessor nur einen geringen Vorteil. Darüber hinaus stürzt der AVR zu 100% ab. Sie müssen die Setup- und Haltezeiten für die internen Signale, die max. Frequenz, beibehalten. Wenn der kritischste Signalweg innerhalb des AVR im ungünstigsten Fall liegt, können Fertigungsschwankungen dazu führen, dass ein Chip etwas unempfindlicher gegen Übertaktung ist. Denken Sie jedoch daran, dass Peripheriegeräte dies auch dann nicht bedeuten, wenn der Core selbst einwandfrei funktioniert kann es mit einem anderen Chip aus einem anderen Stapel replizieren.
user34920

1
Um einen Witz umzudeuten: "Wenn sie so tun, als würden sie uns innerhalb der Spezifikation stempeln, tun wir so, als würden wir arbeiten."
Nitro2k01

Dies mag eine dumme Frage sein, aber ich dachte, alle AVR-Arduinos liefen mit 5 V, mit Ausnahme des Mini Pro-3.3 V, der nur mit 8 MHz läuft ... oder gibt es ein schnelleres 3.3 V-Modell, das ich nicht gesehen habe?
Jules

Antworten:


42

So machen Sie das Leben interessanter 101:

  • Wenn es dich nicht interessiert

    dass Ihre Ergebnisse manchmal falsch sein können,
    dass Ihr System manchmal abstürzt,
    dass Ihr Leben interessanter sein kann,
    dass Ihr Segway-Klon nur gelegentlich Gesichtspflanzen ohne offensichtlichen Grund ausführt,
    dass ...

    Führen Sie dann das Teil auf jeden Fall außerhalb der Herstellerspezifikation aus

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 manchmal nicht funktionieren.
Es kann nicht offensichtlich sein, dass es manchmal nicht funktioniert.

  • Eine Kluft kann normalerweise funktionieren
  • Ein Sprung kann normalerweise ankommen.
  • Eine Tabelle kann korrekt nachgeschlagen werden.
  • Ein ADC-Wert ist möglicherweise korrekt.

    Oder nicht

    Bildbeschreibung hier eingeben


4
Ich liebe diese Antwort lol
vicatcu

2
Das ist wunderbar.
Andrey Vihrov

6
Wenn Sie einen Kopf für 10 US-Dollar haben, sollten Sie einen Helm für 10 US-Dollar * kaufen, der die Wahrscheinlichkeit eines katastrophalen Ausfalls darstellt.
Nick Johnson

4
Ich fand meine neue Tapeten
Rick_2047

4
Das ist genial: "Wenn es Sie nicht interessiert (...), dass Ihr Segway-Klon nur gelegentlich Gesichtspflanzen ohne offensichtlichen Grund macht"
Kamil

14

Bei diesen Geschwindigkeiten berechnen die meisten Prozessoren alle Signale, die in einem bestimmten Taktzyklus benötigt werden, und warten auf die nächste Taktflanke, während sie sich stabilisieren. Sie speichern alle diese Signale und berechnen die Signale, die im nächsten Taktzyklus benötigt werden Warten auf diese Flanke, während sich diese Signale stabilisieren usw. Wenn eine Taktflanke eintrifft, bevor sich die erforderlichen Signale stabilisiert haben, kann es vorkommen, dass die nicht stabilisierten Signale 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 Antwortzeit des Flash-Arrays begrenzt, aus dem der Prozessor den Code liest. Wenn der Prozessor zu schnell ausgeführt wird und gelegentlich hier oder da ein Bit falsch gelesen wird, kann dies leicht dazu führen, dass der Prozessor einen völlig anderen Code ausführt als beabsichtigt. In vielen Programmen kann sogar eine einmalige Fehlinterpretation das Verhalten radikal verä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 "rüsten", 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 einen Code wie den folgenden verwenden:
    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. Anschließend wird das Prädikat auf Gültigkeit überprüft, bevor die Prüfsumme auf den richtigen Wert eingestellt und die Routine eeprom_store aufgerufen wird.
  2. Neben den offensichtlichen Risiken, die durch die Ausführung von falschem Code entstehen, ist die Metastabilität eine weitere mögliche Quelle für zufälliges Verhalten. Normalerweise verriegelt jedes Flip-Flop in jedem Zyklus entweder ein High oder ein Low. Wenn sich jedoch die Eingabe in ein Flip-Flop ändert, sobald der Takt ankommt, kann es sein, dass für eine beliebige Dauer seltsame Dinge ausgegeben werden, die in einem beliebigen Muster bis zum nächsten Taktzyklus willkürlich zwischen hoch und niedrig wechseln können; Es ist durchaus möglich, dass einige Geräte, die dem Flip-Flop nachgeschaltet sind, es als "hoch" betrachten, während andere es als "niedrig" betrachten. Im Allgemeinen verlassen sich Prozessoren darauf, dass sich viele Geräte darauf einigen, was sie tun werden. Wenn während der Ausführung eines Befehls "Dekrementieren und Verzweigen, wenn nicht gleich" einige Schaltungen der Ansicht sind, dass die Verzweigung ausgeführt werden sollte, andere jedoch nicht,

Die Hersteller geben die Betriebsparameter für Prozessoren so an, dass die Prozessoren innerhalb dieser Parameter nur normal arbeiten. Das Verschieben von Dingen außerhalb dieses Umschlags kann dazu führen, dass der Prozessor nur noch 99,9999999 zuverlässig ist. Das klingt vielleicht nicht allzu böse, aber es macht keinen Spaß, einen Prozessor zu diagnostizieren, der etwa einmal pro Minute willkürlich etwas falsch macht (16MHz).


2
Es ist zu beachten, dass das Schreiben von EEPROM-Panzerungen lediglich die statistische Wahrscheinlichkeit einer vollständigen Blockierung des Geräts verringert und die Wahrscheinlichkeit einer fehlerhaften Ausführung nicht wesentlich verringert. Trotzdem scheint es eine gute Politik zu sein. Ich bin erschrocken, dass 9 Neunen Zuverlässigkeit eine so hohe Ausfallwahrscheinlichkeit in einer Minute bei nur 16 MHz haben.
Kevin Vermeer

@ Kevin Vermeer: ​​Es ist oft schwierig, sicherzustellen, dass ein Gerät niemals außerhalb seines sicheren Betriebsbereichs betrieben wird, da die Gefahr von Spannungsabfällen, elektrostatischen Ereignissen usw. besteht. -es veranschaulicht, wie die Folgen minimiert werden können. Ähnliche Techniken sind häufig für Code nützlich, der externe Hardware betreibt. Man sollte sich nicht auf Code für sicherheitskritische Systeme verlassen, aber in einem Etikettendrucker könnte man Logik wie die obige verwenden, um die Etikettenvorschubkontrollen zu schützen, damit zufällige Ausführung nicht 5 US-Dollar an Etikettenmaterial zerstört.
Supercat

Um es klar
auszudrücken

2
@vicatcu: Gibt es eine besondere Art und Weise, wie Sie denken, dass sie sich von PIC, 8x51, 68HC05, ARM usw. unterscheiden? Oder ältere CPUs wie die 6502 oder die Z80? Bei modernen CPUs kann Übertakten zu einer selbstzerstörenden Überhitzung führen. Bei kleineren oder langsameren CPUs ist dies jedoch bei jeder Geschwindigkeit, bei der das Gerät möglicherweise arbeitet, kein Problem.
Supercat


3

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) als vielmehr 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, leitet es Wärme ab. 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 geschaltet wird, desto kürzer ist die Zeit zwischen den Schaltvorgängen, in der diese Wärme aus dem Chip abgeführt wird, und Sie riskieren einen Wärmestau.

Ergo, je schneller du rennst, desto mehr Wärme kann sich aufbauen. Das ist der Grund, warum PC-CPUs große Lüfter haben - sie schalten so schnell, dass sie die Wärme nicht schnell genug aus dem Chip holen können, und brauchen daher Hilfe.

Die Höchstgeschwindigkeit des Chips wird so gewählt, dass der Chip seine Wärmeentwicklung unter den gültigen Betriebsbedingungen (z. B. Umgebungstemperatur, typischerweise max. 85 ° C oder 105 ° C) zuverlässig abführen kann. Ein Überschreiten dieser Frequenz kann zur Überhitzung des Chips führen.

Ja, es kann möglich sein, den Chip schneller als vorgesehen laufen zu lassen, wenn Sie Unterstützung leisten - z. B. durch einen Kühlkörper und möglicherweise einen Lüfter. Aber an einem warmen Tag im Sommer kann es natürlich vorkommen, dass das, was den ganzen Winter über perfekt funktioniert hat, plötzlich seltsame Dinge tut.

Eine andere zu berücksichtigende Sache ist die der Anstiegsraten. Taktsignale (und auch andere Signale) benötigen Zeit, um auf den gewünschten Pegel zu steigen oder zu fallen. Wenn die Interna des Chips bedeuten, dass das Taktsignal 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 von beispielsweise 42 ns (24 MHz) vorliegt, so dass nur 27 ns eines gültigen Takts übrig bleiben verbleibender Zeitraum. Das sind nur 64% der Uhr als Taktsignal - der Rest ist Müll. Gleiches gilt für IO-Pins. Dinge wie SPI-Taktausgänge werden durch die Anstiegsrate des IO-Pins begrenzt. Wenn Sie also Ihren Chip übertakten, um einen schnelleren SPI zu erhalten, werden Sie feststellen, dass die Dinge nicht immer wie geplant verlaufen, wie die schöne Rechteckwelle, die Sie vom Taktausgang erwarten ist nicht mehr quadratisch.


1

Das Gerät funktioniert möglicherweise nicht mit einer bestimmten Spannungs- / Temperaturkombination.


da es tut irgend Spannung / Temperatur (3,3 V und 25 ° C) arbeitet, funktioniert die Uhr nur entlang der Grenze arbeiten , anstatt die Nennfrequenz des Kristalls? "funktioniert möglicherweise nicht" ist furchtbar vage ...
vicatcu

@vicatcu - "Furchtbar vage ist GENAU * die Spezifikation, die Sie erhalten." Könnte nicht funktionieren "ist ** GENAU die Spezifikation. An den Grenzen wird funktionieren. So können Sie sicher sein, dass es einen gewissen Sicherheitsspielraum gibt. Wie groß? Machen Sie ihren Tag ...
Russell McMahon

haha ja, ich entwerfe nie aus der Spezifikation heraus, ich habe darum gebeten, etwas provokativ zu sein
vicatcu 31.10.11

@vicatcu: Manchmal scheint es fast unmöglich zu sein, das Design zumindest nominal außerhalb der Spezifikation zu halten. Wenn beispielsweise zwei Geräte VOut (Max) und VIn (Max) beide als VDD angeben und eines einen Ausgang mit einem Eingang des anderen verbindet, gilt dies auch dann, wenn sie an dieselbe Schiene angeschlossen sind, was ich nicht tue sehen Sie, wie man garantieren kann, dass ein vorübergehender Strom in einem Gerät nicht dazu führen kann, dass der VDD-Wert sogar einen Mikrovolt unter die vom anderen Gerät ausgegebene Spannung fällt. In diesem Fall könnte die angegebene Betriebsbedingung überschritten werden, dass der Eingang VDD nicht überschreiten darf.
Supercat

1
@vicatcu: Natürlich denke ich, dass die meisten Ingenieure sich vorstellen würden, dass die Art und Weise, wie die Geräte physisch aufgebaut sind, die Existenz von mindestens ein paar Millivolt Toleranz in Bezug auf solche Dinge fast garantieren würde, aber viele Datenblätter spezifizieren keine. Nicht sicher warum. Ich kann verstehen, dass ein Hersteller nichts spezifizieren möchte, was in etwa dem entspricht, was die heutigen Teile problemlos akzeptieren, aber etwas zu spezifizieren, scheint besser zu sein, als nichts zu spezifizieren.
Supercat
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.