SPI初始化LCD以及参数设置问题

简介:
做一个2440上LCD的驱动
原来平台上用的LCD型号为:WXCAT35
现在由于出货问题换了一款替代的LCD,型号为:NMA35QV65问题描述:
看这两款屏的资料发现,硬件引脚定义完全一样,但资料上都介绍需要加一个驱动ICHX8238 ,
该驱动IC与处理器通过SPI总线连接
但是硬件上并没有该驱动IC,也没连接SPI总线,
但是可以点亮原屏WXCAT35(一硬件高手说这类屏可以使用默认模式,不需要接SPI)
点不亮NMA35QV65,现象是背光亮,屏亮(全白),进入BOOT和CE系统没有图象!请教:
1、在Kernel中的OAL层有对LCD的初始化配置InitDisplay()这个是我需要修改的部分
在这里主要是对2440的5个LCD寄存器配置(LCDCON1----LCDCON5
在s2440.h中对LCD的几个时序进行了初始化
#define VBPD (15) //垂直同步信号后肩Vsync back-porch
#define VFPD (12) //垂直同步信号前肩Vsync front-porch
#define VSPW (3) //垂直同步信号脉宽Vsync pulse width

#define HBPD (44) //水平同步信号后肩Hsync back-porch
#define HFPD (30) //水平同步信号前肩Hsync front-porch
#define HSPW (20) //水平同步信号脉宽Hsync pulse width
请问这几个值对屏的显示有作用吗?是不是只是对屏显示的图片的横竖偏移有影响?
2、在WXCAT35(已经被点亮的原屏)的datasheet中
有个列表详细列出了DCLK、HSYNC、VSYNC等参数的典型值
但是没被点亮的这款屏(NMA35QV65)的datasheet上不但没有这个列表
从时序图上看,完全定义了另外的一些值,不知道怎么对应上这几个值
3、请问除了这几个信号外,我还需要注意到哪几个信号??
公式:VCLK = HCLK / ((CLKVAL + 1) * 2)
其中VCLK、HCLK怎么查?作用是什么
DCLK指的是什么?作用是什么
还有PCLK是什么?作用是什么
pclk = (HFPD+HOZVAL+HBPD+HSPW)*(VFPD+LINEVAL+VBPD+VSPW)*60
这个公式又能说明什么呢?
VCLK = DCLK/HOZVAL/LINEVAL
HCLK = DCLK/LINEVAL
这个公式是否正确?
还有行列同步、de信号是指的什么?有什么作用呢???
这里问的作用请高手用通俗的解释描述一下跟实际驱动程序的关系,小弟在此谢过啦!!
谢谢各位啦!!!

===========================================================

1、在Kernel中的OAL层有对LCD的初始化配置InitDisplay()这个是我需要修改的部分
有影响,不正确的话会显示不正常,包括你所说的横竖偏移
但是一般display driver里会重新初始化一下
2. 在WXCAT35(已经被点亮的原屏)的datasheet中
你可以根据时序图和时序表格计算一下那几个值是多少

-------------------------------------------------------------------------------------

3、请问除了这几个信号外,我还需要注意到哪几个信号??
公式:VCLK = HCLK / ((CLKVAL + 1) * 2)
其中VCLK、HCLK怎么查?作用是什么

VCLK是像素时钟 ,HCLK是cpu里的一个时钟(这个请参看cpu手册)

DCLK指的是什么?作用是什么
还有PCLK是什么?作用是什么

这两个应该都是指像素时钟,只是名称不一样?!

pclk = (HFPD+HOZVAL+HBPD+HSPW)*(VFPD+LINEVAL+VBPD+VSPW)*60
这个公式又能说明什么呢?

就是计算你的像素时钟的公式

---------
HFPD
HOZVAL:320
HBPD
HSPW
---------
VFPD
LINEVAL:240
VBPD
VSPW
---------
60:指每秒显示60帧,一帧就是一个完整的图像(320*240*24bit)
---------


VCLK = DCLK/HOZVAL/LINEVAL
HCLK = DCLK/LINEVAL
这个公式是否正确?

这个等你看了cpu手册后就明白对不对了

还有行列同步、de信号是指的什么?有什么作用呢???

hsync,vsync,上面的hspw和vspw就是这个信号的宽度。
de是data enable
这些在cpu手册里应该都有图例可看

---------------------------------------------------------------------------------

我大略看了一下ICHX8238 这颗ic

如果你不用spi来初始化,你的cpu的VCLK应该设置成6.5MHz的。

---------------------------------------------------------------------------------

1、这几个值,在我看到的屏中,都只是和屏显示的漂移情况有关。
2、DCLK在数据手册里有了,是6.5MHz(典型值),HSYNC、VSYNC可以计算出来的。
The VSYNC and HSYNC pulse generation depends on the configurations of both the HOZVAL field and the LINEVAL field in the LCDCON2/3 registers. The HOZVAL and INEVAL can be determined by the size of the LCD panel according to the following equations
这个你参考里面的时序图:HSYNC = DCLK / (320 + (31~80)), VSYNC = HSYNC / (240 + ( 3 + ( >2 ))).红色部分是根据数据手册得到的。
3、首先我得从新更正下我的说法。
VCLK应该是和DCLK同概念的;最基本的时钟信号,不用说了。
而HSYNC、VSYNC,确切的讲应该是行、场同步(行列同步这个说法不够准确);行时钟是用来控制换行显示的(320),场时钟是刷新一个画面(320*240)。
HCLK是根据你的时钟部分配置出来的,这个你可以不用配置,让它固定,通过配置clkval来得到VCLK即可。怎么得到HCLK,你可以通过改变clkval的值,测试出VCLK,能计算出你配置的HCLK是多少。
DE只有在DE模式下有用,这个信号你只需配置2440的LCD寄存器为DE模式即可,不用你控制。

至于VBPD、VFPD、VSPW、HBPD。。。。这几个,你根据数据手册可以看的出来,HBPD、HFPD、HSPW三个的和在31~80,VBPD、VFPD、VSPW的和大于5(3+2)。

------------------------------------------------------------------------------------

只要确定了行频,就可以推算出点时钟及其他参数,只要行场同步对了,图像肯定可以出来,只需微调位置就可以了。
除了典型值,还有一些经验值,只要在手册给的范围内就可以了,并不一定要非常精确!
------------------------------------------------------------------------------------

InitDisplay()
里面的代码是图形控制器的驱动,而图形控制器的输出信号是直接控制LCD(玻璃)用的,输入信号是在CPU这边的。
问题1中,设置的就是控制器到LCD的行场扫描信号用的。

问题3中。
那些clock是控制器和LCD之间用的。就是时钟和扫描信号,能不能显示就靠这几各clock。
前面叫你对时序,也是要你量这几各信号是不是和时序图提供的一直。

PS:
有时候,图形控制器允许的输出范围和玻璃能够正常工作的输入范围没有交集,此时,这两个东西合在一起肯定不会工作。
如,控制器最大允许一行输出1000个CLOCK,而玻璃一行接收的最少的clock数量是1500,那么这两个东西不能一起使用

------------------------------------------------------------------------------------

这两个屏的DCLK典型值都是一个是6.4一个是6.5,觉得CLK这部分应该没问题了
但是现在的问题是
已经点亮的那个屏(WXCAT35)有个表显示的给出了
HFPD 、HOZVAL:320 、HBPD、HSPW 
VFPD 、LINEVAL:240、VBPD、VSPW 这些值

而没有点亮的屏给出的时序图不知道怎么查出这些值
另外给出了一个表,也不知道是什么意思:
PARAMETERSymbol min typ max unit
DOTCLK Frequency fDOTCLK - 6.5 10 MHz
DOTCLK Period tDOTCLK 100 154 - ns
Vertical sync setup Time tvsys 20 - - ns
vertical sync hold time tvsyh 20 - - ns
phase difference of sync
signal falling edge thv 1 - 240 tDOTCLK
DOTCLK Low Period tClk 50 - - ns
DOTCLK high period tCKH 50 - - ns
DATA Setup time tds 12 - - ns
DATA hold time tdh 12 - - ns
Reset pulse width tRES 1 - - us

-----------------------------------------------------------------------------------

dotclock就是扫描用的clock.典型值6.5MHZ,不可以超过10MHZ
下面几个没什么意义,基本上不用看.
应该有以下信息(每项都包括min,typ,max):
1、每行点数
2、行可显示区域
3、场行熟

上面这三个东西是核心,而与上面这三个东西联系最紧密的是DE信号。
所以你要看看DE,VSCLOCK,HSCLOCK,CLOCK 四个信号的时序是否正确(正确不仅仅指性质正确,还指数值上在允许范围内)。

-----------------------------------------------------------------------------------

首先在bootloader上点亮即可。
OAL不用理会先。

-----------------------------------------------------------------------------------

首先确定一点,你上面给出的资料是LCD的资料,并不是controlor的资料.看LCD资料的目的是将controlor工作状态配置到合理范围.但是,软件该怎么配置(配置哪个积存器,配置步骤),还要看controlor的资料.你说的VBPD、VFPD、VSPW、HBPD、HFPD、HSPW,其实我不知道是什么东西.不过按照形声字的方法,应该跟配置行场有关.但是是不是就仅仅这技能能够决定事情呢?未必.
再有,即使你只是在你现在的代码里面找到所有相关的寄存器,你也是别妄想通过盲改的方式得到成功的结果.相关的积存器是一组的,不是一两个.

你赶紧去问供应商要图形控制器的资料,不是LCD的资料哦

-----------------------------------------------------------------------------------

#define VBPD (15) //垂直同步信号后肩Vsync back-porch
#define VFPD (12) //垂直同步信号前肩Vsync front-porch
#define VSPW (3) //垂直同步信号脉宽Vsync pulse width

#define HBPD (44) //水平同步信号后肩Hsync back-porch
#define HFPD (30) //水平同步信号前肩Hsync front-porch
#define HSPW (20) //水平同步信号脉宽Hsync pulse width


刚才没看你最先发的.原来如此
垂直同步其实就是我说的场同步啊,水平同步就是我说的行同步.
HSPW :设置一行几个象素
HFPD,HBPD:分别为显示象素前面的不显示的象素,这些象素其实配置好后,就三在屏幕外面的,假想的。
阴极还记得以前的黑白电视吧,后面有个扭,可以左右移动图象,其实就是这个概念。

VSPW:有多少显示的行

HFPD,HBPD:和行里面的一样,不说了,只是这里的单位是行不是点,方向是上下不是左右。


哈哈,看来给你写驱动的人代码写的很好嘛,给你提供各这样的接口控制器数据手册不用看了。

---------------------------------------------------------------------------------------------------

TO gelu1040:
wince下的驱动都是这样写的啊
现在我下载了另外一个LCD的SPEC找到了VBPD VFPD HBPD HFPD
这四个值,分别是18 4 68 20
缺少VSPW 和 HSPW 这两个值
LCD的DOTCLK为6.5 MHZ

现在我用示波器量HSYNC、VSYNC、VCLK,居然是:5Khz 54hz 38hz
VCLK = 38HZ居然还可以点亮第一个屏

在我的驱动中
s2440LCD->rLCDCON1 = (CLKVAL_TFT << 8) VCLK = HCLK / ((CLKVAL + 1) * 2)
其中HCLK = 133 CLKVAL_TFT = 7
通过该公式计算 我的VCLK应该是13MHZ才可以
现在不知道为什么少了一个重量级,变成38HZ了

--------------------------------------------------------------------------------------------------------

请教几个公式:
首先:2440资料上的公式 VCLK = HCLK / ((CLKVAL + 1) * 2)
这个公式应该是没问题的

我看LCD的SPEC找到这几个参数值
#define VBPD (18)
#define VFPD (4)
#define VSPW (1)

#define HBPD (68)
#define HFPD (20)
#define HSPW (1)
DOTCLK = 6.5Mhz
那么 公式:

HSYNC = DOTCLK /(320+ HBPD+HFPD+HSPW)= 6.5Mhz /(320 + HBPD+HFPD+HSPW)
= 6.5 /(320 + 68+20+1)
= 6.5/409
= 0.0158Mhz
=15.8Khz

VSYNC = HSYNC /(240+VBPD+VFPD+VSPW) =15.8KHZ/(240+VBPD+VFPD+VSPW)=15.8/(240+18+4+1)
=15.8K/263
= 0.06Khz=60HZ

--------------------------------------------------------------------------------------------

一般来说,SPI的接口部分是对LCD进行配置。
开机和关机之前都需要配置的。如果没有配置的话,直接从RGB赋值,会有白屏现象的。。

建议你问一下LCD的供应商,请他们确认是否不用SPI来配置。

-----------------------------------------------------------------------------------------------

LCD的资料上会给出320 + HBPD+HFPD+HSPW,240+VBPD+VFPD+VSPW的一个范围(两个式子里面的变量也是有取值范围的,资料也会给出);
给出clock的范围;

参数的确定可以先定一个,计算出其他的.
1、colck=6.5MHZ,
2、定HSYNC=取值范围那的一个值,计算出320 + HBPD+HFPD+HSPW,合理分配3个数(根据LCD资料)
3、根据HSYNC,调节VSYNC,计算240+VBPD+VFPD+VSPW,分配里面的3各数

上面3步反复调节,使所有值都在制定范围即可。

4、当clock改变时,你还要相应的去修改决定clock的寄存器去修改里面的值,指之=上面3步计算出来的的指
5、根据计算出来的数据配置相应寄存器

硬件没问题应该可以工作了

------------------------------------------------------------------------------------------------

引用 27 楼 wangxin_801115 的回复:
TO gelu1040:
请问:VCLK = HCLK / ((CLKVAL + 1) * 2)
          公式中的HCLK是指的我的系统总线时钟吗?
            我查看BSP中发现HCLK = 133MHz,  CLKVAL = 7
          这样VCLK = 133Mhz /((7+1)*2) = 133 / 16 =8 MHz
      请问VCLK是这个数量级的吗??
      我现在用示波器测到的VCLK竟然等于38 HZ
     请问哪个值是比较合理的值????


这个属于你的最底层驱动封装起来的接口的东西。CLKVAL代表什么,我都不知道的。

你只要知道:

行总clock数=DE宽度个clock个数+DE前面行有效的clock数+DE后面行有效的clock个数+行无效时候的clock数。

直接给张图你看,把。


场和行类似。

------------------------------------------------------------------------------------------------------------

兄弟,你这问题我碰到过!
有两中状况:
1,一般的RGB 接口的屏,不用SPI 也可以点亮,但是必须将SPI 的4个口要拉高,NC 是不行的,基本上是不亮的,既是白屏!
所以你可以先考虑想将SPI 的几个IO 口拉高,试试!
2,如果第一点还是没有显示,那么你的屏就是另外一种,必须进行初始化的屏,就跟我的一款屏一样。必须进行初始化!在裸奔的时候很好控制,不需要标准的SPI 口,只用GPIO 进行模拟即可!
但如在OAL 中进行初始化的话,我还在研究,还在请教前辈。有空可以看看我的提问!
http://topic.csdn.net/u/20091119/09/16541c7e-7d15-41d6-aa11-6e6c6b22fbc1.html?seed=830235497&r=61486434#r_61486434


  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
STM32是一种微控制器系列,具有强大的硬件和软件功能,适用于各种应用。SPI(串行外设接口)是一种通信协议,允许微控制器和外部设备进行高速数据传输。LCD(液晶显示器)是一种常见的显示设备,可用于显示文本、图像等内容。 在使用STM32控制SPI-LCD显示之前,我们需要进行一些准备工作。首先,我们需要连接STM32和SPI-LCD。通常,STM32有多个SPI端口可用,我们需要选择一个合适的端口并连接到SPI-LCD上的相应引脚。然后,我们需要根据SPI-LCD的规格书,配置STM32的SPI控制器以匹配SPI-LCD的通信参数,如时钟频率、传输模式等。 一旦连接和配置完成,我们就可以开始使用STM32控制SPI-LCD进行显示。首先,我们需要编写适当的代码来初始化SPI-LCD,包括发送一些设置命令以设置LCD的参数。接下来,我们可以使用STM32的SPI接口向SPI-LCD发送要显示的数据。例如,在显示文本时,我们可以将字符串转换为相应的字符编码,并通过SPI接口发送给SPI-LCDSPI-LCD将接收到的数据解码并将其显示在屏幕上。 除了显示文本外,我们还可以使用STM32控制SPI-LCD来显示图形。在这种情况下,我们需要通过SPI接口发送表示图形的像素数据给SPI-LCD。为了提高效率,我们可以使用STM32的硬件加速功能,如DMA(直接存取存储器)来发送大量的像素数据。 总之,使用STM32控制SPI-LCD显示需进行连接、配置和编写相关代码。通过适当的初始化和数据传输,我们可以在LCD上显示文本、图形等内容。这种方法适用于各种应用,如嵌入式系统、物联网设备等。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值