Hallo, ich versuche bei einem ESP32 Wrover Modul die externen 4MByte
SPI-RAM zu nutzen. Dies gelingt mir leider nicht.
Gemäß Espressif Doku kann das RAM grundsätzlich in unterschiedlichen
Betriebsarten genutzt werden, wenn man die Espressif Toolchain nutzt.
Ich nutze aber die Arduino IDE. Da kann ich wohl nichts einstellen.
Die Programmzeile
Das ist nur das interne RAM. Ich nehme an, dass ich das SPI-RAM nur über
direkten Adresszugriff ab Adresse 0x3F80000 nutzen kann.
Hier ein kleines Testprogramm:
Wenn ich mehr als 128 Bytes nutze, geht es in die Hose.
1
// 291352 Bytes free.
2
//
3
// Test 128B: 128 Bytes: 128 OK, 0 Errors.
4
// Test 256B: 256 Bytes: 166 OK, 90 Errors.
5
// Test 1KB: 1024 Bytes: 166 OK, 858 Errors.
6
// Test 16KB: 16384 Bytes: 166 OK, 16218 Errors.
7
// Test 64KB: 65536 Bytes: 1 OK, 65535 Errors.
8
// Test 1MB: 1048576 Bytes: 1 OK, 1048575 Errors.
9
// Test 4MB: 4194304 Bytes: 1 OK, 4194303 Errors.
Frage:
Ist es jemand schon gelungen, den SPI-RAM mit der Arduino IDE zu nutzen?
Wo liegt mein Fehler?
Ich nutze einen Odroid Go, in dem das Wrover Modul sitzt.
Vielen Dank für Tipps.
ESP-User schrieb:> Das ist nur das interne RAM. Ich nehme an, dass ich das SPI-RAM nur über> direkten Adresszugriff ab Adresse 0x3F80000 nutzen kann.
wieso sollte das so drekt gehen, muss da nichts initialisiert werden?
ESP-User schrieb:> Gemäß Espressif Doku kann das RAM grundsätzlich in unterschiedlichen> Betriebsarten genutzt werden, wenn man die Espressif Toolchain nutzt.
hast du mal Beispielcode dafür? ich denke da fehlt noch was damit das
funktioniert, der Controller wüsste vllt. gerne dass du versuchst RAM zu
mappen und nicht Flash oder vllt. irgendeinen Sensor.
in deinem Beispielcode schreibst du einfach an die Adresse
> #define SPIRAM ((byte*)0x3F800000)
ohne den SPI zu initialisieren? ich denke das solltest du tun. eventuell
schreibst du zur Zeit nur in den Cache für den externen Ram, ohne dass
dieser verwendet wird.
poste mal Beispielcode für Espressif.
lies mal hier
https://docs.espressif.com/projects/esp-idf/en/latest/api-guides/external-ram.htmlhttps://docs.espressif.com/projects/esp-idf/en/latest/api-reference/kconfig.html#config-spiram-use
Du machst grade "ich hab nen Arduino auf nen Wecker geklebt, warum weiß
der nicht wie spät es ist"
da muss alles konfiguriert werden und der RAM dann auch gemappt werden,
dass musst du alles selber machen.
Datenblatt:
Accesses to the external flash and external SPI RAM are done through a
cache and are also handled by an MMU. This Cache MMU can apply different
mappings, depending on the PID of the process as well as the CPU the
process is running on.
die MMU für den externen Speicher solltest du auch konfigurieren,
entweder gibts da was fertiges oder es heißt Datenblatt lesen (nur die
paar duzend interessanten Seiten, nicht alle <700) und alle register
selber schreiben.
ESP-User schrieb:> Hallo, ich versuche bei einem ESP32 Wrover Modul die externen 4MByte> SPI-RAM zu nutzen. Dies gelingt mir leider nicht.>> Gemäß Espressif Doku kann das RAM grundsätzlich in unterschiedlichen> Betriebsarten genutzt werden, wenn man die Espressif Toolchain nutzt.> Ich nutze aber die Arduino IDE. Da kann ich wohl nichts einstellen.>> Die Programmzeile>
Lass Dich vom Unsinn, den K.S. geschrieben hat, nicht verwirren. Ist
vermutlich die zu hohe Dosis Weihnachtspunsch.
Du solltest die Arduino-Version prüfen. In den korrekten Versionen wird
der PSRAM automatisch eingebunden, wenn er beim Booten erkannt wird.
ESP.getFreeHeap() sollte den gesamten RAM dann auch anzeigen.
Probier mal eine andere Arduino-Version aus.
Weihnachtsmann schrieb:> Du solltest die Arduino-Version prüfen.
Ich nutze derzeit Version 1.8.5. Werde mal nach einem Update suchen und
dann nochmal probieren.
Hallo,
beim Odroid Go nicht den Odroid als Board einstellen sondern entweder
ESP32 Wrover oder ESP32 Devkit und dort PSRAM enable.
Warum die boards.txt beim OdriodGo bzw. auch beim M5Stack da falsch ist,
wissen nur die Götter. Ich nutze auf dem Odroid Go den PSRAM als Buffer
für MP3-Streamplay.
Initalisiert werden muß dann nichts, ps_malloc() geht dann problemlos.
Für die heap-Einbindung muß vermutlich noch was in der
ArduinoIDE/boards.txt/Partitiontable beim ESP32 angepasst werden, habe
ich aber bisher nicht weiter verfolgt.
IDE hier 1.8.7 / 1.8.8 und ESP32 Boardmanagerversion 1.0.0.
Gruß aus Berlin
Michael
Michael U. schrieb:> Hallo,>> beim Odroid Go nicht den Odroid als Board einstellen sondern entweder
Vielen Dank, Problem ist gelöst.
Update der IDE auf die neue 1.8.8 brachte keine Veränderung.
Nach Umstellung des Boards lief es.
Ursprünglich hatte ich ODROID ESP32 eingestellt, da ich den ODROID GO
verwende.
Nachtrag:
Ich verwende jetzt die Board-Einstellung "ESP32 Dev Module" mit PSRAM
enabled (siehe Screenshot). Das läuft soweit.
Jedoch funktionierte der Zugriff auf die SD-Karte nicht mehr und ich
konnte keine Grafiken mehr auf das Display laden.
Konnte das Porblem lösen indem ich im Sourcecode
Hallo,
SD.begin(22) ist richtig, CS_00 vom SPI liegt auf dem
Erweiterungsstecker, CS_01 wird für die SD-Card benutzt.
Da ich das OdroidGo-Arduino-Paket ohnhin nur für wenihe Tests genutzt
habe, mußte ich es ohnehin immer angeben. Die LIbs in dem Paket sind
großtenteils Anleihen bzw. Anpassungen existierenden Libs, wo nur
sozusagen ein Wrapper und ein paar Definitionen rübergelegt wurde. Sie
sind auch nahezu identisch zum M5Stack-Paket.
Ich nutze, wie sonst auch, TFT_eSPI für das Display, ausgeliehen habe
ich mir nur die Button-Lib, weil ich zu faul war, die Analogabfrage des
Steuerkreuzes selber irgendwo einzubauen.
Der eingebaute Lautsprecher ist auch so eine Sache: der Verstärker hängt
an Pin 25 und 26. Das sind auch die internen DAC des ESP32. Leider ist
Pin 25 aber mit Shutdown des Verstärkers verbunden, will also Low um den
Verstärker einzuschalten. Direkt Ausgabe an den DAC auf Pin 26 geht zwar
und wird von Odroid Go genutzt, die Einbindung der ESP8266 Lib mit
I2S-Ausgabe an den internen DAC ist mir aber noch nicht gelungen.
Ist nicht wirklich wichtig, ist ja sowieso keine HiFi-Box. ;-)
Pin 2 von der LED habe ich zusätzlich noch mit dem freien Pin 9 der
Erweiterungsleiste verbunden, weil ich für Spielerein noch einen
zusätzlichen IO haben wollte.
Gruß aus Berlin
Michael
Hallo,
entschuldigt bitte das ich den älteren Thread wieder hervorkrame.
Ich habe einen M5Stack Fire mit PSRAM.
Den ZusatzRAM kann ich leider nicht ansprechen.
Die Ausgabe mit dem keinen Programm schaut für mich auch seltsam aus:
1
369696 Bytes free.
2
3
ps_malloc succeeded
4
heap_caps_malloc succeeded
5
6
heap_info
7
Heap summary for capabilities 0x00000004:
8
At 0x3ffbdb28 len 52 free 4 allocated 0 min_free 4
Kann sich das einer erklären, das sowohl ps_malloc als auch
heap_caps_malloc initialisiert werden kann, aber dann nicht
angesprochen?
Arduino IDE habe ich auf 1.8.8 Aktualisiert.
ESP32 Board Version ist die 1.0.1
Als Board habe ich ESP32 Dev Module mit PSRAM Enabled ausgewählt.
Vielen Dank für eure Unterstützung
Stefan
Hi,
Ich habe das auch mal getestet … (jetzt geht es) manchmal liegt der
Fehler
auch ganz wo anders..
mir ist aufgefallen 166 Bytes ok getestet mit "(0xA5-i) & 0xFF" ..
0xA5 = 165 dezimal das war mir zu merkwürdig als nur Zufall zu sein.
habe das mal geändert auf
byte fill;
for (uint i = 0; i<(ramSize); i++) {
fill = (i ^ maske);
data[i] = fill;
}
zu prüfen dann...
byte compare;
for (uint i = 0; i<(ramSize); i++) {
compare = (i ^ maske);
if (data[i] != compare) e++;
}
und alles rennt..