为什么人们不只使用微控制器中的最大可用时钟

Why people wouldn't just use the maximum available clock in microcontrollers

主题相当直截了当,我承认我在 google 上找不到太多内容。

最近我开始在 STM32 上编写代码,对于一个来自 PC 相关应用程序的人来说,设置所有时钟是相当新的。

我想知道为什么开发人员想要 discard/avoid 最大时钟以及在什么条件下? 说一个单片机可以工作在168Mhz,我为什么要选择84Mhz?

主要是跟耗电量有关吗?还有其他原因吗?

为什么 STM32 团队(我想还有微芯片)不厌其烦地在 STM32CubeMX 上设置一个非常好的 UI 到 select 不同的组合? 如果可以达到更高的工作频率,为什么我应该直接使用外部振荡器而不是 PLL 路径?

电源可能是主要原因。但是使用特定时钟速度可能还有其他各种原因,例如:

EMC 辐射。

避免干扰敏感模拟电子设备的谐波。

作为设计的一部分,需要以非常特定的频率 运行 驱动定时器/时钟/ADC 等(例如,我在 120MHz 的 运行 处理器上工作,但是为了获得准确所需的 ADC 采样,我们必须 运行 大约 119.4MHz)。

如果您打算在电路板上的其他地方使用时钟,则可能需要使用外部振荡器。此外,您可能希望使用非常准确的 crystal,或者可能不想等待 PLL 锁定。

有很多原因。但是,如果您正在做一些直接的事情并且不关心功耗或噪音,那么 运行 在我看来,使用 PLL 以最大速度运行可能是最好的起点。

Is it mainly related to power consumption?

是的,主要是。低频意味着低功耗。

也可以通过快速完成工作来省电,然后让 cpu 休眠,从而提高平均功耗,但电源可能不喜欢可变负载,精确计时会比较困难.

Are there any other reason?

是的。某些外围设备无法在特定频率以上工作。举个例子:STM32F429内核在180MHz可以运行,但是之后就没有办法为USB生成48MHz了。为了使用 USB,内核必须 运行 168 MHz。

Why should i use an external oscillator directly rather than the PLL path if i can achieve higher working frequency?

外部振荡器的精度比内部振荡器高得多,PLL 从待机状态唤醒时可能需要很长时间才能稳定下来。这取决于申请要求。

权力是显而易见的,其他答案中也提到过,但没有直接提到。表现。更快的时钟并不意味着更快的代码。除了闪存前面的真实高速缓存之外,ST 在闪存前面还有这个神奇的高速缓存(并禁用了它出现在我试过的 cortex-m4 上的手臂高速缓存)。但总的来说,闪存是你的瓶颈,如果你在许多其他供应商部件上看到,有时在 ST 上看到,你必须在增加系统时钟时不断添加等待状态。所以说在 16Mhz 没有等待状态,在 32、1、48、2 等等,取决于系统,你在闪存的速度限制周围跳舞,使处理器在等待指令进入时等待额外的时钟. 即使在 st 上但更容易在其他人身上看到,这会直接影响您的表现,您可能希望处于从零到一个等待状态的频率,以最大化您可以提供给 cpu 的内容。

一些设计闪存已经处于 cpu/system 时钟的一半速度,其中 sram 通常跟踪并可以覆盖整个 运行ge,因此在零等待状态和 [=来自闪存的 35=] 然后来自 ram 的 运行,在某些数量的 MCU 上,相同的机器代码 运行 在闪存上的速度是在 sram 上的一半。有些是一对一的,然后当你添加一个等待状态时,闪存是 ram 的一半速度,等等。

外围设备也有同样的问题。您可能必须在外设时钟上使用预分频器,所以现在读取一个 24mhz 的 gpio 引脚可能需要一个时钟,而在 80mhz 可能需要三个或四个时钟。

PLL 是模拟和抖动的,它们不一定 "lose" 任何时钟周期,但就抖动而言更糟糕,因为振荡器本身具有抖动和精度以及温度影响的规格。所以内部 RC 是质量最差的时钟,直接来自绕过 PLL 的振荡器是最好的,然后与 PLL 相乘会增加抖动,但会让你走得更快。

重新掌权。电视遥控器中的电池可能会持续一年左右(红外线、蓝牙的可以持续数天或数周),它们 运行 最低的时钟频率,它们几乎无法完成工作并保持尽可能多的休息时间尽可能或处于低功耗状态。如果他们在醒着的时候跳到 120Mhz 并且电池现在可以持续数周或半年,而不是一年,除了全速 运行 真的很酷之外没有任何实际好处。那没有多大意义。我们现在严重依赖电池产品,如果您 phone 运行 上的蓝牙模块中的微控制器处于其完全额定的 pll 速度,并且您 phone 中的 wifi 模块中的微控制器,以及驱动显示器等的设备,所有 运行 都以最大速度运行,您的 phone 一次充满电可能连一天都用不完。 运行提速并没有获得任何好处,反而失去了一些东西。

对于爱好和插在墙上的东西,燃烧任何你想要的功率,但 MCU 市场的一个显着比例是关于价格和功率的,筛选到更高速度的芯片成本更高,低速部件,在有些情况只是芯片未能通过更高的屏幕,而且成本更低。更紧凑更小的代码使用更少的闪存你可以买一个 smaller/cheaper 部件,你的时钟可以 运行 慢因为它比一个可能草率的程序需要更少的指令来做同样的事情 and/or 编程中的错误选择语言,更大的部分,较低的产量都增加了成本。然后将时钟降低到尽可能低的水平,以保持编写严密的代码以勉强满足时序理想情况下使用最少的功率(以及关闭或不打开您不使用的外围设备并预缩放打开的外围设备)甚至更慢)。

出于成本和功率的考虑,您需要使用最小的二进制文件可以容忍的最慢时钟,该二进制文件也是紧凑且高效的,这样您就可以勉强进行计时。那是你的理想目标。但是,如果您计划进行现场升级,那么您需要为 slower/larger 代码留出一定余量,使其成为升级的一部分,并且不会对功耗产生显着影响。