无法修改esp32配置文件sdkconfig,摄像头初始化错误 📅 发布时间:2026/8/24 14:05:23 👁 浏览次数: 类别配置项文件一报错文件二正常影响说明DW_GDMACONFIG_DW_GDMA_OBJ_DRAM_SAFEy未设置主因要求回调上下文必须在内部 DRAMDW_GDMACONFIG_DW_GDMA_ISR_IRAM_SAFEy未设置主因要求中断相关代码/数据在 IRAM/DRAMLCD DSICONFIG_LCD_DSI_ISR_IRAM_SAFEy未设置次要LCD 中断代码位置检查LCD DSICONFIG_LCD_DSI_ISR_CACHE_SAFEy未设置次要LCD Cache 安全检查LCDCONFIG_LCD_ENABLE_DEBUG_LOGy未设置仅影响日志输出量严重影响速度建议关闭通过CPU搬运屏幕显示字符串速度极慢FlashCONFIG_ESPTOOLPY_FLASHFREQ40m80m仅影响 Flash 读写速度PSRAM/XIPCONFIG_SPIRAM_FETCH_INSTRUCTIONS未设置y允许从 PSRAM 取指令PSRAM/XIPCONFIG_SPIRAM_RODATA未设置y允许将只读数据放 PSRAMPSRAM/XIPCONFIG_SPIRAM_XIP_FROM_PSRAM未设置y允许 XIP 从 PSRAM 执行PSRAM/XIPCONFIG_SPIRAM_FLASH_LOAD_TO_PSRAM未设置y启动时将 Flash 内容加载到 PSRAMH264CONFIG_ESP_H264_DECODER_IRAMy未设置文件二可能未启用 H264 组件(18567) lcd.dsi: copy draw buffer by CPUV (19137) lcd.dsi: draw buffer is in frame buffer memory range, do cache write back onlyI (19173) mipi_lcd: MIPI DSI PHY Powered onI (19174) ov5645: Detected Camera sensor PID0x5645I (19315) app_video: version: 0.5.1I (19316) app_video: driver: MIPI-CSII (19316) app_video: card: MIPI-CSII (19317) app_video: bus: esp32p4:MIPI-CSII (19323) app_video: width1280 height960I (19327) app_video: Capture RGB 5-6-5 formatI (19333) app_video: Camera StartE (19337) dw-gdma: dw_gdma_channel_register_event_callbacks(675): user context not in internal RAME (19346) CSI: esp_cam_new_csi_ctlr(213): failed to register dwgdma callbackE (19354) CSI: s_del_csi_ctlr(246): processor isn’t in init stateE (19361) csi_video: failed to create CSIE (19365) esp_video: video-ops-start102E (19370) app_video: failed to start streamESP_ERROR_CHECK failed: esp_err_t 0xffffffff (ESP_FAIL) at 0x4000d392— 0x4000d392: lcd_cam_task at D:/temp/car_plates/esp32/12_mipilcd_add_camera/main/APP/MIPI_CAM/mipi_cam.c:114file: “./main/APP/MIPI_CAM/mipi_cam.c” line 114func: lcd_cam_taskexpression: camera_stream_start(video_fd)配置所属模块共同作用DW_GDMA_OBJ_DRAM_SAFEGDMA 驱动强制 DMA 回调上下文必须在内部 DRAMLCD_DSI_ISR_CACHE_SAFELCD 驱动强制 LCD 中断处理必须 Cache 安全报错原因启用 CONFIG_DW_GDMA_OBJ_DRAM_SAFE 后DW_GDMA 驱动会强制检查用户传入的回调上下文user context指针是否位于芯片内部 DRAM。我的的项目启用了 PSRAMCONFIG_SPIRAMy CONFIG_SPIRAM_USE_MALLOCyCSI 驱动在初始化时通过 malloc 分配的结构体很可能被分配到了外部 PSRAMDW_GDMA 强制要求指针在内部 DRAM → 检查失败 → 注册拒绝导致 DW_GDMA 注册回调时检查失败user context not in internal RAM进而导致 esp_cam_new_csi_ctlr 失败摄像头流无法启动。原配置如下#DW_GDMA Configurations#CONFIG_DW_GDMA_ISR_IRAM_SAFEyCONFIG_DW_GDMA_OBJ_DRAM_SAFEy#CONFIG_DW_GDMA_ENABLE_DEBUG_LOG is not set#endof DW_GDMA Configurations更改配置如下#DW_GDMA Configurations##CONFIG_DW_GDMA_ISR_IRAM_SAFE isnotset#CONFIG_DW_GDMA_OBJ_DRAM_SAFEisnotset#CONFIG_DW_GDMA_ENABLE_DEBUG_LOG isnotset#endof DW_GDMA Configurations在编译的时候我们发现它又会改为原来的配置。配置不生效。更改如下配置把CONFIG_LCD_DSI_ISR_CACHE_SAFEy更改为如下CONFIG_LCD_DSI_ISR_CACHE_SAFE is not set这里注意开头可以不加#。编译会自动加上如下注意这个设置非常重要#CONFIG_LCD_DSI_ISR_CACHE_SAFE is not set对应更改的内容会自动删除#DW_GDMA Configurations##CONFIG_DW_GDMA_ENABLE_DEBUG_LOG is not set#endof DW_GDMA Configurations关键机制select 的强制特性Kconfig 中的 select 是一个单向强制依赖语句CONFIG_SPIRAM_XIP_FROM_PSRAM is not set CONFIG_SPIRAM_XIP_FROM_PSRAMy CONFIG_LCD_DSI_ISR_IRAM_SAFE is not set CONFIG_LCD_DSI_ISR_CACHE_SAFE is not set 主要原因---其实设置的影响配置选项核心作用做了什么主要优点Pro主要缺点 / 风险Con推荐适用场景CONFIG_SPIRAM_FETCH_INSTRUCTIONS将程序指令.text段从Flash复制到PSRAM中执行1.提升执行速度PSRAM通常快于Flash2.释放宝贵的IRAM内部快速内存3. 减少Flash擦写如OTA时的执行卡顿1. 增加启动时间拷贝耗时2. 占用PSRAM空间3. 略微增加功耗IRAM空间紧张或需要频繁进行Flash擦写操作的OTA升级项目CONFIG_SPIRAM_RODATA将只读数据.rodata段如常量、字符串从Flash复制到PSRAM1.释放内部DRAM内存大户的救星2. 减少CPU与Flash争抢SPI总线的冲突1. 增加启动时间2. 占用PSRAM空间3. 略微增加功耗工程中包含大量常量字符串、查找表导致内部内存不足时CONFIG_SPIRAM_XIP_FROM_PSRAM一键开启上述两个选项指令只读数据操作最简便一次性获得性能提升和内存释放的双重收益省去手动配置的麻烦1. 总PSRAM占用 指令大小 只读数据大小2. 不同芯片如S2与S3的Cache映射机制存在细微差异需留意常规高性能开发的首选PSRAM容量充足建议8MB及以上且追求综合性能的项目CONFIG_SPIRAM_FLASH_LOAD_TO_PSRAM将整个应用程序固件镜像全部加载到PSRAM中运行1.彻底释放Flash后续任何Flash擦写操作完全不影响CPU执行0卡顿2. 整体系统流畅度最高1.硬性门槛PSRAM容量必须 整个固件编译后的大小2. 启动时间最长3. 功耗最高占用PSRAM空间巨大拥有超大容量PSRAM如16MB且对实时性、并发操作要求极高的极端场景