Hallo, hat schonmal jemand mit dem ESP32 Wrover der PSRAM unter Arduino genutzt? Mein Wrover hat 8MB PSRAM. Ich bekomme auch die Ausgabe das 8MB zur Verfügung stehen (Aus einem Beispiel Projekt) ======================================== PSRAM total size : 8388608 ---------------------------------------- PSRAM first 4MB size : 3932076 PSRAM first 4MB free : 1834924 PSRAM HI-MEM size : 4456448 PSRAM HI-MEM free : 4456448 ======================================== Internal RAM size : 382236 Internal RAM free : 355432 ======================================== jetzt habe ich schon herausgefunden das die 8MB nur bedingt funktionieren weil die oberen 4MB nicht adressiert werden können (bzw nur über himem) Mir würden vielleicht auch 4MB reichen. Aber ich schaffe es nicht ein array über 1MB zu initialisisren und zu nutzen. Warscheinlich stehe ich nur auf dem Schlauch.... kann mir jemand erklären (einfach) wie ich ein array[8*1024*1024] in den PSRAM kriege?
John P. schrieb: > kann mir jemand erklären (einfach) wie ich ein array[8*1024*1024] in den > PSRAM kriege? Gar nicht, weil zu groß. Die Api (https://docs.espressif.com/projects/esp-idf/en/latest/api-reference/system/himem.html) kann nur ein 32KB Fenster vpm Himem in den Addressraum mappen. D.h. man braucht eine Zugriffsfunktion, die mittels Array Index das passende 32KB Fenster ausrechnet und einblendet. Zugriffe über Fenstergrenzen müsste man aufteilen. John P. schrieb: > Aber ich schaffe es nicht ein array über 1MB zu initialisisren und zu > nutzen. > [...] > PSRAM first 4MB free : 1834924 Merkste was? Da sind nur noch ~1,8MB frei...
Jim M. schrieb: > D.h. man braucht eine Zugriffsfunktion, die mittels Array Index das > passende 32KB Fenster ausrechnet und einblendet. Zugriffe über > Fenstergrenzen müsste man aufteilen. Deswegen sagt ich ja, dass mir 4MB reichen würden. BZW. kann ich die letzten 4MB auch in 32kB Blöcke aufteilen. Nur ist mir die ganze Himem Api noch nicht ganz klar. Inzwischen konnte ich ein Array von etwa mehr als 3MB initialisieren. Zumindestens passen die Angaben der Heap Info. Code: uint32_t N = 3932092; byte* Ram_Buf; if (Ram_Buf = (byte*)heap_caps_malloc(sizeof(byte)*N, MALLOC_CAP_SPIRAM)) Serial.println("heap_caps_malloc succeeded"); else Serial.println("heap_caps_malloc failed"); Serial.println("\nheap_info"); heap_caps_print_heap_info(MALLOC_CAP_SPIRAM); Serial.println(); Ausgabe: heap_caps_malloc succeeded heap_info Heap summary for capabilities 0x00000400: At 0x3f800000 len 3932159 free 0 allocated 3932092 min_free 0 largest_free_block 0 alloc_blocks 1 free_blocks 1 total_blocks 2 Totals: free 0 allocated 3932092 min_free 0 largest_free_block 0 ======================================== PSRAM total size : 8388608 ---------------------------------------- PSRAM first 4MB size : 3932092 PSRAM first 4MB free : 0 PSRAM HI-MEM size : 4456448 PSRAM HI-MEM free : 4456448 ======================================== Internal RAM size : 332020 Internal RAM free : 305192 ======================================== Aber wenn ich das Array Ram_Buf schreibe und später wieder lese unterscheiden sich die Werte.
Mein Fehler ist gefunden: Ich hatte zuvor ein Wroom verwendet und bin jetzt auf den Wrover weil ich den PSRAM nutzen wollte: Und hier liegt der Fehler: Wroom hat GPIO 16 & 17 als IO -> sind bei mir eine LED und SCL vom Sensor (dessen daten in den PSRAM sollen) Wrover hat GPIO 16 & 17 am PSRAM als CLK und CS kein wunder also das mein PSRAM nicht wie erwartet funktioniert. Merke: Wer Datenblätter (richtig) lesen kann ist klar im Vorteil.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.