2024-12-04 14:50:16 +08:00

6.4 KiB

Supported Targets ESP32-C5 ESP32-H2 ESP32-P4

Parallel IO simulation of SPI or I80 Interfaced LCD example

This example demonstrates how to use the Parallel IO lcd driver to simulate an I80 interface or SPI interface LCD.

The whole code is located in parlio_simulate_example_main.c, and the UI demo code is located in lvgl_demo_ui.c.

The Parallel IO peripheral is designed for high-speed parallel communication, making it particularly well-suited for scenarios that demand rapid data transfers. A typical application is LCD Display Driving. The data width can be adjusted, allowing for flexibility and optimization of data transfer efficiency based on application requirements. Currently, the driver supports setting 1-bit data width to drive the SPI interfaced screen and setting 8-bit data width to drive the I80 interfaced screen.

How to use the example

Hardware Required

  • An ESP development board
  • An SPI or Intel 8080 interfaced (so called MCU interface or parallel interface) LCD (this example uses ST7789)
  • An USB cable for power supply and programming

Hardware Connection

The connection between ESP Board and the I80 LCD is as follows:

   ESP Board                      LCD Screen
+---------------+              +----------------+
|               |              |                |
|           3V3 +------------->| VCC            |
|               |              |                |
|           GND +--------------+ GND            |
|               |              |                |
|    DATA[0..7] |<------------>| DATA[0..7]     |
|               |              |                |
|          PCLK +------------->| PCLK           |
|               |              |                |
|            CS +------------->| CS             |
|               |              |                |
|           D/C +------------->| D/C            |
|               |              |                |
|           RST +------------->| RST            |
|               |              |                |
|      BK_LIGHT +------------->| BCKL           |
|               |              |                |
+---------------+              +----------------+

The connection between ESP Board and the SPI LCD is as follows:

   ESP Board                      LCD Screen
+---------------+              +----------------+
|               |              |                |
|           3V3 +------------->| VCC            |
|               |              |                |
|           GND +--------------+ GND            |
|               |              |                |
| MOSI(DATA[0]) +------------->| MOSI           |
|               |              |                |
|          PCLK +------------->| PCLK           |
|               |              |                |
|            CS +------------->| CS             |
|               |              |                |
|           D/C +------------->| D/C            |
|               |              |                |
|           RST +------------->| RST            |
|               |              |                |
|      BK_LIGHT +------------->| BCKL           |
|               |              |                |
+---------------+              +----------------+

Especially, please pay attention to the binary signal level used to turn the LCD backlight on, some LCD modules need a low level to turn it on, while others require a high level. You can change the backlight level macro EXAMPLE_LCD_BK_LIGHT_ON_LEVEL in parlio_simulate_example_main.c.

Build and Flash

Run idf.py set-target <target-name> to select one supported target that can run this example. This step will also apply the default Kconfig configurations into the sdkconfig file.

Run idf.py menuconfig to open a terminal UI where you can tune specific configuration for this example in the Example Configuration menu.

  • LCD interface: Choose the interface to simulate in the example.
  • Allocate color data from PSRAM: Select this option if you want to allocate the LVGL draw buffers from PSRAM.
  • Pixel clock frequency (Hz): Set the pixel clock frequency for the LCD controller.
  • LCD GPIO Configuration: Select the GPIO number used by this example

Run idf.py -p PORT build flash monitor to build, flash and monitor the project. A fancy animation will show up on the LCD as expected.

The first time you run idf.py for the example will cost extra time as the build system needs to address the component dependencies and downloads the missing components from the ESP Component Registry into managed_components folder.

(To exit the serial monitor, type Ctrl-].)

See the Getting Started Guide for full steps to configure and use ESP-IDF to build projects.

Example Output

I (1542) main_task: Calling app_main()
I (1542) example: Turn off LCD backlight
I (1542) gpio: GPIO[48]| InputEn: 0| OutputEn: 1| OpenDrain: 0| Pullup: 0| Pulldown: 0| Intr:0 
I (1552) example: Initialize Parlio device
I (1562) example: Install LCD driver of st7789
I (1562) gpio: GPIO[35]| InputEn: 0| OutputEn: 1| OpenDrain: 0| Pullup: 0| Pulldown: 0| Intr:0 
I (1732) example: Turn on LCD backlight
I (1732) example: Initialize LVGL library
I (1732) example: buf1@0x48001040, buf2@0x4800cc00
I (1732) example: Register display driver to LVGL
I (1732) example: Install LVGL tick timer
I (1732) example: Create LVGL task
I (1742) example: Starting LVGL task
I (1752) example: Display LVGL animation
I (1762) main_task: Returned from app_main()

Troubleshooting

  • Can't get a stable UI when EXAMPLE_LCD_PARLIO_COLOR_IN_PSRAM is enabled.

    This is because of the limited PSRAM bandwidth, compared to the internal SRAM. You can either decrease the PCLK clock EXAMPLE_LCD_PIXEL_CLOCK_HZ from the menuconfig or increase the PSRAM working frequency SPIRAM_SPEED from the KConfig (e.g. Component-config -> ESP PSRAM -> PSRAM config -> Set PSRAM clock speed) or decrease the FPS in LVGL configuration. In addition, enabling SPIRAM_XIP_FROM_PSRAM can help increase the PCLK frequency when the Frame Buffer is allocated from the PSRAM.

For any technical queries, please open an issue on GitHub. We will get back to you soon.