"Overclocking" un AVR

12

En las hojas de datos de AVR en la sección Características eléctricas, normalmente encontrará un gráfico como este (este es del ATMega328):

ingrese la descripción de la imagen aquí

He visto diseños que parecen "funcionar" pero funcionan fuera del sobre sombreado. Específicamente, he visto diseños de 3.3V (Arduino) que ejecutan el reloj desde un cristal externo de 16MHz. Claramente, esto está fuera de especificaciones. ¿Cuáles son las consecuencias negativas prácticas de correr fuera de este sobre?

vicatcu
fuente
13
Si solo lo ejecuta sortof en la especificación, entonces solo funcionará.
Olin Lathrop
Puede parecer tonto, pero ¿no podrías reemplazar el XTal?
Hossein
No es una buena idea, la mayoría de las posibilidades de que no funcione y de todos modos gana muy poco al agregar menos de 1 MIPS a un procesador de 20 MIPS, por encima de eso estoy al 100%, el AVR se bloqueará. Debe mantener los tiempos de configuración y retención para las señales internas, la frecuencia máxima. toma el peor de los casos en la ruta de señal más crítica dentro del AVR, las variaciones de fabricación pueden hacer que un chip sea un poco más inmune al overclocking, pero por muy poco y recuerde que incluso si el núcleo funciona bien, no significa que los periféricos lo harán o que puede replicarlo con otro chip de un lote diferente.
user34920
1
Para reutilizar una broma: "Si pretenden registrarnos dentro de las especificaciones, pretendemos trabajar".
nitro2k01
Esta puede ser una pregunta tonta, pero pensé que todos los AVR Arduinos funcionaban a 5v, excepto el Mini Pro-3.3v que solo funciona a 8MHz ... ¿o hay un modelo de 3.3v más rápido que no haya visto?
Jules

Respuestas:

42

Cómo hacer la vida más interesante 101:

  • Si no te importa

    que sus resultados a veces pueden ser incorrectos,
    que su sistema a veces puede fallar,
    que su vida puede ser más interesante,
    que su clon de Segway solo ocasionalmente hace frente a plantas sin ninguna razón obvia,
    que ...

    entonces, por supuesto, ejecute la pieza fuera de las especificaciones del fabricante

Obtienes lo que no pagas.
Si tiene una cabeza de $ 10, compre un casco de $ 10.

A menudo puede funcionar.
Puede que no funcione a veces.
Puede no ser obvio que a veces no funciona.

  • Una división generalmente puede funcionar
  • Un salto generalmente puede llegar.
  • Se puede buscar una tabla correctamente.
  • Un valor de ADC puede ser correcto.

    O no

    ingrese la descripción de la imagen aquí

Russell McMahon
fuente
44
me encanta esta respuesta lol
vicatcu
2
Esto es maravilloso
Andrey Vihrov
66
En realidad, si tienes una cabeza de $ 10, debes comprar un casco de probabilidad de falla catastrófica de $ 10 *.
Nick Johnson el
44
Encontré mi nuevo fondo de pantalla
Rick_2047
44
Esto es genial: "Si no te importa (...) que tu clon de Segway solo ocasionalmente haga plantas faciales sin razón obvia"
Kamil
14

A este tipo de velocidades, la mayoría de los procesadores funcionan calculando todas las señales que se necesitarán en un determinado ciclo de reloj, esperando el siguiente borde del reloj mientras se estabilizan, bloqueando todas esas señales y calculando las señales necesarias en el siguiente ciclo de reloj , esperando ese borde mientras se estabilizan esas señales, etc. Si llega un borde de reloj antes de que las señales necesarias se hayan estabilizado, el efecto será que las señales que no se hayan estabilizado no se pueden enganchar limpiamente. Si esto ocurre en un microcontrolador, los efectos pueden ser impredecibles, al menos por dos razones:

  1. En muchos casos, la velocidad de ejecución está limitada por el tiempo de respuesta de la matriz flash desde la cual el procesador lee el código. Si ejecutar el procesador demasiado rápido hace que un bit ocasional se lea mal aquí o allá, podría hacer que el procesador ejecute un código completamente diferente al previsto. En muchos programas, incluso una lectura errónea de un solo bit podría alterar radicalmente el comportamiento; Raramente es práctico tratar de hacer predicciones sobre lo que podría suceder en tales casos. Lo mejor que se puede hacer en algunos casos es "blindar" ciertas partes del programa para que la ejecución errónea sea poco probable. Por ejemplo, uno puede dejar una EEPROM protegida hasta que quiera escribirla, y luego usar código como:
    uint32_t eep_checksum, eep_addr, eep_data;
    
    #define EEPROM_WRITE (dirección, datos, predicado) \
      eep_checksum = 0xC0DEFACE, eep_addr = (dirección), eep_data = (datos), \ 
      eep_checksum + = eep_addr + eep_data, ((predicado) || HARD_CRASH ()), \
      eep_checksum + = (0xCAFEBABE - C0DEFACE), eep_do_write ()
    
    vacío eep_do_write (vacío)
    {
      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 muy poco probable que una rutina eeprom_write intente escribir datos a menos que se ejecute "eep_checksum = 0xC0DEFACE" antes de cargar la dirección y los datos. Después de la ejecución de eso, se verificará la validez del predicado antes de ajustar la suma de verificación al valor adecuado y llamar a la rutina eeprom_store.
  2. Además de los riesgos claros que plantea la ejecución de código incorrecto, otra fuente de comportamiento aleatorio potencial es la metaestabilidad. Normalmente, en cualquier ciclo, cada flip flop se trabará en un nivel alto o bajo. Sin embargo, si la entrada a un flip flop cambia justo cuando llega el reloj, puede que durante un tiempo arbitrario produzca cosas extrañas que pueden cambiar arbitrariamente entre alto y bajo, en cualquier patrón, hasta el siguiente ciclo de reloj; Es completamente posible que algunos dispositivos aguas abajo del flip flop lo vean como "alto" mientras que otros lo ven como "bajo". En general, los procesadores dependen de muchos dispositivos que acuerdan lo que van a hacer. Si durante la ejecución de una instrucción de "decremento-y-rama-si-no-es igual", y algunos circuitos piensan que la rama debe tomarse pero otros no,

Los fabricantes especifican los parámetros de operación para los procesadores de modo que, dentro de esos parámetros, los procesadores simplemente funcionen. Empujar cosas fuera de ese sobre puede reducir el procesador a ser solo 99.9999999 confiable. Puede que no suene demasiado mal, pero tratar de diagnosticar un procesador que hace algo arbitrariamente incorrecto una vez por minuto más o menos (calcular 16MHz) no es divertido.

Super gato
fuente
2
Sería bueno tener en cuenta que las escrituras de blindaje EEPROM simplemente hacen que el bloqueo completo del dispositivo sea estadísticamente menos probable, no hace mucho para que la ejecución errónea sea menos probable. Sin embargo, parece una buena política. Me sorprende que 9 nueves de confiabilidad tengan una probabilidad tan alta de falla en un minuto a solo 16 MHz.
Kevin Vermeer
@Kevin Vermeer: ​​a menudo es difícil garantizar que un dispositivo nunca opere fuera de su región de operación segura, dadas las posibilidades de caídas de la fuente de alimentación, eventos electrostáticos, etc. La armadura EEPROM no está diseñada para hacer que la ejecución errante sea más probable. -Es ilustrativo de cómo minimizar las consecuencias. Técnicas similares a menudo son útiles para el código que opera hardware externo. No se debe confiar en el código para los sistemas críticos de seguridad, pero, por ejemplo, en un fabricante de etiquetas, se puede usar una lógica como la anterior para proteger los controles de alimentación de etiquetas, por lo que la ejecución aleatoria no destruirá $ 5 en stock de etiquetas.
supercat
Para ser claros, estoy hablando específicamente de los microcontroladores Atmel AVR, que son muy diferentes de los procesadores de uso general ...
vicatcu
2
@vicatcu: ¿Hay alguna forma particular en la que pienses que son diferentes del PIC, 8x51, 68HC05, ARM, etc.? O, para el caso, ¿CPU más antiguas como la 6502 o la Z80? En las CPU modernas, el overclocking puede causar un sobrecalentamiento autodestructivo, pero en las CPU más pequeñas o más lentas, eso no es un problema a cualquier velocidad en la que el dispositivo tenga alguna posibilidad de funcionar.
supercat
3

Una consideración no mencionada todavía, que tiene menos que ver con el funcionamiento a frecuencias válidas en rangos de voltaje no válidos (16MHz a 3.3V) pero más que ver con el funcionamiento a frecuencias no válidas en rangos de tensión válidos (24MHz a 5V) es la disipación de calor.

Cada vez que una puerta en el chip se enciende o apaga, disipa el calor. La compuerta, compuesta por MOSFET, actúa como una resistencia variable en el período entre estar ENCENDIDO y APAGADO, o APAGADO y ENCENDIDO. Esa resistencia, por supuesto, disipa el calor. Cuanto más frecuentemente cambie, menos tiempo hay entre los cambios para que ese calor se disipe del chip, y corre el riesgo de acumular calor.

Ergo, cuanto más rápido corras, más calor puede acumularse. Es por eso que las CPU de PC tienen grandes admiradores: cambian tan rápido que no pueden sacar el calor del chip lo suficientemente rápido, por lo que necesitan ayuda.

La velocidad máxima nominal del chip se selecciona para permitir que el chip disipe su acumulación de calor de manera confiable bajo las condiciones de funcionamiento válidas (es decir, la temperatura ambiente, típicamente un máximo de 85 ° C o 105 ° C, por ejemplo). Exceder esa frecuencia puede causar que el chip se sobrecaliente.

Sí, puede ser posible ejecutar el chip más rápido de lo previsto si proporciona alguna asistencia, es decir, un disipador de calor y tal vez un ventilador, y asegurarse de que haya un buen flujo de aire a su alrededor. Pero, por supuesto, en un día caluroso de verano, puede descubrir que lo que funcionaba perfectamente todo el invierno de repente comienza a hacer cosas extrañas.

Otra cosa a considerar es la de las tasas de rotación. Las señales de reloj (y otras señales también) tardan en subir o bajar al nivel deseado. Si las partes internas del chip significan que la señal del reloj tarda unos 15 ns en elevarse de BAJO a ALTO, y trata de marcarlo a una frecuencia en la que un período ALTO es, digamos 42 ns (24 MHz), eso deja solo 27 ns de reloj válido período restante Eso es solo el 64% del reloj que en realidad es una señal de reloj; el resto es basura. Lo mismo para los pines IO. Cosas como las salidas de reloj SPI estarán limitadas por la velocidad de rotación del pin IO, por lo que si overclockea su chip para obtener un SPI más rápido, encontrará que las cosas no siempre salen según lo planeado, como la onda cuadrada agradable que espera de la salida del reloj ya no es cuadrado.

Majenko
fuente
1

Es posible que el dispositivo no funcione con alguna combinación de voltaje / temperatura.

Leon Heller
fuente
dado que hace el trabajo en algún tensión / temperatura (3.3V y 25C), hace que el reloj acaba de operar a lo largo de la frontera en lugar de la frecuencia nominal del cristal? "puede que no funcione" es tremendamente vago ...
vicatcu 31/10/11
@vicatcu - "Horriblemente vago es EXACTAMENTE * la especificación que obtienes." Podría no funcionar "es ** EXACTAMENTE la especificación. En los límites funcionará. Así que puedes estar seguro de que hay un margen de seguridad. ¿Qué tan grande? ...
Russell McMahon
jaja sí, nunca diseño fuera de especificaciones, estaba pidiendo que esto sea un poco provocativo
vicatcu
@vicatcu: a veces parece casi imposible evitar el diseño al menos nominalmente fuera de especificaciones. Por ejemplo, si dos dispositivos especifican VOut (Max) y VIn (Max) ambos como VDD, y uno conecta una salida de cada uno a una entrada del otro, incluso si están conectados al mismo riel, no lo hago. vea cómo se puede garantizar que una corriente transitoria momentánea en un dispositivo no pueda hacer que su VDD caiga incluso un microvoltio por debajo de la salida de voltaje del otro dispositivo. Si lo hiciera, eso podría exceder la condición operativa especificada de que la entrada no debe exceder VDD.
supercat
1
@vicatcu: Por supuesto, creo que la mayoría de los ingenieros pensarían que la forma en que se construyen físicamente los dispositivos casi garantizaría la existencia de al menos unos pocos milivoltios de tolerancia en tales cosas, pero muchas hojas de datos no especifican ninguna. No estoy seguro de por qué. Puedo entender que un fabricante no quiera especificar nada cercano a lo que las piezas de hoy aceptarán sin problema, pero especificar algo parecería mejor que no especificar nada.
supercat