romu-internal-flash-storage.ino

Placa de desarrollo USB compacta Bitmerse Romu (RP2354A) · Archivo : romu-internal-flash-storage.ino · Lenguaje : C/C++ (Pico SDK) · Uso : Sauvegarder des paramètres utilisateurs dans la mémoire Flash interne persistante.

Utiliza la memoria Flash interna del RP2354 para almacenar datos persistentes sin EEPROM externa.

El RP2354 tiene Flash integrada. Este ejemplo muestra cómo escribir y leer de un área específica. Cuidado con los ciclos de escritura limitados (100k). Usar para guardar configuración de dispositivo HID. Requiere el header hardware/flash.h.

romu-internal-flash-storage.ino

#include "pico/stdlib.h"
#include "pico/bootrom.h"
#include "hardware/flash.h"

// Adresse de début de la zone de stockage (dernière page de flash, par exemple)
#define STORAGE_START 0x101FF000 // Dépend de la taille de la flash RP2354
#define PAGE_SIZE 256

typedef struct {
    uint32_t magic_word;
    uint32_t counter;
    char name[32];
} UserConfig;

void save_config(UserConfig *config) {
    // Effacer la page
    flash_range_erase(STORAGE_START - XIP_BASE, PAGE_SIZE);
    // Écrire les données
    flash_range_program(STORAGE_START - XIP_BASE, (const uint8_t *)config, sizeof(UserConfig));
}

bool load_config(UserConfig *config) {
    uint32_t *flash_ptr = (uint32_t *)STORAGE_START;
    if (flash_ptr[0] == 0xDEADBEEF) {
        memcpy(config, (void *)STORAGE_START, sizeof(UserConfig));
        return true;
    }
    return false;
}

int main() {
    stdio_init_all();
    UserConfig config;

    if (load_config(&config)) {
        printf("Loaded: Name=%s, Count=%lu\n", config.name, config.counter);
        config.counter++;
    } else {
        printf("No config found, initializing...\n");
        config.magic_word = 0xDEADBEEF;
        config.counter = 1;
        strcpy(config.name, "RomuUser");
    }

    save_config(&config);
    printf("Saved new count: %lu\n", config.counter);

    while (true) {
        sleep_ms(1000);
    }
}

← Volver a la ficha