我正在尝试从 ESP32-S3 开发 VGA 驱动程序。
我的示意图类似于 FabGL 库 。我有 8 个输出:
1 个输出 V-Sync
1 个输出 H-Sync
2 个输出红色
2 个输出绿色
2 个输出蓝色
我在 ESP32 WROOM 上测试过,它工作正常。
在 ESP32-S3 上,我无法重用 fabGL 代码(FalbGL 使用具有 LCD 功能的 I2S 模块)。为了在 S3 上工作,我重复使用了“rgb_panel”示例
本例绘制散点图。
我设置了良好的 IO 和时序640*480:
我在 PSRAM 中使用两个帧缓冲区配置驱动程序。
但是陈列很脏。我看到了散点图,但它在闪烁和移动,背景不干净。
我尝试使用 LCD 菜单配置中的“在 VSYNC 中重新启动传输”。好一点了,散点图居中,但是信号不干净。
我用示波器检查了 vsync 和 hsync。时机很好(前廊,后廊,...)
别的,我试过没有 LVGL。我直接在帧缓冲区中写了一个模式。但我不知道如何切换帧缓冲区。要显示我的模式,我必须写入两个帧缓冲区。
代码:
// Code OK, but why I must write in the two frame buffer ??
void *buf1 = NULL;
void *buf2 = NULL;
ESP_LOGI(TAG, "Use frame buffers as LVGL draw buffers");
ESP_ERROR_CHECK(esp_lcd_rgb_panel_get_frame_buffer(panel_handle, 2, &buf1, &buf2));
memset(buf1, 0x01, EXAMPLE_LCD_H_RES * EXAMPLE_LCD_V_RES);
memset(buf2, 0x01, EXAMPLE_LCD_H_RES * EXAMPLE_LCD_V_RES);
vTaskDelay(pdMS_TO_
tiCKS(1000));
memset(buf1, 0x02, EXAMPLE_LCD_H_RES * EXAMPLE_LCD_V_RES);
memset(buf2, 0x02, EXAMPLE_LCD_H_RES * EXAMPLE_LCD_V_RES);
vTaskDelay(pdMS_TO_TICKS(1000));
memset(buf1, 0x04, EXAMPLE_LCD_H_RES * EXAMPLE_LCD_V_RES);
memset(buf2, 0x04, EXAMPLE_LCD_H_RES * EXAMPLE_LCD_V_RES);
vTaskDelay(pdMS_TO_TICKS(1000));
你有想法吗?