图像刷屏模式
3 Mar 2025
Read time: 2 minute(s)
QSPI 控制器支持 SPI LCD 屏的刷屏模式,允许在 SPI 屏初始化完成后,通过使能 SPI 刷屏模式,由硬件根据屏幕的配置信息和命令参数,使用内部 DMA 自动从指定的内存区域发送一帧 RGB 图像数据。这一过程利用内部 Direct Memory Access (DMA) 的功能,有效地从指定的内存区域传输数据,而无需增加 CPU 的额外负担。
LCD 屏幕包含以下关键区域,如图所示:
-
VSW 区域:列同步宽度
-
VBP 区域:列扫描后肩
-
有效区域:图像实际显示区域
-
VFP 区域:列扫描前肩
-
HSW 区域:行同步宽度
-
HBP 区域:行扫描后肩
-
HFP 区域:行扫描前肩
图像关键区域时序配置如下:
VSW、VBP、VFP 时序:按照屏的使用手册配置相关寄存器的行数量。
HSW、HBP、HFP 时序:由屏的驱动芯片自动控制。
图像传输顺序
QSPI 控制器按照 VSW 行 → VBP 行 → 有效图像行 → VFP 行的特定顺序传输每一帧图像,确保 LCD 屏幕正确显示图像。图像传输时序如下:
通过相应的命令寄存器配置行命令,行命令由 32 bits 组成,包含命令和地址。硬件自动将行命令填充到 FIFO:
-
对于 VSW、VBP、VFP 行,只需要传输行命令。
刷屏模式配置
SPI 刷屏模式配置流程如下:
- 配置 SPI_CFG.DISP_EN 位置 1,使能刷屏模式。
- 通过 SPI_DISP_HIGH 寄存器,配置 VBP、VFP 和有效图像区的行高,VSW 只有一行,不用配置高度。
- 通过 SPI_DISP_WIDTH 寄存器,配置有效图像区的宽度。
- 通过命令寄存器配置每个区域的行命令。
行命令可以指导硬件如何正确地驱动显示屏。
- 配置 SPI_DISP_RTIME 寄存器,设定 VSW、VBP、VFP
区行命令的附加时间值,该值应该大于每行的刷新时间。
设定合理的附加时间值,可确保 VSW、VBP、VFP 区行命令的执行时间充足,避免因时序问题导致的画面显示异常。
- 配置 IDMA 发送地址和长度寄存器,使能 IDMA 发送通道,详情可查看编程指南。
- 设置 STRAT 位为 1,硬件自动开始传输一帧数据。每个区域的行传输完成后,DISP_DTO 中断状态位置 1。每一帧传输完成,TC 中断状态位置 1。
- 传输完一帧数据后,重复配置步骤 2、3、6、7,软件控制帧连续传输。
硬件连续帧传输模式
SPI 刷屏模式配置流程如下:
- 配置 SPI_CFG.DISP_EN 位置 1,使能刷屏模式。
- 通过 SPI_DISP_HIGH 寄存器,配置 VBP、VFP 和有效图像区的行高,VSW 只有一行,不用配置高度。
- 通过 SPI_DISP_WIDTH 寄存器,配置有效图像区的宽度。
- 通过命令寄存器配置每个区域的行命令。
- 配置 SPI_DISP_RTIME 寄存器,设定 VSW、VBP、VFP 区行命令的附加时间值,该值应该大于每行的刷新时间。
- 配置 0x0C0 SPI_DISP_FTIME 寄存器,设定每帧数据之间的等待时间,该值应参考屏规格书。
- 配置 DISP_DMC 位域,对于 RGB565 格式的图像数据,Quad 模式下需要在 CMD 和 DATA 之间插入 dummy 时钟数。
- 配置 IDMA 发送地址和长度寄存器,使能 IDMA 发送通道,详情可查看编程指南。
- 设置 DISP_RESTART 位为 1,硬件执行连续帧传输。每个区域的行传输完成后,DISP_DTO 中断状态位置 1。每一帧传输完成,TC 中断状态位置 1。传输过程中可以随时修改 IDMA_TX_ADDR 的值,当前帧传输完成后,硬件会自动切换到目标图像缓存的地址。
在系统带宽紧张的场景下,可以选配控制器外部 2KB SRAM 作为发送缓存使用,在 DISP_RESTART 使能之前,按如下方式配置:
- 配置 EXT_TXF_EN 位为 1,使能使用外部 SRAM;配置 DISP_URGENT_EN 位为 1,使能 urgent 信号。
- 配置 DISP_VLDL_DRQ_SEL 位域为 1 ,推荐使用模式 1 ,在行传输间隔时间内控制器发送 IDMA 请求,当发送缓存数据量大于等于配置的水位值时,发起下一笔行传输。
- 配置 DISP_TRANS_TRIG_WL 位域,选择合适的触发水位,当一笔行传输结束后,发送缓存的水位大于等于该值,发起新的行传输。
- 配置 DISP_URGENT_THRL 和 DISP_URGENT_THRH 位域,选择 urgent 信号有效和无效的触发阈值。当发送缓存的数据量小于等于 DISP_URGENT_THRL 值,urgent 信号有效;当发送缓存的数据量大于等于 DISP_URGENT_THRL 值,urgent 信号无效。