Forum: Mikrocontroller und Digitale Elektronik ESP32: SPIRAM wird nicht gefunden (?)


von Anon X. (pascalx)


Angehängte Dateien:

Lesenswert?

Ich habe ein ESP32-Modul mit Kamera, siehe angehängte Photos.

Nun versuche ich, dieses mit dem aktuellen IDF (v5.2.2) in Betrieb zu 
nehmen.

Das Modul läuft ("Hello world"), allerdings gelingt es mir nicht, das 
SPI-RAM anzusprechen. Entsprechend schlägt malloc dann später fehl.

Hier (ein wenig gekürzt) der Output:
1
Chip is ESP32-D0WD-V3 (revision v3.1)
2
Features: WiFi, BT, Dual Core, 240MHz, VRef calibration in efuse, Coding Scheme None
3
Crystal is 40MHz
4
MAC: xxxxxx
5
6
Hard resetting via RTS pin...
7
Executing action: monitor
8
9
--- esp-idf-monitor 1.4.0 on /dev/ttyUSB0 115200 ---
10
11
rst:0x1 (POWERON_RESET),boot:0x13 (SPI_FAST_FLASH_BOOT)
12
configsip: 0, SPIWP:0xee
13
clk_drv:0x00,q_drv:0x00,d_drv:0x00,cs0_drv:0x00,hd_drv:0x00,wp_drv:0x00
14
mode:DIO, clock div:1
15
load:0x3fff0030,len:7524
16
load:0x40078000,len:16528
17
ho 0 tail 12 room 4
18
load:0x40080400,len:4
19
0x40080400: _init at ??:?
20
21
load:0x40080404,len:4312
22
entry 0x4008065c
23
24
I (31) boot: ESP-IDF v5.2.2 2nd stage bootloader
25
I (31) boot: compile time Jun 12 2024 15:42:26
26
I (31) boot: Multicore bootloader
27
I (35) boot: chip revision: v3.1
28
I (39) qio_mode: Enabling default flash chip QIO
29
I (44) boot.esp32: SPI Speed      : 80MHz
30
I (49) boot.esp32: SPI Mode       : QIO
31
I (54) boot.esp32: SPI Flash Size : 4MB
32
I (58) boot: Enabling RNG early entropy source...
33
I (64) boot: Partition Table:
34
I (67) boot: ## Label            Usage          Type ST Offset   Length
35
I (74) boot:  0 nvs              WiFi data        01 02 00011000 00006000
36
I (82) boot:  1 phy_init         RF data          01 01 00017000 00001000
37
I (89) boot:  2 factory          factory app      00 00 00020000 00100000
38
I (97) boot: End of partition table
39
I (101) esp_image: segment 0: paddr=00020020 vaddr=3f400020 size=0d2a4h ( 53924) map
40
I (124) esp_image: segment 1: paddr=0002d2cc vaddr=3ffb0000 size=02d4ch ( 11596) load
41
I (127) esp_image: segment 2: paddr=00030020 vaddr=400d0020 size=22094h (139412) map
42
I (165) esp_image: segment 3: paddr=000520bc vaddr=3ffb2d4c size=005d4h (  1492) load
43
I (166) esp_image: segment 4: paddr=00052698 vaddr=40080000 size=0f094h ( 61588) load
44
I (197) boot: Loaded app from partition at offset 0x20000
45
I (197) boot: Disabling RNG early entropy source...
46
I (209) cpu_start: Multicore app
47
I (217) cpu_start: Pro cpu start user code
48
I (217) cpu_start: cpu freq: 240000000 Hz
49
I (217) cpu_start: Application information:
50
I (220) cpu_start: Project name:     camera_example
51
I (226) cpu_start: App version:      1
52
I (230) cpu_start: Compile time:     Jun 13 2024 07:44:17
53
I (236) cpu_start: ELF file SHA256:  6faf2e1af...
54
I (242) cpu_start: ESP-IDF:          v5.2.2
55
I (246) cpu_start: Min chip rev:     v0.0
56
I (251) cpu_start: Max chip rev:     v3.99 
57
I (256) cpu_start: Chip rev:         v3.1
58
I (261) heap_init: Initializing. RAM available for dynamic allocation:
59
I (268) heap_init: At 3FFAE6E0 len 00001920 (6 KiB): DRAM
60
I (274) heap_init: At 3FFB3C18 len 0002C3E8 (176 KiB): DRAM
61
I (280) heap_init: At 3FFE0440 len 00003AE0 (14 KiB): D/IRAM
62
I (287) heap_init: At 3FFE4350 len 0001BCB0 (111 KiB): D/IRAM
63
I (293) heap_init: At 4008F094 len 00010F6C (67 KiB): IRAM
64
I (300) spi_flash: detected chip: generic
65
I (304) spi_flash: flash io: qio
66
W (308) i2c: This driver is an old driver, please migrate your application code to adapt `driver/i2c_master.h`
67
I (319) main_task: Started on CPU0
68
I (323) main_task: Calling app_main()
69
I (327) gpio: GPIO[25]| InputEn: 1| OutputEn: 0| OpenDrain: 0| Pullup: 1| Pulldown: 0| Intr:2
70
71
I (336) cam_hal: cam init ok
72
I (339) sccb: pin_sda 26 pin_scl 27
73
I (343) sccb: sccb_i2c_port=1
74
I (347) gpio: GPIO[32]| InputEn: 0| OutputEn: 1| OpenDrain: 0| Pullup: 0| Pulldown: 0| Intr:0 
75
I (386) camera: Detected camera at address=0x30
76
I (389) camera: Detected OV2640 camera
77
I (389) camera: Camera PID=0x26 VER=0x42 MIDL=0x7f MIDH=0xa2
78
79
I (470) esp32 ll_cam: node_size: 2560, nodes_per_line: 1, lines_per_node: 1, dma_half_buffer_min:  2560, dma_half_buffer: 15360,lines_per_half_buffer:  6, dma_buffer_size: 30720, image_size: 153600
80
I (477) cam_hal: buffer_size: 30720, half_buffer_size: 15360, node_buffer_size: 2560, node_cnt: 12, total_cnt: 10
81
82
I (488) cam_hal: Allocating 153600 Byte frame buffer in PSRAM
83
84
E (495) cam_hal: cam_dma_config(301): frame buffer malloc failed
85
E (501) cam_hal: cam_config(385): cam_dma_config failed
86
E (507) camera: Camera config failed with error 0xffffffff
87
E (513) example:take_picture: Camera Init Failed
88
89
I (518) main_task: Returned from app_main()

Ich habe mit "idf.py menuconfig" das SPIRAM enabled...
1
> cat sdkconfig | grep SPIRAM
2
CONFIG_SOC_SPIRAM_SUPPORTED=y

Da in anderen Beispielen, die ich gesehen habe, die Grösse des PSRAM 
beim Starten gezeigt wird, vermute ich, dass irgendetwas mit der 
Konfiguration nicht stimmt und dieses nicht erkannt wird. Auf dem Board 
ist auf jeden Fall welches aufgelötet.

Was könnte das Problem sein, bzw. wie behebe ich dieses?

von Niklas G. (erlkoenig) Benutzerseite


Lesenswert?

Der SPIRAM ist für DMA nicht zugänglich, daher kannst du keinen 
Speicherblock mit DMA-Unterstützung dort anfordern.

von Oliver h. (oliver_h)


Lesenswert?

Hallo Anon,

du musst per sdkconfig noch einstellen, ob dein RAM Quad- oder Octal-SPI 
benutzt.

Beim ESP-32-S3R2 (2 MB RAM) sieht es bei mir so aus:
1
#
2
# ESP PSRAM
3
#
4
CONFIG_SPIRAM=y
5
6
7
#
8
# SPI RAM config
9
#
10
CONFIG_SPIRAM_MODE_QUAD=y
11
# CONFIG_SPIRAM_MODE_OCT is not set
12
CONFIG_SPIRAM_TYPE_AUTO=y
13
# CONFIG_SPIRAM_TYPE_ESPPSRAM16 is not set
14
# CONFIG_SPIRAM_TYPE_ESPPSRAM32 is not set
15
# CONFIG_SPIRAM_TYPE_ESPPSRAM64 is not set
16
CONFIG_SPIRAM_ALLOW_STACK_EXTERNAL_MEMORY=y
17
CONFIG_SPIRAM_CLK_IO=30
18
CONFIG_SPIRAM_CS_IO=26
19
# CONFIG_SPIRAM_FETCH_INSTRUCTIONS is not set
20
# CONFIG_SPIRAM_RODATA is not set
21
# CONFIG_SPIRAM_SPEED_120M is not set
22
CONFIG_SPIRAM_SPEED_80M=y
23
# CONFIG_SPIRAM_SPEED_40M is not set
24
CONFIG_SPIRAM_SPEED=80
25
CONFIG_SPIRAM_BOOT_INIT=y
26
# CONFIG_SPIRAM_IGNORE_NOTFOUND is not set
27
# CONFIG_SPIRAM_USE_MEMMAP is not set
28
# CONFIG_SPIRAM_USE_CAPS_ALLOC is not set
29
CONFIG_SPIRAM_USE_MALLOC=y
30
CONFIG_SPIRAM_MEMTEST=y
31
CONFIG_SPIRAM_MALLOC_ALWAYSINTERNAL=16384
32
CONFIG_SPIRAM_TRY_ALLOCATE_WIFI_LWIP=y
33
CONFIG_SPIRAM_MALLOC_RESERVE_INTERNAL=32768
34
# CONFIG_SPIRAM_ALLOW_BSS_SEG_EXTERNAL_MEMORY is not set
35
# end of SPI RAM config
36
# end of ESP PSRAM

von Anon X. (pascalx)


Lesenswert?

Danke für deine Antwort.

Ich bin mit dem idf-System leider noch nicht so vertraut, 'idf.py build' 
überschreibt mir aber jeweils 'sdkconfig'. Über 'idf.py menuconfig' 
stehen diese Optionen aber nicht zur Verfügung.

Wo stelle ich diese Optionen am besten ein, so dass sie nicht 
überschrieben werden?

von Oliver h. (oliver_h)


Angehängte Dateien:

Lesenswert?

Ich nutze hauptsächlich das Plugin für esp-idf in VScode. Ich sehe die 
Optionen aber auch in Menuconfig.
Habe v5.2.1, btw

von Anon X. (pascalx)


Lesenswert?

Ha, wenn ich ein neues Projekt erzeuge, sind die Optionen tatsächlich 
da.

Beim diesem Beispiel 
(https://github.com/espressif/esp32-camera/tree/master/examples/camera_example/main) 
aber nicht.

Ich werde jetzt mal versuchen, den Camera-Code in das Beispiel zu 
übertragen. Jetzt wird das SPI-RAM immerhin schon mal gefunden...

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.