🛠 Overclocker le RP2040 à 200 MHz (et au-delà) en toute connaissance

RP2040 (placa genérica / chip) · avance · Schéma : IMG-rp2040-generic-avance-3-rp2040-overclock-200mhz.svg — puce RP2040 avec régulateur VREG et boucle ROSC, clock XOSC 12 MHz multiplié vers 200 MHz, jauge de fréquence 133 vers 200 MHz, thermomètre de la puce

Objetivos

La ficha técnica del RP2040 anuncia 133 MHz nominales, pero la hoja de datos documenta un modo extendido: hasta 200 MHz sobrealimentando el núcleo a 1,15 V mediante el bit over_vrange del VREG (RP2040 datasheet, §2.15.3 Overclocking; confirmado públicamente por Raspberry Pi, ver también el debate de documentación pico-feedback#499). El chip dispone incluso de un ROSC autoajustado que adapta la tensión interna al silicio (§2.15.2). Este tutorial: subir a 200 MHz correctamente, demostrarlo mediante un benchmark y conocer los límites (flash QSPI, térmica, variabilidad).

Material

Código completo

// oc200.c — 200 MHz avec VREG forcé, benchmark Dhrystone-like
#include "pico/stdlib.h"
#include "hardware/vreg.h"
#include "hardware/clocks.h"

int main(void) {
    stdio_init_all;
    // 1) monter la tension du cœur AVANT la fréquence (datasheet 2.15.3)
    vreg_set_voltage(VREG_VOLTAGE_1_20);   // 1,20 V > nominal 1,10 V
    sleep_ms(10);                          // laisser le régulateur stabiliser
    // 2) demander 200 MHz au PLL (le SDK rebascule sur XOSC si besoin)
    set_sys_clock_khz(200000, true);
    printf("clk_sys = %lu Hz\n", clock_get_hz(clk_sys));

    // 3) benchmark : boucle dépendante, sans FPU (le M0+ n'en a pas)
    uint32_t t0 = time_us_32;
    volatile uint32_t x = 0;
    for (uint32_t i = 0; i < 1000000; i++) { x = x * 1664525u + 1013904223u; }
    uint32_t dt = time_us_32 - t0;
    printf("1e6 iters en %lu us (x=%lu)\n", dt, x);
    while (true) { sleep_ms(1000); }        // laisse la puce « au ralenti »
}

Verificación esperada

Se muestra clk_sys = 200000000, y el tiempo del benchmark baja aproximadamente 1,6× en comparación con la ejecución a 125/133 MHz (la relación exacta depende del código y de la espera de la flash). El chip aguantará a 200 MHz en una placa correcta — es la frecuencia certificada « over_vrange » de la hoja de datos. Para librarte de la variabilidad del silicio, el SDK ofrece el ajuste automático por ROSC (set_sys_clock_khz + modo autotune utilizado por el ejemplo sys_clk400 de pico-extras) — MicroPython documenta además superaciones por encima de 400 MHz en chips afortunados (docs rp2).

Errores frecuentes

Otros tutoriales para esta placa

Ejemplos de código para esta placa

← Volver a la ficha 🛠 Todos los tutoriales