ESP32 Flash direkt beschreiben

Hi,

vielleicht hat das schonmal jemand gemacht.. ich versuche es mal kurz und bündig.

Ich benötige ein 1MB großes Array im Programm, SPIFF ist keine Lösung da ich den direkten Superschnellem Zugriff benötige. Das blöde daran ist das der Upload+Kompilieren eben mal mehr als etwas länger dauert. Sogar zum testen ist das SPIFF viel zu langsam.

Meine erste Idee, funktionierte nicht so richtig (oder falsch gemacht):
mit der IDF den Flash direkt beschreiben/Lesen und dann ins Programmspace mappen.

Meine zweite Idee und eigentliche Frage..
kann ich den Array nicht irgendwie einmalig ans Ende des Programmspaces schreiben und dann mappen.. so das wenn das Programm nicht zu groß wird dieser Bereich nicht überschrieben wird.

Gruß, Schuppeste

Hallo,

ich habe zwar keinen Ahnung, was Du vorhast, aber was bitte ist "direkten Superschnellem Zugriff"?
Das SPIFFS liegt ja auch nur im Flash, vielelicht findest Du in den Source vom SPIFFS den Trick, wie da die Daten ins Flash geschriben/gelesen werden. Oder nimm ein ESP32-Modul mit PSRAM (ESP32 Wover).

Oder kauf Dir bei Pollin zum Testen und Spielen :wink: einen Odroid Go, der hat 4MB PSRAM drin.
Ein Array habe ich da zwar nicht direkt reinbekommen, das dürfte aber eher an fehlenden Kenntnissen liegen. Ich habe mir nur mit ps_malloc(size) den Speicher besorgt und die Offsets dann eben selber berechnet.
Als 2MB Streambuffer für MP3 geht es auch gut.

Gruß aus Berlin
Michael

Danke für Deine Antwort.

Mit Superschnell meine ich den Zugriff auf die Daten als hätte man einen Array einkompiliert, die offsets setze ich auch selbst, bei mir ist es ein Rawbytes Bildspeicher für das Display mit Pointer Zugriff.

Als Array funktioniert es gut und ungebremst, ich will mir zum vernünftigen Testen die Kompilier/Uploadzeit einsparen. 1,3MB dauert halt ein wenig.

Hallo,

der ESP32-Loader packt den Kram doch eigentlich vor den Übertragen schon. Aber wirklich fällt mir da jetzt nichts ein. Soviel Daten für ein Display hatte ich noch nicht...

Gruß aus Berlin
Michael

Das liegt an 480x320 RGB24 2 Hintergründe und 2 Colored High-Res Zeichensätze sind weit über 1MB.

Ich verfolge erstmal den ansatz eine Raw Partition zu erstellen und diese mit mmap als Speicherbereich zu deklarieren. Das hatte ich schon fertig, dabei waren Farben und Linien vertauscht. Sogar mit kleinem Javatool um die Daten hochzuladen.

Dachte es könnte einfacher klappen.

So, habe es gelöst..

Ich habe eine Custom Partition angelegt und mein Bilddaten.bin mit dem ESP-Downloader an die Adresse geladen. Dann habe ich die Partition als RAM in einen Pointer gemappt. (macht die MMU mit nem Transparent Cache)

Jetzt kann ich mit dem Pointer "data"+Offset meine Bilder direkt zum Display rausschieben.

Pseudobeispiel:

const esp_partition_t* part;
spi_flash_mmap_handle_t handle;
void* data;
esp_err_t err;

void setup(){
part=  esp_partition_find_first(ESP_PARTITION_TYPE_DATA, ESP_PARTITION_SUBTYPE_ANY, "storage");
err = esp_partition_mmap(part, 0, part->size, SPI_FLASH_MMAP_DATA, (const void**)&data, &handle);
vspi->writeBytes((uint8_t*)data+offsetBackground, width *high* 3);
}

Die Bytes gehen mit ganzen 40Mhz ans Display raus.

Hallo,

das mit der Custom Partition merke ich mir mal für schlechte Zeiten, Danke.

Gruß aus Berlin
Michael