"Overclocking" un AVR

12

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

Hevistodiseñosqueparecen"funcionar" pero operan 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 especificación. ¿Cuáles son las consecuencias negativas prácticas de correr fuera de este sobre?

    
pregunta vicatcu

5 respuestas

41

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

  • Si no te importa

    que sus resultados a veces pueden estar equivocados,
    que su sistema a veces puede fallar,
    que tu vida sea más interesante,
    que su clon de Segway solo ocasionalmente hace plantas frontales sin ninguna razón obvia,
    que ...

    luego, por todos los medios, ejecute la pieza fuera de las especificaciones del fabricante

Obtienes lo que no pagas.
 Si tienes una cabeza de $ 10, compra un casco de $ 10.

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

  • Una división generalmente puede funcionar
  • Normalmente puede llegar un salto.
  • Una tabla puede ser consultada correctamente.
  • Un valor de ADC puede ser correcto.

    O no

respondido por el Russell McMahon
13

En 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, enclavando todas esas señales y calculando las señales necesarias en el el siguiente ciclo de reloj, esperando ese borde mientras esas señales se estabilizan, etc. Si llega un borde de reloj antes de que las señales necesarias se estabilicen, el efecto será que la señal que no se haya estabilizado puede no estar bloqueada limpiamente. Si esto ocurre en un microcontrolador, los efectos pueden ser impredecibles, por al menos 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 causa un error de lectura ocasional aquí o allí, podría hacer que el procesador ejecute un código completamente diferente del que se pretendía. En muchos programas, incluso una sola lectura de un solo bit podría alterar radicalmente el comportamiento; rara vez 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 hacer improbable la ejecución errante. Por ejemplo, uno podría dejar una EEPROM protegida hasta que uno quiera escribirla, y luego usar el código algo como:
    uint32_t eep_checksum, eep_addr, eep_data;
    
    #define EEPROM_WRITE(address, data, predicate) \
      eep_checksum = 0xC0DEFACE, eep_addr = (address), eep_data = (data), \ 
      eep_checksum += eep_addr + eep_data, ((predicate) || 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 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. Tras la ejecución de eso, se comprobará la validez del predicado antes de ajustar la suma de comprobación al valor adecuado y llamar a la rutina eeprom_store.
  2. Además de los riesgos claros planteados por la ejecución de código incorrecto, otra fuente de comportamiento aleatorio potencial es la metastabilidad. Normalmente, en cualquier ciclo, cada flip flop se enganchará en 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 totalmente posible que algunos dispositivos aguas abajo del flip flop lo vean como "alto" mientras que otros lo vean como "bajo". En general, los procesadores confían en que muchos dispositivos estén de acuerdo con lo que van a hacer. Si durante la ejecución de una instrucción de "decrementar-y-ramificar-si-no-igual" y algunos circuitos piensan que se debe tomar la ramificación pero otros no, el procesador puede caer en un estado realmente extraño.

Los fabricantes especifican los parámetros operativos para los procesadores, de modo que, dentro de esos parámetros, los procesadores simplemente funcionarán. Empujar cosas fuera de ese sobre puede reducir el procesador a solo ser 99.9999999 confiable. Puede que eso no suene demasiado mal, pero intentar diagnosticar un procesador que hace algo arbitrariamente mal una vez por minuto (aproximadamente 16MHz) no es divertido.

    
respondido por el supercat
3

Respuesta simplificada para tu pregunta:

Trabajar fuera del "área segura de velocidad" puede hacer que su sistema funcione de manera inestable. ¿Qué significa eso? Resultados de cálculo incorrectos, reinicio del microcontrolador, etc.

Si quieres hacerlo solo por diversión, deberías echar un vistazo a estas páginas / artículos:

Overclocking Arduino con enfriamiento con nitrógeno líquido. 20⇒65.3Mhz @ -196 ° C / -320 ° F

Overclock de ATmega328 (30MHz)

    
respondido por el Kamil
3

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

Cada vez que una compuerta 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 ENCENDIDO y APAGADO, o APAGADO y ENCENDIDO. Esa resistencia, por supuesto, disipa el calor. Cuanto más frecuentemente cambia, menos tiempo hay entre los cambios para que ese calor se disipe fuera del chip, y corre el riesgo de que se acumule calor.

Ergo, cuanto más rápido corres, más calor se puede acumular. Esa es la razón por la que las CPU de los PC tienen grandes fanáticos: se cambian tan rápido que no pueden sacar el calor del chip lo suficientemente rápido, por lo que necesitan ayuda.

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

Sí, puede ser posible ejecutar el chip más rápido de lo previsto si brinda alguna asistencia, es decir, un disipador de calor y quizás un ventilador, y se asegura de que haya un buen flujo de aire a su alrededor. Pero, por supuesto, en un día caluroso en verano, es posible que descubra que un dispositivo que funciona perfectamente durante todo el invierno de repente comienza a hacer cosas extrañas.

Otra cosa a considerar es la de las tasas de cambio. Las señales de reloj (y otras señales también) toman tiempo para subir o bajar a su nivel deseado. Si las partes internas del chip significan que la señal del reloj tarda, por ejemplo, 15ns en subir de LOW a HIGH, y usted lo intenta a una frecuencia en la que un período HIGH es, digamos 42ns (24MHz), que deja solo 27ns 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 giro del pin IO, por lo que si hace overclocking su chip para obtener SPI más rápido, encontrará que las cosas no siempre salen según lo planeado, como la agradable onda cuadrada que espera de la salida del reloj. ya no es cuadrado.

    
respondido por el Majenko
1

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

    
respondido por el Leon Heller

Lea otras preguntas en las etiquetas