ili9325--LCD寄存器配置研究

2011-06-22 22:18:12

         自己根据ili9325的规格书编写驱动。发现LCD屏没显示。于是怀疑是某些寄存器设置错误。要调试的话最好还是先熟悉寄存器的作用,调试的时候只要看到现象就能分析了。否则真是摸不到头脑。于是乎,对ili9325做了如下寄存器研究学习。视频太大了,就不上传了。

 

1,Driver Output Control (R01h)

1)相关理论:

LCD显示器采用按行按列的有源矩阵驱动方式,行线都是接在像素NMOS管的栅极(gate),列线接在NMOS管的源极(source)。在LCD模块中,行线和列线是分开来驱动的,驱动行线的电路叫:gate-driver ,驱动列线的电路叫:source driver。

2)规格书寄存器解释:

gate-driver相当与像素点开关,source driver用来选择颜色源,是红色绿色还是黄色。

如果SM,GS为0,那么像素点的开关是从G1到G320.那么开关打开的方向是从G1开始的,那么颜色信号源当然也从S1开始。所以SS=0.

我买2.4寸屏的时候提供的inti代码中SS为1,SM,GS分别为0和1。根据我上面的理论基础。看下它的配置是否正确。SM,GS为01说明像素点开关是从G320开始的,那么对应的颜色信号源应该从S720开始,即SS要为1,理论验证正确。

那么很多方法都可以设置,他们的效果又如何呢?这就简单了,规格书写的很清楚。左上角第1点是G320,后下角最后一点是1,根据SS,SM,GS都为0来配置的话。图像应该从右下角开始扫描。

而我厂家提供的代码应该是从左上角开始扫描的。

3)实际配置验证

验证正确。

扩展实验。

因为还有2种模式,于是我把SM设置为1,GM设置为0,过程不正常。于是把SS,SM设置为0,GS设置为1,效果不正常,但是最终停止的结果还是对的。

SM扫描枪设置为垂直方向,但是AM数据写入地址还是水平方向,那么显示过程就不太正常。我把AM设置为1,则显示是垂直扫描。

小结:说明与此寄存器关联的寄存器还有Entry Mode (R03h)寄存器。AM的方向和SM的方向一致就没什么大问题了。

 

2, Gate Scan Control (R60h)

1)规格书寄存器解释:SCN[5:0]

上面的R01h寄存器与此寄存器有关,从R01h寄存器看,像素显示为位置不是从G1开始就是从G320开始。我能不能配置让它从其它像素点开始显示呢。SCN[5:0]配置一下就可以实现。SM=0,GS=1的情况下SCN[5:0]配置为0Ah,则像素点从G240开始扫描。

2)实际配置验证

验证正确,确实从G240行开始显示的。

但是我本来还认为G320到G240这些行就不显示了。结果还有显示。参看我拍的视频6.

小结:按照效果来理解的话,就是GRAM中0000地址的数据分配到了LCD的物理地址的G240开始。如果不设置SCN,则GRAM中0000地址的数据是分配到LCD的G320位置即首行。

 

1)规格书寄存器解释:NL[5:0]

既然可以设置从哪个像素开始启动。那么我的图片很小,不需要开320个行,我只需要240 行有驱动电压,让我显示一个小图片就可以了。于是设置R61h的NL[5:0]= 1D即可。NL用来设置扫描范围为240行。

2)实际配置验证

验证正确,看视频7.

小结:以后看到按顺序的错位显示,可能就是Gate开关地址不正确。

 

3, Gate Scan Control (R61h)

1)相关理论NDL

      灰度与像素的关系

  一般,像素值量化后用一个字节(8b)来表示。如把有黑-灰-白连续变化的灰度值量化为256个灰度级,灰度值的范围为0~255,表示亮度从深到浅,对应图像中的颜色为从黑到白。黑白照片包含了黑白之间的所有的灰度色调,每个像素值都是介于黑色和白色之间的256种灰度中的一种。那么从表象来看灰度到最大值时,我也可以理解为反色。我现在在word中打出的字是黑色的。当我选中它,则变成白色。

2)规格书寄存器解释:NDL

      V63,V62,V61……V2,V1,V0代表灰度等级。它其实是提供给gamma的校准电压。代表着64种电压强度。那么是不是代表64种灰度呢?这点理解的比较模糊。NDL位能确定V63是电压最强端还是V0端为电压最强端。但是我认为只有这一个寄存器没法进行什么验证,应该还有一个寄存器配置显示的强度选择。如使用V62强度,或V3强度,那么改变NDL则LCD显示的颜色应该呈现反色。

3)实际配置看效果

验证失败,仔细看了规格书,原来配置的是non-display area.所以我无法看效果。

 

1)规格书寄存器解释:REV

此位没搞明白。

2)实际配置看效果

小结:原来我本来以为NDL是反色效果,结果REV=0才是反色效果。参考我的视频8。

 

1)规格书寄存器解释:VLE

此寄存器是设置垂直滚屏用的开关。VLE垂直滚屏的话,要配合R62的VL[8:0]使用。

 

4, Gate Scan Control (R6Ah)

1)规格书寄存器解释:

VL[8:0]主要是设置滚屏行数。

当VLE bit设置为1,再设置VL[8:0]=160,则垂直滚动的行数为160.从LCD的物理第1行开始垂直滚动160行。现在问题是,这滚动的速度是否很快,我肉眼能看见吗?滚动完成后,那么低161行到320行会显示什么呢?

2)实际配置验证

验证失败,我已经把扫描方向改成从右到左,但没看出它垂直滚屏。

小结:VLE及VL[8:0]一定还和其他寄存器有关。目前不知道。

 

5,Horizontal and Vertical RAM Address Position (R50h, R51h, R52h, R53h)

1)规格书寄存器解释:

R50,R51,R52,R53是设置地址范围用的寄存器。比较好理解。因为你要送一个RGB数据到LCD某点显示的话,也要先写地址。那么着四个寄存器就是让你确定一个LCD显示区域的范围。R50为行开始地址,R51为行结束地址,R52为列开始地址,R53为列结束地址。

突然想到一个问题,我如果显示地址一个显示点,给它的地址超出了如上定义的范围,它应该是不会显示的哦
2)实际配置验证

验证成功。参考视频9

扩展实验。看了视频9,发现240行下显示为花屏,因为下我有颜色输出的最大行就是240,至于为什么240行之后会花屏,因为,我gate开着。所以source还是会送数据来显示。那么我应该把240行以后的gate关掉,那么应该只留白色背光了。

验证成功。参考视频10。

小结:在gate打开的情况下。设置LCD显示的范围应该要小于gate的范围。如果LCD显示范围设置的比gate打开的范围大,那么也是不会有显示的。因为gate没开,RGB数据不可能从source信号传出。

 

6,LCD Driving Wave Control (R02h)

1)相关理论

           LCD 的 VCOM 就是所有笔划或象素背后的公共电极. 因为 LCD 的每一个显示点必须加正负交替的电压才能显示, 所以要在 VCOM 上加一个一定频率的方波, 显示为 "亮" 的笔划或象素上加与其反相的波形, 形成交替电压, 不显示的笔划或象素加与之同相的波形, 相当于加 0 电压. 

          如果一直显示禁止的图像,则液晶电极上的电压就会一直不变。待撤销电压后,液晶很难恢复原状(为什么呢?暂时不知道。)容易造成液晶损坏。为解决这一方法,就是改变液晶电压的极性,VCOMH和VCOML一起改变。但是电压还是有的,所以图像任然显示。但是液晶就不那么容易损坏了。改变极性有帧方式,行方式,点方式。帧方式的屏幕闪烁比较明显,一般采用行方式。

2)规格书寄存器解释:

B/C是设置帧或行转换。

EOR与B/C都设置为1,则为行转换。

3)实际配置验证

设置为帧转换看效果。看不出来哦。

 

7,Entry Mode (R03h)

1)规格书寄存器解释:AM,I/D[1:0]

      AM控制GRAM地址更新的方向是行还是列。

       I/D[1:0]控制地址计数器是增加还是减小1。

       这2个显示地址方向配置加上R50h ~R53h的显示地址范围配置。则可以确定扫描及显示的方向及LCD显示内容的物理位置。

更改GRAM地址方向应该比较简单,但是是否一定要配置电压扫描的方向呢?我认为是要不需要配合的,但是配置的话,显示屏的显示效果应该会更好。比如GRAM为逐列扫描,而Gate电压的扫描方式为逐行,效果可能会不好。当然也可能根本没影响。因为他们是有先后顺序的。这点不太清楚。

2)实际配置验证和看效果

Gate扫描的方向和AM地址更新方向没什么太大关系,只是我还没看出来。只是在配置I/D的时候发现与规格书不符。I/D为11时与I/D为10时显示的扫描方向与实际相反。

小结,AM是SM配置有点关系的,配置I/D为11时与I/D为10的时候发现与规格书不符

 

1)规格书寄存器解释:ORG

      Org为1,则能根据I/D设置的方向自动更新地址。 但是首地址必须为”0x0000”.

      ORG为0,则说明写入特殊地址。I/D的配置不起作用。另外,如果不用GRAM,则ORG要配置为0

      ORG设置为0,应该只显示一个像素点。但是结果验证失败,也搞不清楚ORG位没起作用啊。

 

1)规格书寄存器解释:BGR

转换RGB写入GRAM地址的顺序。如果改下RGB的顺序,则显示的图像应该花屏了。或者说颜色改了。R值变成了B值,B的值变成了R的值。如果我用调用红色刷屏,改变RGB,应该显示的是蓝色刷屏。之前刷屏的顺序是红绿蓝,那么RGB顺序改后,刷屏顺序应该是蓝绿红。

2)实际配置验证

验证正确。参看视频11.

 

1)规格书寄存器解释:TRI

MCU接口与LCD 内部RAM接口模式转换,配合DFM使用。规格书写的很清楚了。再此我不写了。要验证很简单,TRI改成1,那么MCU的RGB数据传输到LCD的内容RAM后就变样,显示出来一定是花屏显示不正常。

2)实际配置验证

验证正确,但是没想到它还蛮有规律的。参看视频12.

 

8,Resizing Control Register (R04h)

1)规格书寄存器解释:

这个寄存器比较简单,主要设置RSZ[1:0]缩小多少倍,RCH[1:0]水平剩余的像素,RCV[1:0]垂直剩余的像素。公式可以参考ili9325规格书的P105页。至于剩余的像素到底有什么用,现在还不清楚。显示我可以尝试调整图像大小。

2)实际配置验证

验证正确。看视频13.不过还有一个要注意的,就是同时也要设置扫描地址的范围即要设置R52和R53.否则,效果即为视频14.

9,Display Control 2 (R08h)

1)规格书寄存器解释:

设置前肩和后肩的clk值。参见ili9325规格书P35页。本来以为只适用于RGB接口的VSYNC信号。现在再看看规格书中I80 System Interface Operation Mode BP ≥ 2 lines FP ≥ 2 lines FP +BP ≤ 16 lines。说明我用的i80接口也要配置R08h寄存器的。我尝试一下在LCD初始化中删除对此寄存器的设置看看效果。

2)实际配置验证

验证正确。注销此寄存器配置,也没问题。

 

10,Display Control 3 (R09h)

1)规格书寄存器解释:

刚才说过Vcom做周期性的变化对屏有好处(为什么呢?)。对不显示数据的地方(是指GRAM设定的范围外的地方吗?)则Vcom也做周期性变化的话,那么周期值是多少呢,通过ISC[3:0]设置。PTG[1:0]在不显示图像的区域设置Vcom扫描模式。PTS[2:0]设置源极不显示图像区的电压等级。当设置为1,可以不适用灰阶电压,可以降低功耗。既然是在不显示的区域设置这些模式,我无法通过肉眼观看来验证,要我测量功耗,我现在也不会。这个就不验证了。

 

11,Display Control 4 (R0Ah)

1)相关理论

     好在很多LCM驱动芯片都有一个Fmark脚,用来与主控同步,当Fmark发出一个信号给主控时,主控才开始写一帧数据,这样就可以保证两边同步。

2)规格书寄存器解释:

FMI[2:0] 根据显示数据重写周期和数据传输速率来设置FMARK信号的输出间隔。 FMARKOE 当FMARKOE=1, 由FMI成像[2:0]位设置输出间隔下,ILI9325开始输出FMARK信号。不过FMARK没与MCU相互有引脚连接,这个寄存器没用吧!

2)实际配置验证

验证正确,注销这个寄存器,也没问题。

 

12,RGB Display Interface Control 1 (R0Ch)

1)规格书寄存器解释:

我用的是i8080接口,作用此寄存器我用不到的。此寄存器主要是设置与RGB接口相关的。

 2)实际配置验证

验证正确,注销这个寄存器,也没问题。

 

13,Frame Marker Position (R0Dh)

1)规格书寄存器解释:

这个比较简单,设置输出信号同步的信号位置。就是在BP后隔多少帧,则MCU可以向LCD传输数据。但是我认为这是针对RGB接口协议的,1)规格书寄存器解释:

这个比较简单,设置输出信号同步的信号位置我用的i8080接口协议,应该不用设置这个寄存器。

2)实际配置验证

验证正确,注销这个寄存器,也没问题。

 

14,RGB Display Interface Control 2 (R0Fh)

1)规格书寄存器解释:

这个比较简单,RGB信号有效时的极性。我用的i8080接口协议,应该不用设置这个寄存器。

2)实际配置验证

验证正确,注销这个寄存器,也没问题。

 

15,GRAM Horizontal/Vertical Address Set (R20h, R21h)

1)规格书寄存器解释:

这个比较简单,设置水平和垂直的GRAM地址初值。然后配置AM和I/D则在此地址基础上地址会自动更新。如果设置的值不是0,而是00和1EF,那么17’h00000 ~ 17’h000EF段中的RGB数据就不会变化。因为不会写RGB到17’h00000 ~ 17’h000EF段中了。

2)实际配置验证

验证正确,参看视频15.

 

16,Gamma Control (R30h ~ R3Dh)

相关理论

Gamma值的修正,可以改变画面明暗,增加对比。动态Gamma控制则根据每个画面的不同动态修正Gamma值。通常在一个黑暗的画面中,很难分辨出细节,若把全部亮度提升,虽然看得到暗处,但是又会造成失真,例如蓝天的部分就会褪色。因此改变局部的Gamma(γ)曲线,即可修正局部的亮度,增加对比

1)规格书寄存器解释:

Gamma值设置。参见ili9325规格书P90,具体也不知道怎么设置。

但是我知道是用于图像效果微调整的。

实验证明,把它们注销也没问题。

 

17,Partial Image 1 Display Position (R80h)

Partial Image 1 RAM Start/End Address (R81h, R82h)

Partial Image 2 Display Position (R83h)

Partial Image 2 RAM Start/End Address (R84h, R85h)

1)规格书寄存器解释:

以上这几个寄存器用来设置显示部分图像的LCD屏显示位置,和GRAM中显示内容的起始地址。具体含义可以参考ili9325提供的实例P102-P103页。

 

18,Panel Interface Control 1(R90h)

1)规格书寄存器解释:

设置行clk内部时钟,不设置应该不会有数据进GRAM,那么就没显示。

2)实际配置验证

注销这个寄存器,看效果。

验证结果为注销也可以。

 

19,Panel Interface Control 2 (R92h)

1)规格书寄存器解释:

设置行gate内部时钟在非显示区,不设置应该不会开gate。降低功耗。

 

 

20,Panel Interface Control 4 (R95h)

1)规格书寄存器解释:

设置RGB接口的clk。我是i8080接口不用的。

 

21, Power Control 1 (R10h)

1)相关理论

   先说明一下LCM中的电源电路结构,包括内置电源AD/DC转换电路,Gamma校正电路(gammat调节+灰度电压产生电路),列驱动电路(Source Driver),行驱动电路(Gate Driver),

   关于电压,参考ili9325规格书P101页的电压表。也可以参看P12页的电压pin脚说明

  说明一下VGH和VGL提供Gate Driver。VGAM1OUT提供Source Driver电压,VCOMH和VCOML提供LCD屏的公共电压。VLCD即DDVDH提供Source driver和Vcom Driver的电压,VCL,提供VcomL Driver的电压。另外这些电压直接有约束关系。(DDVDH – VREG1OUT ) > 0.5V, (VCOML1 – VCL) > 0.5V, (VCOML2 – VCL) > 0.5V。

2)规格书寄存器解释:SLP,STB,DSTB,AP[2:0]

以上4种控制为都是为了节约功耗而设置的。SLP:睡眠模式,STB:待命模式,DSTB:深度待命模式。AP[2:0],调整LCD电源电路中的电流。暂时我不去修改它们的配置。

 

1)规格书寄存器解释:SAP,APE

以上2种配置主要起到开关作用。SAP:Source driver的开关。APE:PowerSupply的开关。

1)规格书寄存器解释:BT[3:0]

设置升压电路的因数。

 

21, Power Control 2 (R11h)

1)规格书寄存器解释:

     VC[2:0]:设置基准参考电压VCi1与输入电压Vci的比例因子。

     DC0[2:0]:设置升压电路1的频率。不太清楚是哪个电路。

     DC1[2:0]:设置升压电路2的频率。不太清楚是哪个电路。

 

22,Power Control 3 (R12h)

1)规格书寄存器解释:

VRH[3:0]:设置Vci与VREG1OUT的比例因子。可以通过Vci确定VREG1OUT。

VCIRE:配置VRH[3:0]选择使用内部或是外部电压*比例因子=VREG1OUT电压

PON:行驱动电压开关。

 

23,Power Control 4 (R13h)

1)规格书寄存器解释:

VDV[4:0]:VREG1OUT与Vcom比例因数。主要是通过VREG1OUT设置Vcom的电压值。

 

24,Power Control 7 (R29h)

1)规格书寄存器解释:

设置内部 VcomH 电压。

 

看了它的出厂配置代码。Vci1=Vci=3.3v,DDVDH=6.6V,VCL=-3.3V.VGH=19.8V,VGL=-16.5V,VCOMH=4V,Vcom=1.04*1.875=5.07V,VREG1OUT= 4.875V;  VcomL怎么没设置啊,我认为VcomL=-Vcom/2=-2.5V。根据规格书P101的电源范围。发现VGH设置偏高。DDVDH偏高。根据P106页最大值设定范围,也发现这2个值偏高。

 

我准备把Vci1基准电压降低到0.85 x Vci(3.3V)=2.8V,修改VC[2:0]=2.

DDVDH=5.6V,VCL=-2.8V.VGH=16.8V,VGL=-14V,VREG1OUT用的是内部基准2.5V,所以与VREG1OUT有关的电压都不变。Vcom=1.04*1.875=5.07V,VREG1OUT= 4.875V。不过VcomL的值我不确定。

 

2)实际配置验证

验证成功,我设置的Vci与Vci1的比例因数0.85也ok。

25,Frame Rate and Color Control (R2Bh)

每秒刷屏的数量。

2)实际配置验证

本来想尝试加快刷屏。结果已经设置的是最快的了R2Bh=0xD,于是我设置为0. 40帧/s然后就发现图像抖的厉害。不过这个寄存器主要针对动态图像的。如做摄像头+LCD显示的话就比较注意刷屏率了。于是我把刷屏率这个寄存器配置注销掉,发现它的显示速度稍微慢点。估计它是有默认值得。

会不会很多寄存器都有默认值啊。我要尝试批量注销寄存器配置代码。我发现只要power on时序对基本就ok了。

 

26, Display Control 1 (R07h)

略。

 

Ili9325大多数的寄存器我都解释了一下,并且有一些寄存器还做了实验。发现这些寄存器越看越简单。为什么这么说。我现在就想学打太极一样。已经把所有的招式都忘了。而学会的是融汇贯通。

小结一下,需要配置的必要内容。

1,  电压值要配置,并且power on。

2,  内部晶振值要配置。各各driver 要打开。如Gate不打开,则不会有显示。

3,  GRAM地址要配置。

4,  显示范围要配置。

5,  显示方向要配置,包括Gate驱动扫描的方向和Source驱动的数据进入方向。

 

Ok。研究了它的配置数据,即熟悉的各各寄存器的作用。我将根据P101页的PowerSupply配置流程来写我的初始化程序。

 

附录:

视频对应的配置说明

1,  在出厂配置

2,  在出厂配置的基础上,设置SS=0,SM=0,GS=0,AM=0,I/D=3

3,  在出厂配置的基础上,设置SS=0,SM=1,GS=0,AM=0,I/D=3

4,  在出厂配置的基础上,设置SS=0,SM=1,GS=0,AM=1,I/D=3

5,  在出厂配置的基础上,设置SS=1,SM=0,GS=1,AM=0,I/D=1

6,  在出厂配置的基础上,设置SCN=0x0A

7,  在出厂配置的基础上,设置SCN=0x0A,NL=0x1D

8,  在出厂配置的基础上,设置REV=0

9,  在出厂配置的基础上,设置VEA=0xEF

10, 在出厂配置的基础上,设置VEA=0xEF,NL=0x1D

11, 在出厂配置的基础上,设置BGR=0

12, 在出厂配置的基础上,设置TRI=1

13, 在出厂配置的基础上,设置RSZ=1,R52h=240/2,R53h=320/2

14, 在出厂配置的基础上,设置RSZ=0

15, 在出厂配置的基础上,设置R20h=0xEF,R21h=0x5

16, 在出厂配置的基础上,设置R2Bh=0

 

 

posted @ 2019-04-27 10:53  clleady  阅读(1729)  评论(0编辑  收藏  举报