2022-11-05
距离上次已经过去半年了,坚持才能看到曙光。
之前使用SPI四线八位模式已经可以读取到SSD2828的ID号,可是在用于配置显示屏时,由于对MIPI的不了解,始终没能找到为何屏不亮。一开始由于是驱动一个研究用的长条屏7.84寸,像素是1280*480,由于某些原因,无法确定其好坏,也不确定是不是自己做的SSD2828电路板问题,所以,改变了思路。
从新购买了一个1.6寸IPS,MIPI接口单通道的屏,由于是直营店购买,所以资料肯定准确而且完善,就不存在屏幕问题了。但使用网上的SSD2828驱动例程也是无法点亮。苦于没有示波器。也是在程序上耗了许久。
最终在今天,借用了公司的示波器,发现之前的程序,在MIPI的DATA0通道上有按照时序波动的数据,但时钟线却没有波动。然后又安分的移植了一份SSD2828初始化代码,发现移植的代码,连DATA0上的波动都没了,直接惊呆了,好奇移植的代码不应该出现这种问题。然后就用之前有时序波动的代码对比,对每个可能的寄存器进行了修改,发现是时钟配置寄存器参数。修改后,立即出现了上面的BIST画面。
终于可以安心的写这个MIPI的续集了
总结之前遇到的问题:
1、第一件事可以肯定的是无论使用3线8位SPI还是4线8位SPI,当读取到SSD2828的ID号后,就可以放心SPI时序部分和对SSD2828寄存器操作部分了。
2、第二件事就是要显示BIST画面,只有显示了BIST画面,才能表示SSD2828已经成功初始化了LCD,且LCD驱动参数没有多大问题。
3、第三件事其实是应该在第二件事前面,要找到SSD2828自身寄存器配置的参数,这个参数包含了MIPI的时钟,LCD的像素参数等。
4、第四件事就是找到SSD2828写LCD初始化数据的过程,就是要明白SSD2828要通过DATA0把数据写入到屏幕中,要经过那些寄存器操作。
以上几件事弄明白,就能完成SSD2828简单的使用。
注意:如果写完程序,不亮屏,最好要用示波器进行数据线观察,这个是最快确定程序是否正确的途径之一。
2022-11-07
今天核对了一下代码,找到移植后修改的寄存器为PLCR,这个主要是控制MIPI时钟的。移植后该寄存器为0xC25A,按照计算PLL=24M * 90/2=1080MHz。修改后为0x4101,计算出来为24M *1/1=24MHz。
然后查了一下ST7797手册,发现需要的时钟只有个时间范围,计算出来大概是13M~20MHz。是否是说修改后的时钟接近需要的时钟,才能成功初始化的。
然后后面还有一个HIGH SPEED,好像是用于MIPI的video mode进行刷新用。 这里经过计算需要40M~250MHz。估计就是在初始化完后,开启高速mipi时钟,就是将PLL设置到这个范围。
正确的程序已经放到我的资源中,资源名:1.6'IPS-LCD-MIPI.zip