romu-usb-flash-storage.ino
Gestiona la lectura y escritura en la memoria flash interna para guardar configuraciones o datos.
El RP2354A tiene memoria flash QSPI. Este código usa funciones de pico-sdk para escribir al final de la memoria. Advertencia: la escritura en flash es lenta y desgastante. Para USB Mass Storage completo, use la librería TinyUSB MSC.
romu-usb-flash-storage.ino
#include <Arduino.h>
#include "pico/stdlib.h"
#include "hardware/flash.h"
// Zone de stockage en flash (dernier secteur)
#define FLASH_SECTOR_SIZE 4096
#define STORAGE_OFFSET (2 * 1024 * 1024 - FLASH_SECTOR_SIZE)
uint8_t buffer[FLASH_SECTOR_SIZE];
void setup() {
Serial.begin(115200);
// Lecture initiale
memcpy(buffer, (uint8_t*)XIP_BASE + STORAGE_OFFSET, FLASH_SECTOR_SIZE);
Serial.print("First byte in flash: ");
Serial.println(buffer[0]);
}
void loop() {
if (Serial.available()) {
char c = Serial.read();
if (c == 'w') {
// Écriture exemple
memset(buffer, 0, FLASH_SECTOR_SIZE);
buffer[0] = 0xAA;
// Désactivation IRQ pour écriture flash
uint32_t ints = save_and_disable_interrupts();
flash_range_erase(STORAGE_OFFSET, FLASH_SECTOR_SIZE);
flash_range_program(STORAGE_OFFSET, buffer, FLASH_SECTOR_SIZE);
restore_interrupts(ints);
Serial.println("Data written to flash.");
}
}
delay(100);
}