乐鑫技术交流
直播中

刘满贵

8年用户 1565经验值
私信 关注
[问答]

使用RGB接口时发现一直无法点亮屏幕怎么解决?

如图,在使用RGB接口时发现一直无法点亮屏幕,使用逻辑分析仪后发现DE的下降沿始终处于数据线为0的时候,需要调整DE的下降沿位置或者数据发送的时间,但是找不到相对应的接口,完整代码如下:
#include
#include
#include "unity.h"  
#include "test_utils.h"
#include "esp_rgb_lcd_panel.h"
#include "esp_lcd_panel_ops.h"
#include "soc/soc_caps.h"

#define TEST_LCD_H_RES         (480)
#define TEST_LCD_V_RES         (272)

#define TEST_LCD_VSYNC_GPIO    (42)
#define TEST_LCD_HSYNC_GPIO    (4)
#define TEST_LCD_DE_GPIO       (2)
#define TEST_LCD_PCLK_GPIO     (5)
#define TEST_LCD_DATA0_GPIO    (37)  // B0
#define TEST_LCD_DATA1_GPIO    (16)  // B1
#define TEST_LCD_DATA2_GPIO    (38)  // B2
#define TEST_LCD_DATA3_GPIO    (15)  // B3
#define TEST_LCD_DATA4_GPIO    (39)  // B4
#define TEST_LCD_DATA5_GPIO    (45)  // G0
#define TEST_LCD_DATA6_GPIO    (3)  // G1
#define TEST_LCD_DATA7_GPIO    (0) // G2
#define TEST_LCD_DATA8_GPIO    (8) // G3
#define TEST_LCD_DATA9_GPIO    (35) // G4
#define TEST_LCD_DATA10_GPIO   (18) // G5
#define TEST_LCD_DATA11_GPIO   (20) // R0
#define TEST_LCD_DATA12_GPIO   (14) // R1
#define TEST_LCD_DATA13_GPIO   (21) // R2
#define TEST_LCD_DATA14_GPIO   (13) // R3
#define TEST_LCD_DATA15_GPIO   (47) // R4
#define TEST_LCD_DISP_EN_GPIO  (41)

void app_main()
{
#define TEST_IMG_SIZE (100 * 100 * sizeof(uint16_t))
    uint8_t *img = malloc(TEST_IMG_SIZE);
    TEST_ASSERT_NOT_NULL(img);

    esp_lcd_panel_handle_t panel_handle = NULL;
    esp_lcd_rgb_panel_config_t panel_config = {
        .data_width = 16,
        .disp_gpio_num = TEST_LCD_DISP_EN_GPIO,
        .pclk_gpio_num = TEST_LCD_PCLK_GPIO,
        .vsync_gpio_num = TEST_LCD_VSYNC_GPIO,
        .hsync_gpio_num = TEST_LCD_HSYNC_GPIO,
        .de_gpio_num = TEST_LCD_DE_GPIO,
        .data_gpio_nums = {
            TEST_LCD_DATA0_GPIO,
            TEST_LCD_DATA1_GPIO,
            TEST_LCD_DATA2_GPIO,
            TEST_LCD_DATA3_GPIO,
            TEST_LCD_DATA4_GPIO,
            TEST_LCD_DATA5_GPIO,
            TEST_LCD_DATA6_GPIO,
            TEST_LCD_DATA7_GPIO,
            TEST_LCD_DATA8_GPIO,
            TEST_LCD_DATA9_GPIO,
            TEST_LCD_DATA10_GPIO,
            TEST_LCD_DATA11_GPIO,
            TEST_LCD_DATA12_GPIO,
            TEST_LCD_DATA13_GPIO,
            TEST_LCD_DATA14_GPIO,
            TEST_LCD_DATA15_GPIO,
        },
        .timings = {
            .pclk_hz = 5000000,
            .h_res = TEST_LCD_H_RES,
            .v_res = TEST_LCD_V_RES,
            .hsync_back_porch = 43,
            .hsync_front_porch = 4,
            .hsync_pulse_width = 3,
            .vsync_back_porch = 12,
            .vsync_front_porch = 4,
            .vsync_pulse_width = 2,
            .flags.de_idle_high = 0,
            .flags.pclk_idle_low = 1,
        },
        .flags.fb_in_psram = 1,
        .flags.disp_active_low = 0,
    };
    // Test stream mode and one-off mode
    for (int i = 0; i < 2; i++) {
        panel_config.flags.relax_on_idle = i;
        TEST_ESP_OK(esp_lcd_new_rgb_panel(&panel_config, &panel_handle));
        TEST_ESP_OK(esp_lcd_panel_reset(panel_handle));
        TEST_ESP_OK(esp_lcd_panel_init(panel_handle));

        for (int i = 0; i < 200; i++) {
            uint8_t color_byte = esp_random() & 0xff;
            int x_start = esp_random() % (TEST_LCD_H_RES - 100);
            int y_start = esp_random() % (TEST_LCD_V_RES - 100);
            memset(img, color_byte, TEST_IMG_SIZE);
            esp_lcd_panel_draw_bitmap(panel_handle, x_start, y_start, x_start + 100, y_start + 100, img);
        }
        TEST_ESP_OK(esp_lcd_panel_del(panel_handle));
    }
    free(img);
#undef TEST_IMG_SIZE
}
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     

回帖(1)

LL-LING宁

2024-6-19 16:37:16
根据给出的代码片段,我们可以按照以下步骤进行排查和解决问题:

1. 检查硬件连接:确保RGB接口的硬件连接正确,包括数据线、时钟线、DE线等。

2. 检查初始化代码:确保LCD面板的初始化代码正确,包括分辨率、颜色深度等参数。

3. 调整DE线:根据逻辑分析仪的结果显示,DE的下降沿位置不正确。我们需要在代码中找到控制DE线的部分,然后调整DE的下降沿位置。这可能涉及到修改时序控制代码。

4. 调整数据发送时间:如果调整DE线的位置后问题仍未解决,我们可以尝试调整数据发送的时间。这可能涉及到修改数据发送的起始点或者数据发送的延迟。


举报

更多回帖

发帖
×
20
完善资料,
赚取积分