小分辨率的LCD,比如QQVGA,QCIF,QVGA等,广泛应用于功能手机和穿戴设备(比如手表)上。这类小分辨率的LCD,除了支持并行接口(比如i80),一般也会支持串行接口。在实际产品中广泛运用的串行接口就是SPI,由于其频率一般可以达到几十MHz,可以满足小分辨率LCD的性能要求。
SPI接口应用在LCD上,主要是以下两种模式:
3-wire 9-bit 模式
4-wire 8-bit 模式
比如某厂商的 LCD datasheet 中有如下描述:
说明该 LCD 支持 3-wire 9-bit 和 4-wire 8-bit 模式,而两种模式下又分别有两种不同的接口,构成四种接口方式:
3-wire 9-bit 接口 I,数据输入输出共用一根线(SDA)。
4-wire 8-bit 接口 I,数据输入输出共用一根线(SDA)。
3-wire 9-bit 接口 II,数据输入(SDI )和 输出(SDO) 是独立的线。
4-wire 8-bit 接口 II,数据输入(SDI )和 输出(SDO) 是独立的线。
其中后两种接口,3-wire 用到了 SCL / SDI / SDO / CSX 四根线,4-wire 用到了 SCL / SDI / SDO / CSX / DCX 五根线,所以所谓的 3-wire,4-wire 并不是指信号线的总数目,而是指有没有 DCX 线。LCD 用 DCX 来区分传输的数据是 Data 还是 Command。4-wire 模式下,用 DCX 信号线的电平高低来指示;3-wire 模式下,用 SDA 信号线上的 D/C bit 来表示,传输实际数据前会先传输一个 D/C bit 数据位,比 8-bit 多了一个bit,所以称作 9-bit。
3-wire 9-bit 模式
3-wire 9-bit 模式下,D/C bit 包含在数据流中,如果 SPI 控制器直接支持3-wire 9-bit 模式,会自动产生 D/C bit。D/C bit 为0时,表示Command;D/C bit 为1时,表示 Data。
图一 3-wire写寄存器
图二 3-wire读寄存器
图三 3-wire写图像数据(RGB565)
4-wire 8-bit 模式
4-wire 8-bit模式下,由D/CX信号线的电平高低指示Command和Data。低电平时,表示Command;高电平时,表示Data。由于数据流中不再包含D/C bit,都是实际要传输的数据,所以传输效率相比 3-wire要高一些。
图四 4-wire写寄存器
图五 4-wire读寄存器
图六 4-wire写图像数据(RGB565)
SPI LCD 性能预估
假定主控SPI clock最高为48MHz,驱动一款QQVGA、RGB565格式的屏幕,接口为3-wire 9-bit。
QQVGA,分辨率120x160,实际产品以128x160常见;RGB565格式,每个像素占用16 bit;3-wire 9-bit 每传输一个16 bit的像素数据,额外需要两次D/C bit;算起来每传输一个像素数据需要18 bit。
这样算下来 48000000 / (128*160*18) = 130 fps
理论刷屏可以达到130帧每秒,帧率很高了。
但是还需要结合具体LCD的datasheet去确认该LCD所能支持的最大SPI clock。如下是某款LCD的 Timing Characteristics,表明它支持的SPI clock最小周期为66ns,换算成支持的最大频率大约为15MHz。
所以实际情况应该是:
15000000 / (128*160*18) = 40 fps
40帧每秒的刷屏效果也是不错的。计算出来的是理论值,实际数据会有一定偏差。
同样的clock指标下,对于QVGA屏来说,就有些吃力;再大的分辨率,就基本不能胜任了。
-----------------------------------------------------------------------------------------------------------------------
作者:bigfish99
博客:https://www.cnblogs.com/bigfish0506/
公众号:大鱼嵌入式