ESP32并口屏幕和串口屏幕下帧率的对比

前言

在嵌入式开发中,屏幕刷新率是用户体验的“第一生命线”。我一直好奇,为了追求高帧率,我们是应该把 60MHz 的 SPI“优化到极致”,还是应该直接“升维打击”,采用 8 位并口?为了搞清楚这个问题,我决定自费购买硬件来进行一次“原始对决”

测试项目

我特意选了两个‘不同维度’的测试:

  • TFT_eSPI 的 graphicstest 是一个‘原始I/O’测试,它只测量‘总线’的吞吐速度。
  • lv_demo_music 是一个‘真实世界’测试,它测量的是‘CPU渲染 + 总线I/O’的‘综合性能’

测试结果

运行LVGL自带的lv_demo_music

对照组序号 屏幕参数 ESP32运行频率 LVGL缓冲参数 SPI速率 TFT_eSPI版本 LVGL版本 帧率
1 240x240 1.54寸 SPI LCD 240MHz 240*120 启用DMA,未使用双缓冲 60MHz 2.3.70 8.1.1-dev 26帧
2 240x240 1.33寸 8位并口 LCD 240MHz 240*120 未使用双缓冲 \ 2.3.70 8.1.1-dev 28帧

感觉帧率差异不是很大的样子.

运行TFT_eSPI自带的Viewport_graphicstest

对照组序号 屏幕参数 ESP32运行频率 SPI速率 TFT_eSPI版本
1 240x240 1.54寸 SPI LCD 240MHz 60MHz 2.3.70
2 240x240 1.33寸 8位并口 LCD 240MHz \ 2.3.70

运行时候明显感觉到并口的绘制速度更快,不过还是得数据说话,于是有如下Log

8位并口结果

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
TFT_eSPI library test!
Benchmark Time (microseconds)
Screen fill 53073
Text 21126
Lines 36424
Horiz/Vert Lines 10469
Rectangles (outline) 5918
Rectangles (filled) 122742
Circles (filled) 28151
Circles (outline) 22372
Triangles (outline) 14111
Triangles (filled) 46193
Rounded rects (outline) 16475
Rounded rects (filled) 127122
Done!

串口结果

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
TFT_eSPI library test!
Benchmark Time (microseconds)
Screen fill 102725
Text 12506
Lines 38321
Horiz/Vert Lines 9293
Rectangles (outline) 6594
Rectangles (filled) 234378
Circles (filled) 30350
Circles (outline) 16884
Triangles (outline) 12893
Triangles (filled) 79688
Rounded rects (outline) 11730
Rounded rects (filled) 240258
Done!

并口驱动情况下绘制时间几乎是串口驱动绘制时间的一半.

果然还是有提升的.

至于为什么在LVGL中拉不开差距,经过群友Principle点拨后意识到,运行LVGL时候CPU性能方面出现了瓶颈,我的ESP32是初代版本,如果换成最新的ESP32 S3则会拉开差距.

结论分析:CPU 瓶颈 vs I/O 瓶颈

从 TFT_eSPI(原始I/O)的日志看,结果一目了然:并口几乎快了一倍(例如 Screen fill 53,073μs vs 102,725μs)。
这证明了‘并口总线’存在明显的物理优势。
那么,为什么在‘真实世界’(LVGL)中,差距却微乎其微(26 vs 28 帧)? 这正揭示了 ESP32(初代)的真正瓶颈:CPU 渲染速度
LVGL 的‘lv_demo_music’效果需要 CPU 大量计算,导致 CPU 100% 满载,而屏幕总线(无论是 SPI 还是并口)其实都在‘空闲等待’。

总结: 所以如果您的项目是‘重渲染’的,盲目升级屏幕接口是没用的,那就应该首先升级MCU(例如 ESP32-S3).

拓展阅读

后来我刷到过P佬的文章, 他从芯片维度去对比lvgl效果. 深入分析了一些CPU, Flash相关的内容, 受益匪浅.
推荐各位读者也去拜读一下((注:P佬博客的图床似乎挂了,但不影响文字的含金量))
AT32F403A试玩-移植LVGL并与ESP32-S3对比

ESP32并口屏幕和串口屏幕下帧率的对比

https://chaosgoo.com/2022/02/12/Parallel-LCD-VS-SPI-LCD/

作者

Chaos Goo

发布于

2022-02-12

更新于

2025-11-29

许可协议