esphome / esphome/feature-requests
ESP32S3 RPI_DPI_RGB component should allow "serial" RGB displays
- Dominant language
- No language data
- Stars
- 450
- Forks
- 29
- PR merge metrics
- No merged PRs in 30d
Description
**Describe the problem you have/What new integration you would like**
Current RPI_DPI_RGB component only makes use of parallel RGB displays, but there's also support from the IDF itself of the so-called "serial RGB" displays. Such displays use a parallel bus, but they require to latch the colors in separate clocks, for instance, an 8 bit bus that will provide the RED pixel data (8 bits), then the GREEN pixel data (another 8 bits), and finally the BLUE pixel data (another 8 bits), consuming 3 clocks per pixel. This works transparently for the user, since this is taken into account inside the IDF. In order to use this feature, when configuring the panel, the `esp_lcd_rgb_panel_config_t` structure should contain its member `data_width` set to a lower number than the `bits_per_pixel` member. For instance, `data_width` set to 8, while `bits_per_pixel` set to 24 (i.e. RGB888). This would mean you don't need to specify the red/green/blue pins separately, just the N pins used in the `data_width`.
**Please describe your use case for this integration and alternatives you've tried:**
A lot of LCD modules use this, and it's already implemented in IDF, so it's trivial to make use of.
**Additional context**
I'm using a A035QN05 display which is a 320*240, "serial RGB", with the following initialization code:
```
esp_lcd_rgb_panel_config_t panel_config = {
.data_width = 8, // RGB888
.bits_per_pixel = 24,
.num_fbs = 1,
.dma_burst_size = 64,
.clk_src = LCD_CLK_SRC_DEFAULT,
.disp_gpio_num = -1,
.pclk_gpio_num = GPIO_NUM_8,
.vsync_gpio_num = GPIO_NUM_46,
.hsync_gpio_num = GPIO_NUM_3,
.de_gpio_num = -1,
.data_gpio_nums = {
GPIO_NUM_45,
GPIO_NUM_21,
GPIO_NUM_14,
GPIO_NUM_13,
GPIO_NUM_12,
GPIO_NUM_11,
GPIO_NUM_10,
GPIO_NUM_9,
},
// The timing parameters should refer to your LCD spec
.timings = {
.pclk_hz = 27000000UL,
.h_res = 320,
.v_res = 240,
.hsync_back_porch = 75,
.hsync_front_porch = 686,
.hsync_pulse_width = 1,
.vsync_back_porch = 21,
.vsync_front_porch = 2,
.vsync_pulse_width = 1,
},
.flags.fb_in_psram = true,
};
```
As you can see, there's not much deviation from a standard true "parallel" RGB display, just less pins declared, and the different values in `data_width` and `bits_per_pixel`
Contributor guide
No contributing guide indexed for this repository
Assessment
This issue has not been assessed yet.