Forum: Mikrocontroller und Digitale Elektronik ESP32 WROVER mit 8MB PSRAM (Arduino)


von John P. (brushlesspower)


Lesenswert?

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?

von Jim M. (turboj)


Lesenswert?

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...

von John P. (brushlesspower)


Lesenswert?

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.

von John P. (brushlesspower)


Lesenswert?

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
Noch kein Account? Hier anmelden.