我是靠谱客的博主 体贴月饼,最近开发中收集的这篇文章主要介绍ESP32-CAM MicroPython配新板出现的PSRAM问题,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

用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问题所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(39)

评论列表共有 0 条评论

立即
投稿
返回
顶部