🛠 Ingénierie mémoire du Teensy 4.1 : TCM, DMAMEM, EXTMEM, flash QSPI et EEPROM
Objetivos
El Teensy 4.1 es una máquina de memoria: 1 024 KB de RAM (512 KB de RAM1 en TCM con acceso de ciclo único + 512 KB de RAM2 optimizada para DMA), 8 MB de flash QSPI (7 936 KB utilizables, los 256 KB superiores están reservados para la EEPROM emulada y el programa de recuperación), dos cachés de 32 KB y dos huellas QSPI vacías bajo la placa para soldar PSRAM. Este tutorial coloca conscientemente cada dato en el lugar adecuado.
Las palabras clave
FASTRUN: código colocado en el TCM de instrucciones (ITCM) — comportamiento predeterminado del compilador de Teensy.DMAMEM: búfer en RAM2, la única memoria optimizada para DMA; el montón (malloc, new, String de Arduino) también reside allí.EXTMEM+extmem_malloc: datos en la PSRAM soldada. Atención a la trampa documentada: con un solo chip, debe ir en la huella más pequeña; la más grande aloja ciertos chips de flash LittleFS.PROGMEM/F: constantes en el flash QSPI (ancho de banda del flash listado en 1 984 MB/s en las especificaciones técnicas).- EEPROM: 4 284 bytes emulados — y cada escritura pausa la ejecución desde el flash. Prohibido usarlo en bucles de tiempo real.
- 16 bytes de RAM RTC guardados por pila (LPGPR0-LPGPR3) sobreviven al apagado.
Código completo
#include <InternalTemperature.h>
DMAMEM uint8_t audioBuf[8192]; // RAM2, compatible DMA
EXTMEM uint8_t bigBuf[1024 * 1024]; // PSRAM : ne lie que si la puce est soudée
const char msg[] PROGMEM = "constante dans le flash QSPI";
void setup {
Serial.begin(9600);
while (!Serial && millis < 3000);
}
void loop {
Serial.print("Temp. die : ");
Serial.print(InternalTemperature.readTemperature); // capteur embarqué
Serial.print(" C | tas libre (RAM2) : ");
Serial.print(malloc_free / 1024);
Serial.println(" Ko");
delay(1000);
}
Verificación esperada
Con un chip PSRAM soldado en la huella pequeña, el sketch compila con EXTMEM y el monitor muestra la temperatura del die y el montón libre. Sin PSRAM, la palabra clave EXTMEM provoca un error de compilación — es la señal para verificar la huella.
Errores frecuentes
- Soldar el único chip PSRAM en la huella grande: no funcional, documentado por PJRC.
- Poner un búfer DMA en RAM1: el DMA apunta a RAM2; use
DMAMEM. - Escribir en EEPROM en cada bucle para «guardar»: las escrituras bloquean la ejecución desde el flash — microcortes garantizados.
- Contar 8 192 KB de flash libre: reste los 256 KB reservados → 7 936 KB.
- Ignorar el overclocking: 912 MHz está oficialmente admitido con aumento automático de la tensión del núcleo (1,25 V a 600 MHz); en sostenido, prevea la gestión térmica — PJRC señala que volver a ≤ 528 MHz reduce el consumo (~100 mA típicos a 600 MHz).
Otros tutoriales para esta placa
- Premiers pas sur le Teensy 4.1 : Teensyduino, Teensy Loader et premier Blink
- GPIO et PWM sur le Teensy 4.1 : 55 broches en 3,3 V, ni 5 V tolérées ni traîne
- Entrées analogiques du Teensy 4.1 : 18 broches, 2 ADC, 0-3,3 V fixes et zéro DAC
- Logger sur carte SD via le port SDIO natif du Teensy 4.1
- Serveur web embarqué : l'Ethernet natif 10/100 du Teensy 4.1 (DP83825)
- Boîte à rythmes USB MIDI : classes MIDI, MIDIx16 et port hôte USBHost_t36
Ejemplos de código para esta placa
clignotante.inoArduinotouche-capacitive.inoArduinoanalogique-12-bits.inoArduinomidi-piano.inoArduinopwm-respiration.inoArduinoservo-angle.inoArduino