"Overclocking" un AVR


12

Nei fogli dati AVR nella sezione Caratteristiche elettriche troverai di solito un grafico come questo (questo è tratto da ATMega328):

inserisci qui la descrizione dell'immagine

Ho visto disegni che sembrano "funzionare" ma funzionano al di fuori dell'involucro ombreggiato. In particolare, ho visto progetti da 3,3 V (Arduino) che eseguono l'orologio da un cristallo esterno da 16 MHz. Chiaramente, questo è fuori specifica. Quali sono le conseguenze pratiche negative di correre fuori da questo involucro?


13
Se lo esegui solo in base alle specifiche, funzionerà solo in base alle specifiche.
Olin Lathrop,

Può sembrare stupido ma non potresti sostituire l'XTal?
Hossein,

Non è una buona idea, la maggior parte delle probabilità non funzionerà e comunque guadagni molto poco aggiungendo meno di 1 MIPS a un processore da 20 MIPS, oltre che sono al 100% l'AVR andrà in crash. È necessario mantenere i tempi di impostazione e di attesa per i segnali interni, la frequenza massima. prende lo scenario peggiore nel percorso del segnale più critico all'interno dell'AVR, le variazioni di produzione potrebbero rendere un chip un po 'più immune all'overclocking ma da pochissimo e ricordate che anche se il core stesso funziona bene non significa che le periferiche lo faranno o che voi può replicarlo con un altro chip di lotti diversi.
user34920

1
Per riutilizzare uno scherzo: "Se faranno finta di cronometrarci secondo le specifiche, faremo finta di funzionare".
nitro2k01,

Questa potrebbe essere una domanda stupida, ma pensavo che tutti gli Arduinos AVR funzionassero a 5v, tranne il Mini Pro-3.3v che funziona solo a 8MHz ... o c'è un modello 3.3v più veloce che non ho visto?
Jules

Risposte:


42

Come rendere la vita più interessante 101:

  • Se non ti interessa

    che i tuoi risultati a volte potrebbero essere sbagliati,
    che il tuo sistema a volte
    potrebbe andare in crash, che la tua vita potrebbe essere più interessante,
    che il tuo clone Segway fa solo occasionalmente piante facciali senza una ragione ovvia,
    che ...

    quindi eseguire la parte al di fuori delle specifiche del produttore

Ottieni ciò per cui non paghi.
Se hai una testa da $ 10, acquista un casco da $ 10.

Spesso può funzionare.
A volte potrebbe non funzionare.
Potrebbe non essere ovvio che a volte non funziona.

  • Una divisione può di solito funzionare
  • Di solito può arrivare un salto.
  • Una tabella può essere cercata correttamente.
  • Un valore ADC potrebbe essere corretto.

    O no

    inserisci qui la descrizione dell'immagine


4
amo questa risposta lol
vicatcu

2
Questo è meraviglioso.
Andrey Vihrov,

6
In realtà, se hai una testa da $ 10, dovresti comprare un casco da $ 10 * probabilità_di_catastrofico_failure.
Nick Johnson,

4
Ho trovato il mio nuovo sfondo
Rick_2047

4
Questo è geniale: "Se non ti interessa (...) che il tuo clone Segway faccia solo occasionalmente piante facciali senza una ragione ovvia"
Kamil,

14

A questo tipo di velocità, la maggior parte dei processori lavora calcolando tutti i segnali che saranno necessari ad un certo ciclo di clock, aspettando il prossimo fronte di clock mentre si stabilizzano, bloccando tutti quei segnali e calcolando i segnali necessari al prossimo ciclo di clock , in attesa di quel fronte mentre quei segnali si stabilizzano, ecc. Se arriva un fronte di orologio prima che i segnali necessari si siano stabilizzati, l'effetto sarà che qualunque segnale non si sia stabilizzato potrebbe non essere bloccato in modo pulito. Se ciò si verifica in un microcontrollore, gli effetti potrebbero essere imprevedibili, per almeno due motivi:

  1. In molti casi, la velocità di esecuzione è limitata dal tempo di risposta dell'array flash da cui il processore legge il codice. Se l'esecuzione del processore troppo veloce provoca la lettura errata di un bit occasionale qua e là, potrebbe facilmente far sì che il processore esegua codice completamente diverso da quello previsto. In molti programmi, anche un singolo errore di lettura a bit singolo può alterare radicalmente il comportamento; raramente è pratico cercare di fare previsioni su ciò che potrebbe accadere in questi casi. In alcuni casi, il migliore che si possa fare è "armare" determinate parti del programma in modo da rendere improbabile un'esecuzione errata. Ad esempio, si potrebbe lasciare una EEPROM protetta fino a quando non si desidera scriverla, quindi utilizzare un codice simile a:
    uint32_t eep_checksum, eep_addr, eep_data;
    
    #define EEPROM_WRITE (indirizzo, dati, predicato) \
      eep_checksum = 0xC0DEFACE, eep_addr = (indirizzo), eep_data = (dati), \ 
      eep_checksum + = eep_addr + eep_data, ((predicato) || 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 ();
    }  
    
    È molto improbabile che una routine eeprom_write tenti di scrivere dati a meno che non venga eseguito "eep_checksum = 0xC0DEFACE" prima che l'indirizzo e i dati vengano caricati. Dopo l'esecuzione di ciò, il predicato verrà verificato per la validità prima di adattare il checksum al valore corretto e chiamare la routine eeprom_store.
  2. Oltre ai chiari rischi posti dall'esecuzione di un codice errato, un'altra fonte di potenziale comportamento casuale è la metastabilità. Normalmente, su ogni ciclo, ogni infradito si blocca in alto o in basso. Se, tuttavia, l'input a un flip flop cambia proprio quando arriva l'orologio, potrebbe per qualche durata arbitraria emettere cose strane che possono alternare arbitrariamente tra alto e basso, in qualsiasi modello, fino al successivo ciclo di clock; è del tutto possibile che alcuni dispositivi a valle del flip flop lo vedano come "alto" mentre altri lo vedono come "basso". In genere, i processori si basano su molti dispositivi che concordano su cosa faranno. Se durante l'esecuzione di un'istruzione "decrementa e dirama se non uguale", e alcuni circuiti pensano che il ramo debba essere preso ma altri no,

I produttori specificano i parametri operativi per i processori in modo tale che, all'interno di tali parametri, i processori funzioneranno semplicemente. Spingere le cose fuori da quella busta può ridurre l'affidabilità del processore solo a 99.9999999. Ciò potrebbe non sembrare troppo malvagio, ma cercare di diagnosticare un processore che fa qualcosa di arbitrariamente sbagliato una volta al minuto (immaginando 16MHz) non è divertente.


2
Sarebbe bene notare che l'armatura delle scritture EEPROM rende semplicemente statisticamente meno completa la completa muratura del dispositivo, non fa molto per rendere meno probabile l'esecuzione errata. Tuttavia, sembra una buona politica. Sono sorpreso che 9 nove di affidabilità abbiano una probabilità di guasto così elevata in un minuto a soli 16 MHz.
Kevin Vermeer,

@Kevin Vermeer: ​​spesso è difficile garantire che un dispositivo non funzionerà mai al di fuori della sua area operativa sicura, date le possibilità di interruzioni dell'alimentazione, eventi elettrostatici, ecc. L'armatura EEPROM non è progettata per rendere più probabile l'esecuzione errata- -è illustrativo di come ridurre al minimo le conseguenze. Tecniche simili sono spesso utili per il codice che gestisce hardware esterno. Non si dovrebbe fare affidamento sul codice per i sistemi critici per la sicurezza, ma ad esempio in un'etichettatrice si potrebbe usare una logica come quella sopra per proteggere i controlli di alimentazione delle etichette, quindi l'esecuzione casuale non distruggerà $ 5 nello stock di etichette.
supercat

Per essere chiari, sto parlando in particolare dei microcontrollori Atmel AVR - che sono molto diversi dai processori per uso generale ...
vicatcu

2
@vicatcu: C'è un modo particolare in cui stai pensando che sono diversi da PIC, 8x51, 68HC05, ARM, ecc.? O del resto, CPU più vecchie come la 6502 o la Z80? Nelle moderne CPU, l'overclocking può causare un surriscaldamento autodistruttivo, ma su CPU più piccole o più lente, questo è un problema a qualsiasi velocità in cui il dispositivo avrebbe qualche possibilità di funzionare.
supercat


3

Una considerazione non ancora menzionata, che ha meno a che fare con il funzionamento a frequenze valide in intervalli di tensione non validi (16 MHz a 3,3 V) ma più a che fare con il funzionamento a frequenze non valide a intervalli di tensione validi (24 MHz a 5 V) è quella della dissipazione del calore.

Ogni volta che un gate nel chip si accende o si spegne, dissipa il calore. Il gate, essendo costituito da MOSFET, agisce come un resistore variabile nel periodo tra essere ON e OFF, oppure OFF e ON. Quella resistenza ovviamente dissipa il calore. Più frequentemente cambia, minore è il tempo che intercorre tra le commutazione per far sì che quel calore si disperda fuori dal chip e si rischia l'accumulo di calore.

Ergo, più veloce corri, più calore può accumularsi. Questo è il motivo per cui le CPU del PC hanno grandi fan: cambiano così velocemente che non riescono a liberare il calore dal chip abbastanza velocemente, quindi hanno bisogno di aiuto.

La velocità nominale massima del chip viene selezionata per consentire al chip di dissipare il suo accumulo di calore in modo affidabile nelle condizioni operative valide (ad esempio, la temperatura ambiente, in genere ad esempio max 85 ° C o 105 ° C). Il superamento di tale frequenza può causare il surriscaldamento del chip.

Sì, può essere possibile far funzionare il chip più velocemente del previsto se si fornisce assistenza, ad esempio un dissipatore di calore e forse una ventola, e si assicura che vi sia un buon flusso d'aria attorno ad esso. Ma, naturalmente, in una calda giornata d'estate potresti scoprire che quello che era un dispositivo perfettamente funzionante per tutto l'inverno improvvisamente inizia a fare cose strane.

Un'altra cosa da considerare è quella dei tassi di risposta. I segnali di orologio (e anche altri segnali) impiegano del tempo per salire o scendere al livello desiderato. Se gli interni del chip indicano che il segnale di clock impiega dire 15 ns per passare da un BASSO ad un ALTO, e si tenta di clock con una frequenza in cui un periodo ALTO è, diciamo 42 ns (24 MHz), che lascia solo 27 ns di clock valido periodo rimasto. Questo è solo il 64% dell'orologio che in realtà è un segnale di clock - il resto è spazzatura. Lo stesso per i pin IO. Cose come le uscite di clock SPI saranno limitate dalla velocità di variazione del pin IO, quindi se overclocchi il tuo chip per ottenere SPI più veloce scoprirai che le cose non vanno sempre come previsto, come la bella onda quadra che ti aspetti dall'uscita del clock non è più quadrato.


1

Il dispositivo potrebbe non funzionare con una combinazione di tensione / temperatura.


dato che fa il lavoro ad un certo tensione / temperatura (3,3 V e 25 ° C), non l'orologio appena operano lungo il confine, piuttosto che la frequenza nominale del cristallo? "Potrebbe non funzionare" è tremendamente vago ...
vicatcu

@vicatcu - "Incredibilmente vago è ESATTAMENTE * la specifica che ottieni." Potrebbe non funzionare "è ** ESATTAMENTE la specifica. ON i confini funzioneranno. Quindi puoi essere sicuro che ci sia un margine di sicurezza. Quanto grande? Fai la loro giornata ...
Russell McMahon,

haha yea, non ho mai progettato fuori specifica, stavo chiedendo che questo fosse un po 'provocatorio
vicatcu

@vicatcu: a volte sembra quasi impossibile evitare di progettare almeno nominalmente fuori specifica. Ad esempio, se due dispositivi specificano VOut (Max) e VIn (Max) entrambi come VDD e uno collega un'uscita di ciascuno a un ingresso dell'altro, anche se sono collegati allo stesso binario non vedere come si potrebbe garantire che un transitorio di corrente momentanea in un dispositivo non possa causare la caduta del suo VDD persino di una microvolt al di sotto della tensione di uscita dell'altro dispositivo. In tal caso, ciò potrebbe superare la condizione operativa specificata in cui l'ingresso non deve superare VDD.
supercat

1
@vicatcu: Certo, penso che la maggior parte degli ingegneri immaginerebbe che il modo in cui i dispositivi sono fisicamente costruiti garantirebbe quasi l'esistenza di una tolleranza di almeno alcuni millivolt su tali cose, ma molte schede tecniche non ne specificano alcuna. Non so perché. Riesco a capire un produttore che non vuole specificare nulla di simile a ciò che le parti di oggi accetteranno senza problemi, ma specificare qualcosa sembrerebbe più bello del non specificare nulla.
supercat
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.