🛠 Comprendre la mémoire : 2 Mo de flash, 1 Mo de RAM TCM/DMA, EEPROM émulée et LittleFS

Teensy 4.0 · intermediaire · Schéma : IMG-teensy-40-intermediaire-6-teensy40-memoire-flash-ram-eeprom.svg — carte mémoire du Teensy 4.0 : puce flash externe W25Q16JV 2 Mo (1984 Ko utilisables, 64 Ko réservés EEPROM+restore), RAM 1024 Ko coupée en RAM1 (TCM, accès 1 cycle) et RAM2 (optimisée DMA), 16 octets de RTC RAM sur pile VBAT, 1080 octets d'EEPROM émulée.

Objetivos

La arquitectura de memoria del Teensy 4.0 es su mayor fortaleza — y su principal trampa de portabilidad. El chip NXP no tiene flash integrada: el programa reside en una flash SPI externa Winbond W25Q16JV de 2 MB (1984 KB utilizables — los 64 KB superiores almacenan la EEPROM emulada y el programa de rescate LED-blink), ejecutada mediante una caché de 65536 bytes a 66 MB/s. En cuanto a la RAM: 1024 KB en total, dividida entre RAM1 (TCM, acceso de un ciclo a través del bus de 64 bits ITCM/DTCM) y RAM2 (optimizada para DMA). Aprenderás las palabras clave de ubicación y la EEPROM emulada.

Las palabras clave de ubicación

Código completo

// Démonstration des zones mémoire + EEPROM émulée.
#include <EEPROM.h>

const char message[] PROGMEM = "constante en flash (F pour les littéraux)";
DMAMEM uint16_t tamponDMA[1024];        // RAM2 : idéal pour le DMA
FASTRUN void cheminCritique {         // code dans RAM1 (TCM)
  for (uint32_t i = 0; i < 1024; i++) tamponDMA[i] = i * 3;
}

void setup {
  Serial.begin(9600);
  Serial.println((const char*)message);

  // EEPROM : 1080 OCTETS émulés dans la flash (pas de vraie EEPROM !)
  uint8_t compteur = EEPROM.read(0);
  compteur++;
  uint32_t t0 = micros;
  EEPROM.update(0, compteur);   // écriture : le code S'ARRÊTE un instant
  uint32_t duree = micros - t0;

  Serial.printf("session %u, écriture EEPROM = %u us\n", compteur, duree);
}

void loop { cheminCritique; delay(1000); }

Para los archivos (registros, muestras de audio), la flash restante se utiliza mediante LittleFS: SD.begin(BUILTIN_SDCARD) apunta al conector SDIO de los pads inferiores, mientras que LittleFS forma la zona libre de flash — misma API File.

Verificación esperada

El contador de sesiones sobrevive a los cortes de alimentación (1080 bytes persistentes). La medición de micros alrededor de EEPROM.update muestra la micro-interrupción de ejecución documentada por PJRC: la escritura desde la flash interrumpe el código — prohibido en un bucle de audio en tiempo real. Compara la duración de un bucle de caminoCritique con y sin FASTRUN para sentir la diferencia entre TCM y flash con caché.

Errores frecuentes

Otros tutoriales para esta placa

Ejemplos de código para esta placa

← Volver a la ficha 🛠 Todos los tutoriales