«Overclocking» d'un AVR

12

Dans les fiches techniques AVR sous la section Caractéristiques électriques, vous trouverez généralement un graphique comme celui-ci (celui-ci provient de l'ATMega328):

entrez la description de l'image ici

J'ai vu des conceptions qui semblent "fonctionner" mais qui fonctionnent en dehors de l'enveloppe ombrée. Plus précisément, j'ai vu des conceptions 3,3 V (Arduino) qui font fonctionner l'horloge à partir d'un cristal externe de 16 MHz. De toute évidence, cela est hors spécifications. Quelles sont les conséquences négatives pratiques d'un dépassement de cette enveloppe?

vicatcu
la source
13
Si vous ne l'exécutez que sortof dans spec, il ne fonctionnera que sortof.
Olin Lathrop
Cela peut sembler stupide, mais ne pouvez-vous pas remplacer le XTal?
Hossein
Ce n'est pas une bonne idée, la plupart des chances que cela ne fonctionnera pas et de toute façon vous gagnez très peu en ajoutant moins de 1 MIPS à un processeur de 20 MIPS, au-dessus du fait que je suis à 100% l'AVR va planter. Vous devez conserver les temps de configuration et de maintien des signaux internes, la fréquence maximale. prend le pire des cas dans le chemin de signal le plus critique à l'intérieur de l'AVR, les variations de fabrication peuvent rendre une puce un peu plus immunisée contre l'overclocking mais très peu et rappelez-vous que même si le cœur lui-même fonctionne bien, cela ne signifie pas que les périphériques le feront ou que vous peut le répliquer avec une autre puce d'un lot différent.
user34920
1
Pour réutiliser une blague: "S'ils prétendent nous cadrer avec les spécifications, nous ferons semblant de travailler."
nitro2k01
Cela peut être une question stupide, mais je pensais que tous les AVR Arduinos fonctionnaient à 5v, sauf le Mini Pro-3.3v qui ne fonctionne qu'à 8 MHz ... ou y a-t-il un modèle 3.3v plus rapide que je n'ai pas vu?
Jules

Réponses:

42

Comment rendre la vie plus intéressante 101:

  • Si tu t'en fous

    que vos résultats peuvent parfois être faux,
    que votre système peut parfois planter,
    que votre vie peut être plus intéressante,
    que votre clone Segway ne fait que de temps en temps des face-plants sans raison évidente,
    que ...

    puis exécutez par tous les moyens la partie en dehors des spécifications du fabricant

Vous obtenez ce que vous ne payez pas.
Si vous avez une tête de 10 $, achetez un casque de 10 $.

Cela peut souvent fonctionner.
Cela peut ne pas fonctionner parfois.
Il n'est peut-être pas évident que cela ne fonctionne pas parfois.

  • Un fossé peut généralement fonctionner
  • Un saut peut généralement arriver.
  • Un tableau peut être recherché correctement.
  • Une valeur ADC peut être correcte.

    Ou pas

    entrez la description de l'image ici

Russell McMahon
la source
4
j'aime cette réponse lol
vicatcu
2
C'est merveilleux.
Andrey Vihrov
6
En fait, si vous avez une tête de 10 $, vous devriez acheter un casque probabilité_de_catastrophique_failure de 10 $ *.
Nick Johnson
4
J'ai trouvé mon nouveau fond d'écran
Rick_2047
4
C'est du génie: "Si vous ne vous souciez pas (...) que votre clone Segway ne fasse que de temps en temps des plantes sans raison évidente"
Kamil
14

À ces sortes de vitesses, la plupart des processeurs fonctionnent en calculant tous les signaux qui seront nécessaires à un certain cycle d'horloge, en attendant le front d'horloge suivant pendant qu'ils se stabilisent, en verrouillant tous ces signaux et en calculant les signaux nécessaires au cycle d'horloge suivant. , en attendant ce front pendant que ces signaux se stabilisent, etc. Si un front d'horloge arrive avant que les signaux nécessaires se soient stabilisés, l'effet sera que celui qui ne s'est pas stabilisé ne soit pas verrouillé proprement. Si cela se produit dans un microcontrôleur, les effets peuvent être imprévisibles - pour au moins deux raisons:

  1. Dans de nombreux cas, la vitesse d'exécution est limitée par le temps de réponse de la matrice flash à partir de laquelle le processeur lit le code. Si l'exécution trop rapide du processeur provoque une erreur de lecture occasionnelle ici ou là, cela pourrait facilement amener le processeur à exécuter un code entièrement différent de ce qui était prévu. Dans de nombreux programmes, même une lecture erronée d'un seul bit pourrait radicalement modifier le comportement; il est rarement pratique d'essayer de faire des prédictions sur ce qui pourrait arriver dans de tels cas. Le mieux que l'on puisse faire dans certains cas est d'armer certaines parties du programme afin de rendre improbable une exécution errante. Par exemple, on peut laisser une EEPROM protégée jusqu'à ce que l'on veuille l'écrire, puis utiliser du code comme:
    uint32_t eep_checksum, eep_addr, eep_data;
    
    #define EEPROM_WRITE (adresse, données, prédicat) \
      eep_checksum = 0xC0DEFACE, eep_addr = (adresse), eep_data = (données), \ 
      eep_checksum + = eep_addr + eep_data, ((prédicat) || 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 ();
    }  
    
    Il est très peu probable qu'une routine eeprom_write tente d'écrire des données à moins que "eep_checksum = 0xC0DEFACE" ne soit exécuté avant le chargement de l'adresse et des données. Après l'exécution de cela, le prédicat sera vérifié pour la validité avant d'ajuster la somme de contrôle à la valeur appropriée et d'appeler la routine eeprom_store.
  2. En plus des risques évidents posés par l'exécution de code incorrect, une autre source de comportement aléatoire potentiel est la métastabilité. Normalement, à n'importe quel cycle, chaque bascule se verrouille en haut ou en bas. Si, cependant, l'entrée d'une bascule change juste au moment où l'horloge arrive, elle peut, pour une durée arbitraire, sortir des trucs étranges qui peuvent arbitrairement basculer entre haut et bas, dans n'importe quel modèle, jusqu'au cycle d'horloge suivant; il est tout à fait possible que certains appareils en aval de la bascule le voient comme "haut" tandis que d'autres le voient comme "bas". En règle générale, les processeurs dépendent de nombreux appareils qui conviennent de ce qu'ils vont faire. Si, lors de l'exécution d'une instruction "décrémenter-et-branche-si-pas-égale", et certains circuits pensent que la branche devrait être prise mais d'autres pas,

Les fabricants spécifient les paramètres de fonctionnement des processeurs de telle sorte que, dans ces paramètres, les processeurs fonctionnent simplement. Pousser les choses en dehors de cette enveloppe peut réduire le processeur à seulement 99,9999999 fiable. Cela peut ne pas sembler trop diabolique, mais essayer de diagnostiquer un processeur qui fait quelque chose de mal arbitrairement une fois par minute (environ 16 MHz) n'est pas amusant.

supercat
la source
2
Il serait bon de noter que le blindage des écritures EEPROM rend simplement la brique complète du périphérique statistiquement moins probable, cela ne fait pas beaucoup pour rendre l'exécution erronée moins probable. Néanmoins, cela semble être une bonne politique. Je suis surpris que 9 neuf de fiabilité aient une probabilité de défaillance aussi élevée en une minute à seulement 16 MHz.
Kevin Vermeer
@Kevin Vermeer: ​​Il est souvent difficile de garantir qu'un appareil ne fonctionnera jamais en dehors de sa zone de fonctionnement sûre, étant donné les possibilités de creux d'alimentation, d'événements électrostatiques, etc. Le blindage EEPROM n'est pas conçu pour rendre plus probable une exécution errante -il illustre la façon de minimiser les conséquences. Des techniques similaires sont souvent utiles pour le code qui exploite du matériel externe. Il ne faut pas se fier au code pour les systèmes critiques pour la sécurité, mais dans un fabricant d'étiquettes, par exemple, on peut utiliser une logique comme celle ci-dessus pour protéger les contrôles d'alimentation d'étiquettes, de sorte qu'une exécution aléatoire ne détruira pas 5 $ en stock d'étiquettes.
supercat
Pour être clair, je parle spécifiquement des microcontrôleurs Atmel AVR - qui sont très différents des processeurs à usage général ...
vicatcu
2
@vicatcu: Y a-t-il une façon particulière de penser qu'ils sont différents des PIC, 8x51, 68HC05, ARM, etc.? Ou d'ailleurs, des CPU plus anciens comme le 6502 ou le Z80? Sur les processeurs modernes, l'overclocking peut provoquer une surchauffe auto-destructrice, mais sur les processeurs plus petits ou plus lents, ce n'est pas un problème à n'importe quelle vitesse où l'appareil aurait une chance de fonctionner.
supercat
3

Une considération non encore mentionnée, qui est moins liée au fonctionnement à des fréquences valides dans des plages de tension invalides (16 MHz à 3,3 V) mais plus à voir avec le fonctionnement à des fréquences invalides dans des plages de tension valides (24 MHz à 5 V) est celle de la dissipation thermique.

Chaque fois qu'une porte de la puce s'allume ou s'éteint, elle dissipe la chaleur. La grille, composée de MOSFET, agit comme une résistance variable dans la période entre ON et OFF, ou OFF et ON. Cette résistance dissipe bien sûr la chaleur. Plus il passe fréquemment, moins il y a de temps entre les commutations pour que cette chaleur se dissipe hors de la puce, et vous risquez une accumulation de chaleur.

Ergo, plus vous courez vite, plus la chaleur peut s'accumuler. C'est pourquoi les processeurs PC ont de gros fans - ils commutent si vite qu'ils ne peuvent pas extraire la chaleur de la puce assez rapidement, ils ont donc besoin d'aide.

La vitesse nominale maximale de la puce est sélectionnée pour permettre à la puce de dissiper son accumulation de chaleur de manière fiable dans les conditions de fonctionnement valables (c'est-à-dire la température ambiante, généralement max 85 ° C ou 105 ° C par exemple). Le dépassement de cette fréquence peut entraîner une surchauffe de la puce.

Oui, il peut être possible de faire fonctionner la puce plus rapidement que prévu si vous fournissez une assistance, c'est-à-dire un dissipateur thermique et peut-être un ventilateur, et assurez-vous qu'il y a une bonne circulation d'air autour. Mais bien sûr, par une chaude journée d'été, vous pouvez trouver ce qui était un appareil parfaitement fonctionnel tout l'hiver commence soudainement à faire des choses étranges.

Une autre chose à considérer est celle des taux de balayage. Les signaux d'horloge (et d'autres signaux aussi) mettent du temps à monter ou à descendre au niveau souhaité. Si les internes de la puce signifient que le signal d'horloge prend 15 ns pour passer d'un niveau bas à un niveau haut, et que vous essayez de le synchroniser à une fréquence où une période élevée est, disons 42 ns (24 MHz), ce qui ne laisse que 27 ns d'horloge valide. période restante. Cela ne représente que 64% de l'horloge étant en fait un signal d'horloge - le reste est des ordures. De même pour les broches IO. Des choses comme les sorties d'horloge SPI seront limitées par la vitesse de balayage de la broche IO, donc si vous overclockez votre puce pour obtenir un SPI plus rapide, vous constaterez que les choses ne se passent pas toujours comme prévu, comme la belle onde carrée que vous attendez de la sortie d'horloge n'est plus carré.

Majenko
la source
1

L'appareil peut ne pas fonctionner à une certaine combinaison tension / température.

Leon Heller
la source
étant donné qu'il fait le travail à une certaine tension / température (3.3V et 25C), l'horloge ne fonctionne tout le long de la frontière plutôt que la fréquence nominale du cristal? "pourrait ne pas fonctionner" est terriblement vague ...
vicatcu
@vicatcu - "Vraiment vague est EXACTEMENT * la spécification que vous obtenez." Peut ne pas fonctionner "est ** EXACTEMENT la spécification. SUR les limites fonctionnera. Ainsi, vous pouvez être sûr qu'il y a une marge de sécurité. Quelle taille? Faites leur journée ...
Russell McMahon
haha yea, je ne
conçois
@vicatcu: Parfois, il semble presque impossible d'éviter de concevoir au moins nominalement hors spécifications. Par exemple, si deux appareils spécifient VOut (Max) et VIn (Max) à la fois comme VDD, et l'un connecte une sortie de chacun à une entrée de l'autre, même s'ils sont câblés sur le même rail, je ne le fais pas voyez comment on pourrait garantir qu'un transitoire de courant momentané dans un appareil ne pourrait pas faire tomber son VDD même d'un microvolt en dessous de la tension de sortie de l'autre appareil. Si tel était le cas, cela pourrait dépasser la condition de fonctionnement spécifiée selon laquelle l'entrée ne doit pas dépasser VDD.
supercat
1
@vicatcu: Bien sûr, je pense que la plupart des ingénieurs penseraient que la façon dont les appareils sont construits physiquement garantirait presque l'existence d'une tolérance d'au moins quelques millivolts sur de telles choses, mais de nombreuses fiches techniques n'en spécifient aucune. Pas certain de pourquoi. Je peux comprendre qu'un fabricant ne veuille pas spécifier quoi que ce soit proche de ce que les pièces d'aujourd'hui accepteront sans problème, mais spécifier quelque chose semblerait plus agréable que de ne rien spécifier.
supercat