“Overclocking” um AVR

12

Nas planilhas de dados do AVR, na seção Características elétricas, você normalmente encontrará um gráfico como este (este é do ATMega328):

insira a descrição da imagem aqui

Vi projetos que parecem "funcionar", mas operam fora do envelope sombreado. Especificamente, eu vi projetos de 3,3V (Arduino) que executam o relógio a partir de um cristal externo de 16MHz. Claramente, isso está fora de especificação. Quais são as conseqüências negativas práticas de sair desse envelope?

vicatcu
fonte
13
Se você executá-lo apenas na especificação, ele funcionará apenas.
Olin Lathrop
Pode parecer idiota, mas você não poderia substituir o XTal?
Hossein
Não é uma boa ideia, na maioria das vezes isso não funciona e, de qualquer forma, você ganha muito pouco ao adicionar menos de 1 MIPS a um processador de 20 MIPS, acima disso, eu tenho 100% do AVR travar. Você deve manter os tempos de configuração e espera dos sinais internos, a frequência máxima. No cenário de pior cenário no caminho de sinal mais crítico dentro do AVR, as variações de fabricação podem tornar um chip um pouco mais imune ao overclock, mas muito pouco e lembre-se de que, mesmo que o núcleo funcione bem, isso não significa que os periféricos irão ou não. pode replicá-lo com outro chip de lote diferente.
user34920
1
Para redefinir uma piada: "Se eles pretendem nos marcar dentro das especificações, fingimos trabalhar".
Nitro2k01
Esta pode ser uma pergunta idiota, mas pensei que todos os AVR Arduinos rodavam em 5v, exceto o Mini Pro-3.3v, que roda apenas em 8MHz ... ou existe um modelo de 3.3v mais rápido que eu não vi?
Jules

Respostas:

42

Como tornar a vida mais interessante 101:

  • Se você não se importa

    que seus resultados às vezes podem estar errados,
    que seu sistema pode às vezes travar,
    que sua vida pode ser mais interessante,
    que seu clone de Segway apenas ocasionalmente faz face-plants sem motivo óbvio,
    que ...

    então, por todos os meios, execute a peça fora das especificações do fabricante

Você recebe pelo que não paga.
Se você tem uma cabeça de US $ 10, compre um capacete de US $ 10.

Pode frequentemente funcionar.
Pode não funcionar às vezes.
Pode não ser óbvio que às vezes não está funcionando.

  • Uma divisão geralmente pode funcionar
  • Um salto geralmente pode chegar.
  • Uma tabela pode ser consultada corretamente.
  • Um valor ADC pode estar correto.

    Ou não

    insira a descrição da imagem aqui

Russell McMahon
fonte
4
eu amo esta resposta lol
vicatcu
2
Isso é maravilhoso.
Andrey Vihrov 31/10/11
6
Na verdade, se você tem uma cabeça de US $ 10, deve comprar um capacete de $ 10 * probability_of_catastrophic_failure.
perfil completo de Nick Johnson
4
Eu encontrei o meu novo papel de parede
Rick_2047
4
Isso é genial: "Se você não se importa (...) que o seu clone Segway apenas ocasionalmente faz face-plantas sem nenhum motivo aparente"
Kamil
14

A esse tipo de velocidade, a maioria dos processadores trabalha calculando todos os sinais necessários em um determinado ciclo de clock, aguardando a próxima borda do relógio enquanto eles se estabilizam, travando todos esses sinais e calculando os sinais necessários no próximo ciclo de clock , aguardando a borda enquanto esses sinais se estabilizam, etc. Se uma borda do relógio chegar antes que os sinais necessários se estabilizem, o efeito será que quaisquer sinais que não tenham se estabilizado podem não ser travados corretamente. Se isso ocorrer em um microcontrolador, os efeitos podem ser imprevisíveis - por pelo menos dois motivos:

  1. Em muitos casos, a velocidade de execução é limitada pelo tempo de resposta do array flash a partir do qual o processador lê o código. Se executar o processador muito rápido faz com que um bit ocasional seja mal interpretado aqui ou ali, isso poderia facilmente fazer com que o processador executasse um código totalmente diferente do pretendido. Em muitos programas, mesmo um erro de leitura de bit único único pode alterar radicalmente o comportamento; raramente é prático tentar fazer previsões sobre o que pode acontecer nesses casos. O melhor que se pode fazer em alguns casos é "blindar" certas partes do programa para tornar improvável a execução incorreta. Por exemplo, pode-se deixar uma EEPROM protegida até que você queira escrevê-la e, em seguida, use um código como:
    uint32_t eep_checksum, eep_addr, eep_data;
    
    #define EEPROM_WRITE (endereço, dados, predicado) \
      eep_checksum = 0xC0DEFACE, eep_addr = (endereço), eep_data = (dados), \ 
      eep_checksum + = eep_addr + eep_data, ((predicado) || HARD_CRASH ()), \
      eep_checksum + = (0xCAFEBABE - C0DEFACE), eep_do_write ()
    
    vazio eep_do_write (vazio)
    {
      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 ();
    }  
    
    É muito improvável que uma rotina eeprom_write tente gravar dados, a menos que "eep_checksum = 0xC0DEFACE" seja executado antes do endereço e dos dados serem carregados. Após a execução disso, o predicado será verificado quanto à validade antes de ajustar a soma de verificação ao valor apropriado e chamar a rotina eeprom_store.
  2. Além dos riscos claros decorrentes da execução de código incorreto, outra fonte de potencial comportamento aleatório é a metaestabilidade. Normalmente, em qualquer ciclo, todo flip-flop trava alto ou baixo. Se, no entanto, a entrada para um flip-flop for alterada assim que o relógio chegar, pode por algum tempo arbitrário gerar coisas estranhas que podem ser arbitrariamente alternadas entre alta e baixa, em qualquer padrão, até o próximo ciclo do relógio; é perfeitamente possível que alguns dispositivos a jusante do flip-flop o vejam como "alto", enquanto outros o vejam como "baixo". Geralmente, os processadores contam com muitos dispositivos que concordam com o que farão. Se durante a execução de uma instrução "decrement-and-branch-if-not-equal", e alguns circuitos acham que o ramo deve ser tomado, mas outros não,

Os fabricantes especificam parâmetros operacionais para processadores de modo que, dentro desses parâmetros, os processadores simplesmente funcionem. Colocar coisas fora desse envelope pode reduzir o processador a ser apenas 99,9999999 confiável. Isso pode não parecer muito ruim, mas tentar diagnosticar um processador que faz algo arbitrariamente errado uma vez por minuto (aproximadamente 16MHz) não é divertido.

supercat
fonte
2
Seria bom notar que a blindagem das gravações da EEPROM apenas torna estatisticamente menos provável a agregação completa do dispositivo, não faz muito para tornar menos provável a execução incorreta. No entanto, parece uma boa política. Estou surpreso que nove noves de confiabilidade tem uma probabilidade tão alta de falha em um minuto a apenas 16 MHz.
Kevin Vermeer
@ Kevin Vermeer: ​​Muitas vezes é difícil garantir que um dispositivo nunca funcione fora de sua região de operação segura, dadas as possibilidades de quedas na fonte de alimentação, eventos eletrostáticos etc. A blindagem da EEPROM não foi projetada para tornar mais provável a execução incorreta. -é ilustrativo de como minimizar as consequências. Técnicas semelhantes geralmente são úteis para código que opera hardware externo. Não se deve confiar no código para sistemas críticos de segurança, mas, por exemplo, um fabricante de etiquetas pode usar uma lógica como a acima para proteger os controles de alimentação de etiquetas, para que a execução aleatória não destrua US $ 5 no estoque de etiquetas.
Supercat
Para ser claro, eu estou falando especificamente sobre microcontroladores Atmel AVR - que são muito diferentes dos processadores de uso geral ...
vicatcu
2
@vicatcu: Existe alguma maneira particular de você pensar que eles são diferentes do PIC, 8x51, 68HC05, ARM, etc.? Ou, nesse caso, CPUs mais antigas como o 6502 ou o Z80? Em CPUs modernas, o overclock pode causar superaquecimento autodestrutivo, mas em CPUs menores ou mais lentas, isso não é problema a qualquer velocidade em que o dispositivo tenha alguma chance de funcionar.
Supercat 31/10
3

Uma consideração ainda não mencionada, que é menos relacionada à operação em frequências válidas em faixas de tensão inválidas (16MHz a 3,3V), mas mais relacionada à operação em frequências inválidas em faixas de tensão válidas (24MHz a 5V) é a dissipação de calor.

Sempre que um portão no chip é ligado ou desligado, ele dissipa o calor. O portão, sendo constituído por MOSFETs, atua como um resistor variável no período entre LIGAR e DESLIGAR, ou DESLIGAR e LIGAR. É claro que esse resistor dissipa o calor. Quanto mais freqüentemente ele alterna, menos tempo há entre as trocas para que o calor se dissipe do chip e você corre o risco de acumular calor.

Portanto, quanto mais rápido você correr, mais calor poderá acumular-se. É por isso que as CPUs dos PCs têm grandes fãs - eles trocam tão rápido que não conseguem extrair o calor do chip com rapidez suficiente e precisam de ajuda.

A velocidade nominal mais alta do chip é selecionada para permitir que ele dissipe seu acúmulo de calor de maneira confiável sob as condições operacionais válidas (por exemplo, a temperatura ambiente, normalmente máxima de 85 ° C ou 105 ° C, por exemplo). Exceder essa frequência pode causar superaquecimento do chip.

Sim, pode ser possível executar o chip mais rapidamente do que o pretendido, se você fornecer assistência - ou seja, um dissipador de calor e talvez um ventilador, e garantir que haja um bom fluxo de ar ao redor dele. Mas, é claro, em um dia quente no verão, você pode descobrir o que era um dispositivo perfeitamente funcional durante todo o inverno de repente começa a fazer coisas estranhas.

Outra coisa a considerar é a de reduzir as taxas. Os sinais do relógio (e outros sinais também) levam tempo para subir ou descer no nível desejado. Se as partes internas do chip significam que o sinal do relógio leva 15ns para subir de BAIXO para ALTO, e você tenta cronometrá-lo em uma frequência em que um período ALTO é, digamos 42ns (24MHz), que deixa apenas 27ns de relógio válido período restante. Isso significa que apenas 64% do relógio é realmente um sinal de relógio - o resto é lixo. O mesmo para pinos IO. Coisas como saídas de clock SPI serão limitadas pela taxa de variação do pino de E / S, portanto, se você fizer um overclock de seu chip para obter um SPI mais rápido, descobrirá que as coisas nem sempre correm conforme o planejado, como a bela onda quadrada que você espera da saída de clock não é mais quadrado.

Majenko
fonte
1

O dispositivo pode não funcionar em alguma combinação de tensão / temperatura.

Leon Heller
fonte
dado que faz o trabalho em algum tensão / temperatura (3.3V e 25C), faz o relógio apenas operam ao longo da fronteira, em vez de frequência nominal do cristal? "pode não funcionar" é awefully vaga ...
vicatcu
@vicatcu - "Terrivelmente vago é EXATAMENTE * as especificações que você obtém." Pode não funcionar "é ** EXATAMENTE as especificações. Nos limites funcionará. Assim, você pode ter certeza de que existe alguma margem de segurança. Qual o tamanho? ...
Russell McMahon
haha sim, eu nunca projetar fora da especificação, eu estava pedindo que este é um provocador pouco
vicatcu
@vicatcu: Às vezes parece quase impossível evitar projetar pelo menos nominalmente fora das especificações. Por exemplo, se dois dispositivos especificam VOut (Max) e VIn (Max), ambos como VDD, e um conecta uma saída de cada um a uma entrada do outro, mesmo que estejam conectados ao mesmo trilho, eu não veja como alguém poderia garantir que um transiente momentâneo de corrente em um dispositivo não pudesse fazer com que seu VDD caísse até um microvolt abaixo da tensão de saída do outro dispositivo. Se isso acontecesse, isso poderia exceder a condição operacional especificada de que a entrada não deve exceder o VDD.
Supercat
1
@vicatcu: Claro, acho que a maioria dos engenheiros imaginaria que a maneira como os dispositivos são construídos fisicamente quase garantiria a existência de pelo menos alguns milivolts de tolerância em tais coisas, mas muitas folhas de dados não especificam nenhuma. Não sei por que. Eu posso entender um fabricante que não deseja especificar nada próximo do que as peças de hoje aceitarão sem problemas, mas especificar algo pareceria melhor do que não especificar nada.
Supercat