乐鑫技术交流
直播中

申根换

7年用户 1594经验值
私信 关注
[问答]

可以从ESP32-S3开发VGA驱动程序吗?

我正在尝试从 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));
你有想法吗?
                        

回帖(3)

王荣

2023-3-2 15:18:52
可能是带宽问题。640x480x16bit 占用大约 600K,所以你不能将它存储在内部 RAM 中,所以我想你正在使用 PSRAM。640x480x60Hz@16bit 是 36MBit/秒。这足够高,四路 PSRAM 无法处理它,因此您可能需要八路 PSRAM。
举报

刘琨

2023-3-2 15:19:13
我使用 ESP32-S3-WROOM-1-N8R8 模块(来自 ESP32-S3-DevKitC-1-N8R8)。
两个帧缓冲区存储在八进制 PS RAM 中:640*480@60Hz@8bits (300 ko / FB)
你知道八进制 PS RAM 的最大带宽吗?
举报

陈畅妮

2023-3-2 15:19:19
如果配置正确,我认为八进制 PSRAM 可以达到 80MHz DDR,换句话说就是 160MByte/second 或 1.2GBit/second。
举报

更多回帖

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