概述
用ESP32-CAM这块板的玩家们很可能会直接刷这个固件来用MicroPython:
micropython-camera-driver/firmware at master · lemariva/micropython-camera-driver · GitHub
然后也可以用这个关键字搜到很多问题:Guru Meditation Error: Core 0 panic'ed (StoreProhibited),应该是很多人都遇到我要说的这个问题了。
之前我在TB买过两个D0DWQ6 v1的ESP32-CAM,上面这个固件很好用,后来又买了两个新的,这次变成了D0DW v3的,据说现在都是这个型号了,发现这个固件不能用了,一直出现这个错误:
Rebooting...
ets Jul 29 2019 12:21:46
rst:0xc (SW_CPU_RESET),boot:0x13 (SPI_FAST_FLASH_BOOT)
configsip: 0, SPIWP:0xee
clk_drv:0x00,q_drv:0x00,d_drv:0x00,cs0_drv:0x00,hd_drv:0x00,wp_drv:0x00
mode:DIO, clock div:2
load:0x3fff0030,len:5440
load:0x40078000,len:14292
ho 0 tail 12 room 4
load:0x40080400,len:3456
entry 0x40080638
Guru Meditation Error: Core 0 panic'ed (StoreProhibited). Exception was unhandled.
Core 0 register dump:
PC : 0x40094077 PS : 0x00060d30 A0 : 0x800dab73 A1 : 0x3ffd7d40
A2 : 0x00000000 A3 : 0x00000000 A4 : 0x00007d11 A5 : 0x00000000
A6 : 0x3ffd7d40 A7 : 0x000007d1 A8 : 0x800da1b4 A9 : 0x3ffd7d10
A10 : 0x3ffc7a4c A11 : 0x3ffbd970 A12 : 0x00000003 A13 : 0x00000008
A14 : 0x00000000 A15 : 0x00000000 SAR : 0x00000010 EXCCAUSE: 0x0000001d
EXCVADDR: 0x00000000 LBEG : 0x00000000 LEND : 0x00000000 LCOUNT : 0x00000000
Backtrace:0x40094074:0x3ffd7d400x400dab70:0x3ffd7d50 0x400d7cf7:0x3ffd7d70
(其实这个图不是这个固件的,是我后面重新编译出来的,不过错误是一样的)
各种编译方法各种参数调整都无法解决问题,唯一确定的是PSRAM无法获取较高的一段地址。怀疑是PSRAM坏了?又买了另一家店的来看看,现在我已经有6个板了!一样的问题!看来不是坏了。。。
查了DataSheet,测了引脚的编号也都是对的,那么。。。这两个板的PSRAM芯片有没有不同?赶快看看!这一看不得了,原来新的板缩水了!!!
v1的那个板是6404L,64Mbits的SRAM,也就是8MBytes(只支持4M)
v3的那个板是PSRAM16H,16Mbits的SRAM,也就是2MBytes
下面这个是自己编译MicroPython来支持camera的方法:
MicroPython: Support for cameras: M5CAMERA, ESP32-CAM etc. - LeMaRiva|tech
在这其中的修改有这么一段:
-
main.c
: modify the lines inside the#if CONFIG_ESP32_SPIRAM_SUPPORT || CONFIG_SPIRAM_SUPPORT
, they should look like:mp_task_heap_size = 2 * 1024 * 1024; void *mp_task_heap = malloc(mp_task_heap_size); ESP_LOGI("main", "Allocated %dK for micropython heap at %p", mp_task_heap_size/1024, mp_task_heap);
这里使用malloc函数分配了2M的内存,在menuconfig可以看到还有其他用法,不过这不是重点:
( ) Integrate RAM into memory map
( ) Make RAM allocatable using heap_caps_malloc(..., MALLOC_CAP_SPIRAM)
(X) Make RAM allocatable using malloc() as well
还有一个选项,没仔细看不知道这个固件有没有打开它:
[ ] Try to allocate memories of WiFi and LWIP in SPIRAM firstly. If failed, allocate internal memory
看来这就是问题了,它要分配的2M无法满足所以Core dump了。
编译了一个不带camera的MicroPython进v3去看:
>>> micropython.mem_info()
stack: 704 out of 15360
GC: total: 2049088, used: 1360, free: 2047728
No. of 1-blocks: 16, 2-blocks: 8, max blk sz: 18, max free sz: 127971
再看看v1的:
>>> micropython.mem_info()
stack: 704 out of 15360
GC: total: 4098176, used: 1344, free: 4096832
No. of 1-blocks: 15, 2-blocks: 8, max blk sz: 18, max free sz: 256039
v1只支持4M的PSRAM为什么会给它搞个6404L的8M?也用不上啊。。。
原因已经明确了,看来这个老固件是不能用了,自己编译新的吧,这个heap_size改成1536 * 1024,这次就可以正常运行了,camera模块也正常使用。
最后
以上就是体贴月饼为你收集整理的ESP32-CAM MicroPython配新板出现的PSRAM问题的全部内容,希望文章能够帮你解决ESP32-CAM MicroPython配新板出现的PSRAM问题所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复