LcdTools如何编写初始化代码之--SPI指令
在点屏过程中经常会碰到需要通过SPI接口对Driver IC下初始化代码后才能点亮,常见于LVDS、RGB屏,那如何在LcdTools上编写PX01 SPI初始化代码呢?
通过LcdTools帮助文档或者博客文章LcdTools指令集 - XKphone--15002088355 - 博客园 (cnblogs.com)可以查看SPI指令的详细描述,SPI读写指令描述如下:
PX01 SPI接口定义及与屏连接方法请参考LcdTools帮助文档中的“接口描述”下“SPI接口”章节,下面对指令中的参数做一下含义描述:
1. “wire”-> <几线制>参数
用于声明SPI总线使用的是几线制,这里的线包括数据线SDI( 屏端SPI数据输入端),时钟线SCK(屏端SPI时钟输入口),片选线CS(屏端SPI片选信号输入口),数据命令选择线DCX(屏端SPI数据和命令选择输入口)四根信号线,SDO(屏端SPI数据输出口)不在这个计算范围;SPI接口通常
有两种:3线制和4线制,指令中用“WIRE3”和“WIRE4”来表示。
3线制包含的信号线有:数据线SDI,时钟线SCK,片选线CS;
4线制包含的信号线有:数据线SDI,时钟线SCK,片选线CS,数据命令选择线DCX;
3线制中屏是如何区分数据和命令的呢?有两种方式:
a) 固定9bit格式数据(即“BIT9” 9位数据模式),高位在前,低位在后,最高位为0表示命令,最高位为1表示数据,参考下面9位模式波形示意图;
9bit模式下,最高表示数据或者命令位由PG自动补,数据填写的时候不用考虑,只需填写纯8位数据即可。
b) 8bit数据格式,Drvier IC自己定义,这种方法需要在写指令时把命令数据处理好;常见的有两种(其他的不一一列举):
第一种是8bit数据模式,第一个数据固定高几位用于识别是数据还是命令;
第二种就是用多个数据来设置后面的数据格式,有点类似协议方式。
2. “bitn”-> <参数位数>
用于声明发送数据的单位位数,所以指令写入参数的时候需要注意(其中9bit模式下不需要写最高位,PX01会自动添加),有8位、9位和16位三种模式,指令中用“BIT8”、“BIT9”和“BIT16”来表示,如下图
a) 8位模式
b) 9位模式
9bit写数据:
9bit读数据:
c) 16位模式
3. “cmdlen”-> <命令个数>
用于指定命令参数的个数;在写指令SpiWrite()指令中,<命令个数>参数用于声明9bit模式或者4线制模式下发送命令参数的个数N,指令中在它之后跟随的数据就是N个命令参数;
在读指令SpiRead()指令中,<命令个数>用于声明在读取SPI数据前需要发送数据的个数N,指令中在它之后跟随的数据就是N个命令参数。
4. “cmd...” -> <命令...>
SPI发送的命令参数,在四线制或9位模式下的命令数据;其他模式下,命令数据和普通数据没区别。
5. “dat...” -> <参数...>
SPI发送的数据,在四线制或9位模式下,除命令数据外需要发送的数据。
6. “dummy”-> <dummy时钟个数>
SPI读取数据之前需要发送的空时钟数,有Drvier IC SPI读时序规则决定,请参考IC资料。
下面举几个实例用LcdTools编写SPI初始化代码:
1. 一个寄存器一个参数
查看IC料和屏电路实际配置
从IC资料可以看出SPI接口位3线制,写寄存器共写两个字节 ,第一个字节参数表示寄存器地址,第二个字节参数为寄存器配置值;用LcdTools SPI写指令实现这个数据发送可以选择8位模式,也可以选择16位模式;选择8位模式寄存器和数据分开写,选择16位模式需把寄存器字节和寄存器数据拼成16位数据。
这里从原始提供数据来看,我们选用8位模式,这样寄存器和配置参数分开,查看方便。如下图
2. 一个寄存器配置多个参数
查看IC资料了解SPI接口定义,接口配置为3线8位模式,数据格式如下图:
对寄存器写数据需用特有指令声明,第一和第二个数据固定为0xf1 0x01,第三个数据为寄存器写数据个数,纯命令写0,所以LcdTools实现如下图所示:
3. 16位寄存器地址分多次写
查看IC资料了解SPI接口定义位3线8位模式,发送数据格式如下图所示:
从数据格式可以看出,对寄存器写一个数据需分三次发送,每次发两个字节;第一个字节由于声明读写操作(R/W)、命令/数据(DCX)、高低字节识别(H/L),第二个字节为写数据;所以用LcdTools实现上述代码如下图所示:
以上只选几种典型SPI初始代码发送例子,起抛砖引玉之用,实际应用请仔细查看IC资料,理解寄存器数据设置SPI发送数据格式组成;欢迎交流!