General Community

Elecrow 7" ESP32-P4 (DHE04107D-1 V1.0)

PJBuzz

CrowPanel Advanced 7" ESP32-P4: notes for official support

Elecrow CrowPanel Advanced 7" (ESP32-P4, board revision V1.0) runs Tessera with a custom hardware section. It is stable on app 0.4.86 / firmware 0.54.0 / ESPHome 2026.9.0. Below is what a board file would need, plus the install steps I tested from factory firmware.

Hardware

Part Detail
SoC ESP32-P4 rev 1.3 (engineering_sample: true), 360 MHz, 16 MB flash, hex PSRAM 200 MHz
Panel 1024 x 600 MIPI-DSI, EK79007. ESPHome built-in model: WAVESHARE-ESP32-P4-WIFI6-TOUCH-LCD-7B works as is; reset GPIO41
LDO channel 3 at 2.5 V (DSI PHY), channel 4 at 2.5 V
Touch GT911 on I2C SDA GPIO45 / SCL GPIO46, reset GPIO40, interrupt GPIO42
Backlight LEDC PWM on GPIO31
Wi-Fi ESP32-C6 over SDIO, 1-bit bus: CLK GPIO18, CMD GPIO19, D0 GPIO14, D1 GPIO15, reset GPIO32 (active high)
Unused so far AHT20 at 0x38 on the touch I2C bus, LED on GPIO48

Pins come from Elecrow's ESPHome example (example/V1.0/ESPHome/Code/advance-p4-7-inch.yaml in their repo), with one correction: see below.

The SDIO bus width

Elecrow's ESPHome example declares a 4-bit SDIO bus (D2 GPIO16, D3 GPIO17). With that, the screen boots and joins Wi-Fi, then the loop task gets stuck retrying writes and the task watchdog reboots it about every 40 seconds:

H_SDIO_DRV: sdio_get_tx_buffer_num: err: 265
sdmmc_io: sdmmc_io_rw_extended: sdmmc_send_cmd returned 0x109
task_wdt: Task watchdog got triggered ... loopTask

Elecrow's own C6 update tool (host_performs_slave_ota) uses CONFIG_ESP_HOSTED_SDIO_1_BIT_BUS=y with CMD/CLK/D0/D1 only. With bus_width: 1 there are zero CRC errors. The ESPHome default of 40 MHz is fine; lowering it to 20 MHz did not help on 4-bit.

C6 firmware

  • Elecrow's factory P4 firmware uses ESP-Hosted host 2.7.0.
  • Elecrow's published C6 image (firmware upgrade guide folder, "V2.12.3") has 2.12.3 in its app header.
  • ESPHome 2026.9 builds host 2.12.12.

With C6 2.12.3 and the 1-bit bus, the screen worked without errors. I added update: platform: esp32_hosted (embedded, ESPHome's prebuilt network_adapter_esp32c6.bin 2.12.12, sha256 bad97ce8...b6c12db), and the HA update entity took the C6 to 2.12.12 in under a minute. A board file could ship this update entity, so users with older C6 firmware can update from HA.

From a much older C6 (2.3.0) the same update works, but the final activate RPC returns ESP_ERR_NOT_SUPPORTED. The image is still applied on the next C6 reset.

Suggested board section

Modelled on guition-jc1060p470.yaml plus hardware/esp32p4-c6.yaml. I borrowed BOARD_ID: jc1060p470 (same 1024 x 600 glass, 4 x 4 grid), and the editor and grid behave normally. An own board ID would only need the catalog entry.

substitutions:
  BOARD_ID: "jc1060p470"     # borrowed; same glass
  PANEL_W: "1024"
  PANEL_H: "600"
  DISPLAY_DPI: "169.548"
  GRID_COLS: "4"
  GRID_ROWS: "4"
  GRID_COLS_PORTRAIT: "2"
  GRID_ROWS_PORTRAIT: "7"
  SCREEN_MAX_TILES: "256"
  SCREEN_MAX_PAGES: "16"
  SCREEN_MAX_BAR_ITEMS: "12"
  LVGL_BUFFER_SIZE: "50%"

esp32:
  variant: esp32p4
  engineering_sample: true
  cpu_frequency: 360MHz
  flash_size: 16MB
  framework:
    type: esp-idf
    advanced:
      execute_from_psram: true
    sdkconfig_options:
      CONFIG_ESP_HOSTED_USE_MEMPOOL: "n"
      CONFIG_ESP_HOSTED_DFLT_TASK_FROM_SPIRAM: "y"
      CONFIG_FREERTOS_THREAD_LOCAL_STORAGE_POINTERS: "1"

psram:
  mode: hex
  speed: 200MHz

esp_ldo:
  - {channel: 3, id: dsi_phy_enable, voltage: 2.5V, adjustable: true}
  - {channel: 4, voltage: 2.5V}

esp32_hosted:
  variant: esp32c6
  reset_pin: GPIO32
  active_high: true
  clk_pin: GPIO18
  cmd_pin: GPIO19
  d0_pin: GPIO14
  d1_pin: GPIO15
  bus_width: 1

logger:
  tx_buffer_size: 2048
  hardware_uart: UART0

i2c:
  id: touch_bus
  sda: GPIO45
  scl: GPIO46
  frequency: 400kHz

output:
  - {platform: ledc, pin: GPIO31, id: gpio_backlight_pwm}

display:
  - platform: mipi_dsi
    id: my_display
    model: WAVESHARE-ESP32-P4-WIFI6-TOUCH-LCD-7B
    reset_pin: GPIO41
    update_interval: never
    auto_clear_enabled: false
    color_order: RGB
    dimensions: {width: 1024, height: 600}

touchscreen:
  - platform: gt911
    id: ts_touch
    i2c_id: touch_bus
    display: my_display
    update_interval: 20ms
    reset_pin: GPIO40
    interrupt_pin: GPIO42

update:
  - platform: esp32_hosted
    id: c6_update
    name: "Wi-Fi coprocessor firmware"
    type: embedded
    path: crowpanel-c6-2.12.12.bin
    sha256: bad97ce81e7fcf5f3365898f633b80941ae863db9c754d87a78f89c8f61f2e94

Packages used from the release: core, hardware/esp-idf, looks/standard, features/capacitive-touch, backlight, camera, self-test, snapshot, hotspot, plus the smart_display external component.

Tested

  • Display, touch, dimming/standby, and Wake and Sleep from HA
  • OTA for the screen, and the C6 update from HA
  • Tessera auto-pairs and allows actions once the link is stable
  • About 490 KB internal heap and 26 MB PSRAM free with 37 tiles over 5 pages
  • Not confirmed yet: camera tiles, portrait, the AHT20, audio, SD card

Install from scratch (tested from factory firmware)

  1. In /config/esphome, create:
  2. Connect the board's UART USB-C port to the HA machine.
  3. In Tessera, open Firmware & USB and install crowpanel-p4.yaml over USB. The first build on a Pi takes about 30 minutes.
  4. Tessera pairs the screen and allows actions by itself.
  5. In HA, install the "Wi-Fi coprocessor firmware" update if one is offered.
  6. Add tiles in the editor. Later updates go over Wi-Fi.

Back to stock: erase the flash, then flash Elecrow's factory_firmware/V1.0 images at 0x2000 (bootloader), 0x8000 (partition table), 0x10000 (app) and 0xb10000 (storage).

Discussion 1

Add a comment
PJBuzz

Please delete this, I will move it to the new boards page.

Add your thoughts, a screenshot or a useful link.

Markdown & basic HTML
Paste or drop images · URLs on their own line become previews0 / 10,000
Create your account to join in

We need a verified email address to reach you about your contribution. Your address stays private.

Continue with GitHub

Your draft stays in this tab. Return here after verification.