“超频” AVR


12

在“ AVR数据表”的“电气特性”部分下,您通常会找到如下图(此图来自ATMega328):

在此处输入图片说明

我见过的设计似乎可以“工作”,但可以在阴影包围的信封之外工作。具体来说,我看过3.3V(Arduino)设计可通过外部16MHz晶振运行时钟。显然,这是不合规格的。在这个范围之外奔跑会带来哪些实际的负面后果?


13
如果仅在spec中运行sortof,则只能进行sortof。
奥林·拉斯罗普

可能看起来很傻,但是您不能替换XTal吗?
侯赛因

这不是一个好主意,多数情况下它将无法工作,并且无论如何,如果您将不到1 MIPS的产品添加到20 MIPS处理器中,您所获得的收益将非常小,高于100%的AVR将会崩溃。您必须保持内部信号的建立和保持时间,即最大频率。在AVR内部最关键的信号路径中采用最坏的情况下,制造差异可能会使一个芯片对超频的抵抗力增强,但要记住的一点是,即使内核本身运行良好,也不意味着外围设备会或可以用另一批不同的芯片复制它。
user34920 2014年

1
重新开个玩笑:“如果他们假装在规范内给我们计时,我们就会假装工作。”
nitro2k01 2014年

这可能是一个愚蠢的问题,但是我认为所有的AVR Arduino都以5v运行,除了Mini Pro-3.3v仅以8MHz运行...还是没有一个我看不到的更快的3.3v模型?
Jules

Answers:


42

如何使生活更有趣101:

  • 如果你不在乎

    您的结果有时可能是错误的,
    您的系统有时可能会崩溃,
    您的生活可能会更有趣,
    您的Segway克隆只是偶尔出于没有明显原因的原因而进行面部装饰
    ,...

    然后一定要运行超出制造商规格的零件

您得到了您不需要支付的东西。
如果您的头部是10美元,请购买10美元的头盔。

它可能经常起作用。
有时可能无法正常工作。
有时它不起作用可能并不明显。

  • 通常可能会产生鸿沟
  • 通常可能会出现跳跃。
  • 可以正确查找表。
  • ADC值可能正确。

    或不

    在此处输入图片说明


4
我喜欢这个答案大声笑
vicatcu 2011年

2
这太奇妙了。
Andrey Vihrov 2011年

6
实际上,如果您的头部价值10美元,则应该购买10美元* *概率_灾难性_故障头盔。
尼克·约翰逊

4
我找到了我的新墙纸
Rick_2047

4
这是个天才:“如果您不介意(...)您的Segway克隆仅偶尔偶尔无缘无故地做面部植物”
Kamil

14

在这种速度下,大多数处理器的工作方式是:计算某个时钟周期所需的所有信号,在稳定时等待下一个时钟沿,锁存所有这些信号并计算下一个时钟周期所需的信号,在这些信号稳定之前等待该沿,等等。如果在必要的信号稳定之前到达时钟沿,结果将是未稳定地锁定任何未稳定的信号。如果在微控制器中发生这种情况,则影响可能是不可预测的-至少有两个原因:

  1. 在许多情况下,执行速度受到处理器从中读取代码的闪存阵列的响应时间的限制。如果处理器运行得太快,偶尔会在这里或那里误读一些位,则很容易导致处理器执行与预期完全不同的代码。在许多程序中,即使是一次单位误读也会从根本上改变行为。尝试对这种情况下可能发生的情况进行预测几乎是不切实际的。在某些情况下,最好的办法是“装甲”程序的某些部分,以使错误的执行变得不可能。例如,一个人可能会一直保持对EEPROM的保护,直到想写它为止,然后再使用类似以下的代码:
    uint32_t eep_checksum,eep_addr,eep_data;
    
    #定义EEPROM_WRITE(地址,数据,谓词)\
      eep_checksum = 0xC0DEFACE,eep_addr =(地址),eep_data =(数据),\ 
      eep_checksum + = eep_addr + eep_data,((谓词||| HARD_CRASH()),\
      eep_checksum + =(0xCAFEBABE-C0DEFACE),eep_do_write()
    
    无效eep_do_write(void)
    {
      ENABLE_EEPROM_WRITE_HARDWARE();
      如果(eep_checksum!= eep_addr + eep_data + 0xCAFEBABE)
      {
        DISABLE_EEPROM_WRITE_HARDWARE();
        HARD_CRASH();
      }
      DO_EEPROM_WRITE();
      DISABLE_EEPROM_WRITE_HARDWARE();
    }  
    
    除非在加载地址和数据之前执行“ eep_checksum = 0xC0DEFACE”,否则eeprom_write例程极不可能尝试写入数据。执行该操作后,将在将校验和调整为适当值并调用eeprom_store例程之前,对谓词进行有效性检查。
  2. 除了执行错误代码所带来的明显风险外,潜在的随机行为的另一个来源是亚稳定性。通常,在任何周期,每个触发器都会锁存高电平或低电平。但是,如果触发器的输入随时钟的到来而改变,则它可能会在任意持续时间内输出奇怪的东西,这些东西可能会以任意方式在高低之间任意切换,直到下一个时钟周期为止。触发器下游的某些设备完全有可能将其视为“高”,而其他设备则将其视为“低”。通常,处理器依赖于许多设备来达成共识。如果在执行“不等于则减少并分支”指令时,某些电路认为应采用分支,而其他电路则不这样做,

制造商为处理器指定操作参数,以便在这些参数内,处理器将正常工作。将东西推到信封外面可能会使处理器的可靠性降低到99.9999999。这听起来可能不太邪恶,但是尝试诊断处理器每分钟左右(在16MHz频率下)一次任意出错的现象就没有意思了。


2
值得注意的是,铠装EEPROM的写入仅会使统计上不太可能对设备进行完整的转换,而对使错误执行的可能性降低的作用不大。尽管如此,这似乎是一个好政策。令我惊讶的是,只有9 MHz的可靠性在16 MHz的情况下在一分钟内发生故障的可能性很高。
凯文·维米尔

@Kevin Vermeer:考虑到电源骤降,静电事件等可能,确保设备永远不会超出其安全工作区域通常很困难。 -说明如何最大程度地减少后果。类似的技术通常对操作外部硬件的代码很有用。一个人不应该依赖于安全关键系统的代码,但是在例如标签制造商中,可能会使用上述逻辑来保护标签馈送控件,因此随机执行不会破坏5美元的标签库存。
supercat

需要明确的是,我专门谈论的是Atmel AVR微控制器-与通用处理器有很大的不同……
vicatcu,2011年

2
@vicatcu:您是否有某种特殊的方式认为它们与PIC,8x51、68HC05,ARM等不同?还是这个问题,较老的CPU,例如6502或Z80?在现代CPU上,超频会导致自毁性过热,但是在较小或较慢的CPU上,这在设备有任何可能工作的任何速度下都是不成问题的。
supercat


3

尚未提及的一个考虑因素是散热,这与在无效电压范围(3.3V,16MHz)下的有效频率下工作无关,而与在有效电压范围(5V,24MHz)上的无效频率下工作有关。

每当芯片中的门打开或关闭时,它都会散热。由MOSFET组成的栅极在导通和关断或关断和导通之间的时间段内就像可变电阻。该电阻器当然会散热。切换的频率越高,切换之间的时间就越少,以至于热量从芯片中散发出去,您就有可能积聚热量。

因此,您运行得越快,就会产生更多的热量。这就是为什么PC CPU上有大风扇的原因-它们的切换速度如此之快,以至于不能以足够快的速度从芯片散发热量,因此需要帮助。

选择芯片的最高额定速度,以允许芯片在有效的工作条件下(例如,环境温度,例如,最高温度通常为85°C或105°C)可靠地散发热量。超过该频率可能会导致芯片过热。

是的,如果您提供一些帮助(例如,散热器和风扇,并确保周围有良好的气流),则可以比预期的速度更快地运行芯片。但是,当然,在夏天温暖的一天里,您可能会发现整个冬天工作正常的设备突然开始做奇怪的事情。

要考虑的另一件事是摆率。时钟信号(以及其他信号)需要花费一些时间才能上升或下降到所需的水平。如果芯片内部意味着时钟信号需要15ns才能从LOW上升到HIGH,然后尝试以HIGH周期为42ns(24MHz)的频率为其提供时钟,则仅剩下27ns的有效时钟剩余期限。实际上只有64%的时钟是时钟信号-其余部分都是垃圾。IO引脚也一样。诸如SPI时钟输出之类的事情将受到IO引脚的压摆率的限制,因此,如果您对芯片进行超频以获得更快的SPI,您会发现事情并非总是按计划进行,因为您希望时钟输出产生漂亮的方波不再是正方形了。


1

该设备可能无法在某些电压/温度组合下工作。


考虑到它确实可以在一定的电压/温度(3.3V和25C)下工作,那么时钟是否仅沿边界而不是晶体的额定频率工作?“可能无法正常工作”非常模糊...
vicatcu 2011年

@vicatcu-“非常模糊是您所获得的规格。“可能不起作用”是**完全正确。在边界上将起作用。因此,您可以确定有一定的安全余量。有多大? ...
罗素·麦克马洪

哈哈是啊,我从来没有设计的规范出来,我问这是一个有点挑衅
vicatcu

@vicatcu:有时似乎几乎不可避免地避免了至少名义上不合规格的设计。例如,如果两个设备都将VOut(Max)和VIn(Max)都指定为VDD,并且一个设备将每个设备的输出连接到另一个设备的输入,即使它们连接到同一根电源线,我也不会了解如何保证一个设备中的瞬时电流不会导致其VDD降到比另一设备输出的电压低一个微伏。如果这样做,可能会超出指定的工作条件,即输入不得超过VDD。
supercat

1
@vicatcu:当然,我认为大多数工程师会认为设备的物理构造方式几乎可以保证在此类情况下至少存在几毫伏的公差,但是许多数据手册都没有具体说明。不知道为什么。我可以理解,制造商不想指定任何接近当今零件可接受的值而没有问题,但指定内容似乎比不指定任何内容要好。
supercat
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.