音视频相关

  • audio
  • video
  • MIC
  • I2S
  • PDM
  • display
  • camera
  • MIPI-CSI
  • ESP32-P4
  • MIPI-DSI
  • v3.2
  • esp_lcd_new_dsi_bus
  • task_wdt
  • CONFIG_HAL_WDT_USE_ROM_IMPL
  • PSRAM
  • CONFIG_SPIRAM_SPEED_200M
  • ILI9881C
  • JD9365
  • lane_bit_rate_mbps
  • 2-lane
  • 看门狗超时
  • 显示无图像
  • 时钟源

有哪款模组能够直接驱动喇叭进行音频播放的?

ESP32、ESP32-S2、ESP32-S3、ESP32-C3 等 SoC 可以通过 PWM(LEDC 外设)或 DAC 方式直接输出音频信号,连接简单的喇叭或耳机进行播放,但音量较小,适合基础应用。官方示例中,喇叭可直接连接到 GPIO,如 ESP32 的 GPIO25/26,ESP32-S2/S3/C3 的 GPIO1/2,并串联 47Ω 电阻后接喇叭或耳机即可,以下是例程连接:https://github.com/espressif/esp-iot-solution/blob/master/examples/audio/wav_player/README.md

需要注意的是,绝大多数 ESP32 系列模组本身并不直接集成功放芯片,直接驱动大功率喇叭时音量有限,若需更高音量或更好音质,建议选用带有外部音频功放的开发板或在模组外围增加功放电路。

项目中有 ES7210 和 NS4168 两个外设,两个外设的通道数,采样率和采集位深是一样的。两个外设可以共用 BCLK 和 LRCK 吗?

ES7210是输入,NS4168是输出,I2S是可以同时支持输入输出的,数据信号传输相反,其它信号可以共用;只需要建立一个通道, esp32s3的 I2S 是支持 全双工操作的。具体可以参考这个文档 https://docs.espressif.com/projects/esp-idf/zh_CN/latest/esp32s3/api-reference/peripherals/i2s.html#id17

ESP32-S3 模组可以直接连接并驱动 MIC 吗?

ESP32-S3 模组可以通过 I2S 接口直接连接并驱动 I2S 数字麦克风。

如果使用 PDM 数字麦克风,也可以通过 I2S 的 PDM 模式,直接连接时钟线 CLK 和数据线 DATA 两根信号线。

ESP32-S3 模组不能直接连接并驱动模拟麦克风。模拟麦克风需要外接 Codec 芯片或其他模拟音频前端电路。

ESP32-S3R2 驱动 RGB565 接口屏幕时,PCLK 最高建议配置为多少?如何提升刷新帧率?

ESP32-S3R2 驱动 RGB565 接口屏幕时,PCLK 建议不超过 11 MHz。

如需提升刷新帧率,可以启用 bounce buffer 模式,并在项目配置中开启:

CONFIG_ESP32S3_DATA_CACHE_LINE_64B=y

ESP-IDF v5.5.2 下,WT99P4C5-S1 运行 video_lcd_display 时为什么会出现 MIPI-CSI 摄像头检测失败?

典型报错如下:

I (1512) app_lcd: Install LCD driver of ek79007
I (1517) ek79007: version: 1.0.2
E (1700) sccb_i2c: s_sccb_i2c_transmit_receive_reg_a16v8(112): faled to transmit receive
E (1701) sc2336: Get sensor ID failed
E (1701) esp_video_init: failed to detect MIPI-CSI camera sensor with address=30
E (1708) app_video: Open video failed
E (1711) app_main: video cam open failed
I (1715) main_task: Returned from app_main()

video_lcd_display 默认使用 SC2336 摄像头驱动初始化,并通过 SCCB/I2C 读取 Sensor ID。如果实际连接的摄像头模组不是 SC2336,Sensor ID 读取会失败,随后触发 MIPI-CSI 摄像头检测和视频打开失败。

请根据实际摄像头传感器型号,在 menuconfig 中选择对应的 Camera Sensor Configuration。配置路径和操作说明可参考 video_lcd_display 示例文档。

当前示例均按 SC2336 摄像头适配。如果使用其他传感器,还需要完成相应驱动和参数适配。

在同一 PCB 上将 ESP32-P4 由 v1.x 替换为 v3.2,调用 esp_lcd_new_dsi_bus() 初始化 MIPI DSI LCD 时触发任务看门狗超时,原因是什么?如何解决?

现象描述:

工程使用 ESP-IDF v5.5.4,并已按 ESP32-P4 v3.2 的要求调整外围电路。原 MIPI DSI LCD 在 ESP32-P4 v1.x 上可正常显示,替换芯片版本后,程序在 esp_lcd_new_dsi_bus() 处触发任务看门狗超时。修改 CONFIG_HAL_WDT_USE_ROM_IMPL 配置项或将 ESP-IDF 升级至 v6.0.2 后,问题仍然存在。

E (7001) task_wdt: Task watchdog got triggered. The following tasks/users did not reset the watchdog in time:
E (7001) task_wdt:  - IDLE (CPU 0)
E (7001) task_wdt: Tasks currently running:
E (7001) task_wdt: CPU 0: main
E (7001) task_wdt: CPU 1: IDLE1
E (7001) task_wdt: Print CPU 0 (current core) backtrace

Backtrace: 0x4ff2ed24:0x4ff64b20 0x4ff23318:0x4ff64b50 0x4ff23366:0x4ff64b60 0x4ff2f192:0x4ff64b70 0x4ff3253c:0x4ff64b80 0x48081e04:0x4ff64bf0 0x4803b364:0x4ff64ca0 0x4803bad0:0x4ff64d50 0x480283c2:0x4ff64d60 0x48157d82:0x4ff64d80 0x4ff2eb40:0x4ff64d90 0x00000000:0x00000000

--- 0x4ff2ed24: vPortClearInterruptMaskFromISR at D:\work\code\esp-idf-v5.5.4\components\freertos\FreeRTOS-Kernel\portable\riscv\port.c:515
--- 0x4ff23318: crosscore_int_ll_trigger_interrupt at D:\work\code\esp-idf-v5.5.4\components\hal\esp32p4\include\hal\crosscore_int_ll.h:36
--- (inlined by) esp_crosscore_int_send at D:\work\code\esp-idf-v5.5.4\components\esp_system\crosscore_int.c:120
--- 0x4ff23366: esp_crosscore_int_send_yield at D:\work\code\esp-idf-v5.5.4\components\esp_system\crosscore_int.c:126
--- 0x4ff2f192: vPortYield at D:\work\code\esp-idf-v5.5.4\components\freertos\FreeRTOS-Kernel\portable\riscv\port.c:649
--- 0x4ff3253c: vTaskDelay at D:\work\code\esp-idf-v5.5.4\components\freertos\FreeRTOS-Kernel\tasks.c:1617
--- 0x48081e04: esp_lcd_new_dsi_bus at D:\work\code\esp-idf-v5.5.4\components\esp_lcd\dsi\esp_lcd_mipi_dsi_bus.c:97
--- 0x4803b364: ui_manager_display_new_ft8656 at D:\work\code\esp_test\esp32p4_camera\main\ui\ui_manager.c:324
--- 0x4803bad0: ui_manager_init at D:\work\code\esp_test\esp32p4_camera\main\ui\ui_manager.c:486
--- 0x480283c2: app_main at D:\work\code\esp_test\esp32p4_camera\main\main.c:247
--- 0x48157d82: main_task at D:\work\code\esp-idf-v5.5.4\components\freertos\app_startup.c:209
--- 0x4ff2eb40: vPortTaskWrapper at D:\work\code\esp-idf-v5.5.4\components\freertos\FreeRTOS-Kernel\portable\riscv\port.c:258

原因分析:

ESP32-P4 芯片版本升级后,新版芯片的默认时钟源发生变化,原有 MIPI DSI LCD 初始化参数与新版芯片不匹配,因此在创建 DSI 总线时触发超时。

解决方案:

参考最新的 ESP-IDF MIPI DSI LCD 示例检查初始化配置,并根据新版芯片的配置要求调整以下结构体参数:

esp_lcd_dsi_bus_config_t
esp_lcd_dbi_io_config_t
esp_lcd_dpi_panel_config_t

参考示例:https://github.com/espressif/esp-idf/blob/bf4218a71fd5009ec6f9648e49721a5e0dc9ea35/examples/peripherals/lcd/mipi_dsi/main/mipi_dsi_lcd_example_main.c#L229

ESP32-P4 驱动 MIPI-DSI 屏幕无图像显示且无错误日志,如何排查?

原因分析:

MIPI-DSI 屏幕驱动需要 PSRAM 提供较高带宽;带宽不足、信号线连接错误或屏幕 Lane 配置与 ESP32-P4 能力不匹配时,可能出现无图像但无错误日志的现象。

解决方案:

  1. 检查 SPIRAM 时钟速率是否配置为 200 MHz 及以上(CONFIG_SPIRAM_SPEED_200M=y)。
  2. 检查 DSI 数据引脚(DSI_DATAN0/DSI_DATAP0)和时钟引脚(DSI_CLKN/DSI_CLKP)与屏幕的物理连接是否正确。
  3. ESP32-P4 的 DSI 接口最多支持 2-lane,单 lane 最高速率为 1.5 Gbps。对于默认配置为 4-lane 的屏幕(如 ILI9881C、JD9365),应修改初始化寄存器切换为 2-lane。
  4. 将 lane_bit_rate_mbps 设置为不超过 1500,建议不低于 480;实际值根据分辨率、刷新率、色深和 Lane 数量计算,并预留约 20% 余量。