🛠 Dual-core et mise à jour OTA sur la flash 4 Mo

Raspberry Pi Pico 2 W · avance · Schéma : IMG-pico-2-w-avance-9-pico2w-ota-double-coeur.svg — deux cœurs RP2350 séparés, flash 4 Mo découpée en zones A/B, téléchargement Wi-Fi écrivant la zone inactive et bascule du boot-info.

Objetivos

Aprovechar los dos núcleos del RP2350 y la memoria flash de 4 MB: el núcleo 0 gestiona el Wi-Fi (CYW43), el núcleo 1 la lógica de negocio, sincronizados mediante mutex; la actualización OTA descarga un firmware en la zona inactiva de la flash y luego cambia el boot-info para arrancar desde ella, como en el ejemplo oficial pico_w/wifi/ota_update.

Material

Código completo

// main.c - dual-core + squelette OTA (inspiré pico_w/wifi/ota_update)
#include "pico/stdlib.h"
#include "pico/multicore.h"
#include "pico/cyw43_arch.h"
#include "pico/bootrom.h"

static volatile bool firmware_pret = false;

void coeur_metier(void) {          // coeur 1 : logique, jamais de lwIP ici
    while (true) {
        if (firmware_pret) {
            rom_data_call(ROM_TABLE_ENTRY_RESET_TO_BOOTLOADER, 0);
        }
        sleep_ms(100);
    }
}

int main(void) {
    stdio_init_all;
    if (cyw43_arch_init) { return 1; }      // Wi-Fi sur coeur 0
    cyw43_arch_enable_sta_mode;
    cyw43_arch_wifi_connect_timeout_ms(
        "mon_ssid", "mon_mot_de_passe", CYW43_AUTH_WPA2_AES_PSK, 30000);
    multicore_launch_core1(coeur_metier);
    // 1) telecharger firmware.bin en HTTP vers la zone B (flash_range_erase
    //    puis flash_range_program, hors zone XIP du programme courant)
    // 2) verifier taille + checksum
    // 3) ecrire un boot-info pointant vers la zone B, puis reinitialiser
    firmware_pret = true;
    while (true) { sleep_ms(500); }
}

Verificación esperada

Tras una descarga completa y un checksum válido, la placa se reinicia, arranca desde la zona B y la versión mostrada por serie ha cambiado. El núcleo 1 continúa ejecutándose durante la descarga sin corromper lwIP.

Errores frecuentes

Otros tutoriales para esta placa

Ejemplos de código para esta placa

← Volver a la ficha 🛠 Todos los tutoriales