"Overclocking" de un AVR

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 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?

Si solo lo ejecuta más o menos según las especificaciones, entonces solo funcionará.
Puede parecer tonto, pero ¿no podrías reemplazar el XTal?
No es una buena idea, la mayoría de las posibilidades no funcionará y, de todos modos, se 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 espera 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 en sí funciona bien, no significa que los periféricos lo harán o que usted puede replicarlo con otro chip de un lote diferente.
Para reutilizar una broma: "Si fingen que nos registran dentro de las especificaciones, fingiremos que trabajamos".
Esta puede ser una pregunta tonta, pero pensé que todos los Arduinos AVR 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 Arduino no es exactamente lo mismo que AVR. Algunos microcontroladores AVR pueden funcionar con voltajes de hasta 1,8 V (por ejemplo, ATtiny2313V) y, que yo sepa, todos pueden funcionar con un mínimo de 2,7 V siempre que se respeten los límites de frecuencia del reloj. Creo que tiene razón en que la mayoría de los Arduinos convencionales que funcionan a 3.3V generalmente funcionan a 8MHz para respetar la curva V-Hz, pero definitivamente he visto un diseño basado en Arduino que no presta atención a esto.
en.wikipedia.org/wiki/Shmoo_plot faltan factores aquí a la temperatura máxima a este voltaje a esta frecuencia rápido rápido o lento sesgo lento, etc. la pieza funcionará. Es por eso que puede ejecutar su 4ghz x86 a 7ghz. si mantiene la pieza fría pero no demasiado fría, puede aumentar sus posibilidades de éxito. Pero, ¿funcionará a escala de producción? 10,000 podrían funcionar, luego los próximos 1000 no lo harán y Atmel no hará nada al respecto. Si ve esto pero está dentro del rango anunciado, entonces puede hacer su reclamo y obtener sus piezas de repuesto gratis... (después de que demuestre que no las dañó)

Respuestas (5)

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

  • si no te importa

que sus resultados a veces pueden ser erróneos,
que su sistema puede fallar a veces,
que su vida puede ser más interesante,
que su clon de Segway solo ocasionalmente se planta en la cara sin razón aparente,
que...

Luego, por supuesto, 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 por lo general puede funcionar
  • Por lo general, puede llegar un salto.
  • Una tabla puede consultarse correctamente.
  • Un valor de ADC puede ser correcto.

O no

ingrese la descripción de la imagen aquí

me encanta esta respuesta jajaja
Esto es maravilloso.
En realidad, si tiene una cabeza de $ 10, debe comprar un casco de $ 10 * probabilidad_de_fallo_catastrófico.
@NickJohnson - :-). | Ese fue (creo) un anuncio de Bell Helmets de hace mucho tiempo (¿todavía puede ser actual?), Así que no puedo cambiar las palabras :-).
Esta respuesta es perfecta, al más puro estilo de los círculos a mano alzada.
encontré mi nuevo fondo de pantalla
Esto es genial: "Si no te importa (...) que tu clon de Segway solo ocasionalmente se planta en la cara sin razón aparente"

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 flanco mientras esas señales se estabilizan, etc. Si llega un flanco de reloj antes de que se hayan estabilizado las señales necesarias, el efecto será que las señales que no se hayan estabilizado no se engancharán 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 que el procesador lee el código. Si ejecutar el procesador demasiado rápido hace que un bit ocasional se lea mal aquí o allá, fácilmente podría hacer que el procesador ejecute un código completamente diferente al previsto. En muchos programas, incluso una sola lectura incorrecta 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 que la ejecución errática sea improbable. Por ejemplo, uno podría dejar una EEPROM protegida hasta que quiera escribirla y luego usar un 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();
      si (eep_checksum != eep_addr + eep_data + 0xCAFEBABE)
      {
        DISABLE_EEPROM_WRITE_HARDWARE();
        DIFÍCIL_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 claros riesgos que plantea la ejecución de código incorrecto, otra fuente de posible comportamiento aleatorio es la metaestabilidad. Normalmente, en cualquier ciclo, cada flip flop se enganchará en un nivel alto o bajo. Sin embargo, si la entrada a un flip-flop cambia justo cuando llega el reloj, puede generar cosas raras durante un tiempo arbitrario que pueden cambiar arbitrariamente entre alto y bajo, en cualquier patrón, hasta el próximo ciclo de reloj; es muy posible que algunos dispositivos aguas abajo del flip flop lo vean como "alto" mientras que otros lo vean como "bajo". En general, los procesadores dependen de que muchos dispositivos acuerden lo que van a hacer. Si durante la ejecución de una instrucción de "decremento y bifurcación si no es igual", algunos circuitos piensan que se debe tomar la bifurcación pero otros no,

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

Sería bueno tener en cuenta que proteger las escrituras de EEPROM simplemente hace que el bloqueo completo del dispositivo sea estadísticamente menos probable, no hace mucho para que la ejecución errática sea menos probable. Sin embargo, parece una buena política. Me sorprende que 9 nueves de confiabilidad tengan una probabilidad tan alta de fallar en un minuto a solo 16 MHz.
@Kevin Vermeer: ​​A menudo es difícil asegurarse de que un dispositivo nunca funcionará fuera de su región de operación segura, dadas las posibilidades de caídas en el suministro de energía, eventos electrostáticos, etc. El blindaje de EEPROM no está diseñado para hacer que la ejecución errática sea más probable -Es ilustrativo de cómo minimizar las consecuencias. Técnicas similares suelen ser útiles para el código que opera hardware externo. Uno no debe confiar en el código para los sistemas críticos para la seguridad, pero en, por ejemplo, un fabricante de etiquetas, uno podría 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 etiquetas.
Para ser claros, estoy hablando específicamente de los microcontroladores Atmel AVR, que son muy diferentes de los procesadores de uso general...
@vicatcu: ¿Hay alguna forma particular en la que estés pensando 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.

Respuesta simplificada para su pregunta:

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

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

Overclocking de Arduino con refrigeración por nitrógeno líquido. 20⇒65,3MHz @-196°C/-320°F

Overclock ATmega328 (30 MHz)

Una consideración que aún no se ha mencionado, que tiene menos que ver con el funcionamiento a frecuencias válidas en rangos de voltaje no válidos (16 MHz a 3,3 V), pero más que ver con el funcionamiento a frecuencias no válidas en rangos de voltaje válidos (24 MHz a 5 V), es la disipación de calor.

Cada vez que una compuerta en el chip se activa o desactiva, disipa calor. La puerta, al estar compuesta por MOSFET, actúa como una resistencia variable en el período entre el encendido y el apagado, o entre el apagado y el 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 del chip, y corre el riesgo de que se acumule calor.

Ergo, cuanto más rápido corres, más calor se puede acumular. Es por eso que las CPU de PC tienen grandes ventiladores: 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 forma fiable en las condiciones de funcionamiento válidas (es decir, la temperatura ambiente, normalmente un máximo 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 ayuda, es decir, un disipador de calor y tal vez un ventilador, y se asegura de que haya un buen flujo de aire a su alrededor. Pero, por supuesto, en un día cálido de verano, es posible que lo que fue un dispositivo que funcionó perfectamente durante todo el invierno, de repente comience a hacer cosas extrañas.

Otra cosa a considerar es la de las tasas de cambio. Las señales del reloj (y otras señales también) tardan en subir o bajar hasta el nivel deseado. Si las partes internas del chip significan que la señal del reloj tarda, digamos, 15 ns en subir de un BAJO a un ALTO, y usted intenta sincronizarlo a una frecuencia donde el período ALTO es, digamos 42 ns (24 MHz), eso deja solo 27 ns de reloj válido. periodo 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 overclockea su chip para obtener un SPI más rápido, encontrará que las cosas no siempre salen según lo planeado, como la buena onda cuadrada que espera de la salida del reloj. ya no es cuadrado.

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

dado que funciona a cierto voltaje/temperatura (3.3V y 25C), ¿el reloj solo opera a lo largo del límite en lugar de la frecuencia nominal del cristal? "podría no funcionar" es terriblemente vago...
@vicatcu - "Terriblemente vago es EXACTAMENTE* la especificación que obtienes. "Podría no funcionar" es **EXACTAMENTE la especificación. ON los límites funcionarán. Así que puedes estar seguro de que hay cierto margen de seguridad. ¿Qué tan grande? Haz su día ...
jaja sí, nunca diseño fuera de las especificaciones, estaba pidiendo que esto fuera un poco provocativo
@vicatcu: A veces parece casi imposible evitar diseñar, al menos nominalmente, fuera de las 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 vea cómo se podría garantizar que un transitorio de corriente momentáneo en un dispositivo no podría causar que su VDD caiga incluso un microvoltio por debajo del voltaje de salida del otro dispositivo. Si lo hiciera, eso podría exceder la condición operativa especificada de que la entrada no debe exceder VDD.
@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 una tolerancia de al menos unos pocos milivoltios 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 parecido a lo que aceptarán las piezas de hoy sin problema, pero especificar algo parecería mejor que no especificar nada.