SSD2828驱动小米屏调试记录
本帖最后由 Xplain 于 2014-9-16 18:51 编辑最近用SSD2828驱动小米屏,没有代码,没有技术支持,自己写代码反复调试,整死我了,目前已经能正常显示图片,做个总线跟大家分享一下,说的不对的地方欢迎大家批评指正.
要点:
1. 小米3屏的分辨率是1920*1080, 24bit, 行列像素点为1080*1920, 默认显示方式为从左->右,上->下,这个可以通过DCS指令修改.
2. SSD2828手册上说SSD2828一行最大可显示1920个像素点(60Hz),而官网上说SSD2828的最大分辨率为1920x1200,所以我一直认为SSD2828
行像素最大可设置为1920,列最大像素可设置为1200,实际上驱动小米3屏时,行列分别设置为1080*1920.
3. 要用SSD2828最新的手册,目前能找到的是V1.3,旧版本有些地方是错的,误导人.
4. SSD2828 RGB接口和MIPI接口的位数是一起设置的(通过B6寄存器设置),即没有RGB为24bit,MIPI为16bit的这种情况.
5. SSD2828可支持的16,18,24bit的屏,而有的屏不支持16bit的,如小米3的屏就不支持,这个要看清楚.
6. 屏的data lane和SSD2828设置的要一致
7. SSD2828的VBP, VFP, HBP, HFP,和CPU这端设置不能一致,显示不正常,我也不知道为什么.
驱动初始化包括SSD2828,LCD屏的初始化
1. SSD2828初始化主要有设置PLL, 设置LCD参数(分辨率,VBP, VFP, HBP, HFP).
CPU这端的Pclk设置为90~120MHz, SSD2828 PLL output为800MHz左右,900以上有些危险,干扰大(跟PCB有关系咯)
2. SSD2828提供给CPU接口,通过DCS设置LCD的一些参数,这个要看LCD手册有哪些参数要设置,最主要的是0x29,0x11指令,
让LCD exit sleep mode和display on.
屏不显示可能有几种情况
1. 0x29,0x11指令发送不对,LCD没收到,一直在sleep状态.
2. 屏要显示,data lane上肯定有波型,如果data lane波型都没有,那就是ssd2828都没有配置好,跟CPU这端没有关系.
3. data lane有波型,可能跟C9, CA, CB,这几个寄存器有关,随便设置几个值试一下(最大,最小,中间值),我调试了一周,就是C9没有设置对,所以一直没显示
屏幕抖动可能跟VBP, VFP, HBP, HFP,这几个参数有关,修改SSD2828和CPU LCD controler的这几个参数试一下
颜色过度失真,右能跟B6寄存器中的PCLK_P和0xDB中的CLK_DELAY_SEL有关,我设置PCLK_P为1, CLK_DELAY_SEL为0,显示图片就好了.
不行可修改CLK_DELAY_SEL试一下,再不行我也没办法了.
除了必须设置的参数外,对显示有影响的寄存器主要有:
C9, CA, CB, DB, DD, ED, 调试中主要修改了这些寄存器
没图你是说个。。。。。 楼主发个图看看,让我们掌掌眼 求图 同求图。。。 有图有真相,来吧 你是用的什么主控? 求图,求真相 nhztb 发表于 2014-9-16 17:51
你是用的什么主控?
arm9{:smile:} 楼主牛逼 直接改米3的程序算 了。有没有这个可能。 价格,不会便宜吧? 给LCD的初始化只写了0X11 0X29 就OK 了么? 楼主是逗我们的吧{:lol:} buck 发表于 2014-9-16 20:04
2828 4lane 估算值360Mbps,楼主400Mbps可以满足
没用过那么低的,一直在800M左右,不过可以试一下 HYLG 发表于 2014-9-16 21:11
直接改米3的程序算 了。有没有这个可能。
要先有米3的源码才行啊 biansf2001 发表于 2014-9-16 22:04
价格,不会便宜吧?
CPU带有4 lanes的mipi接口应该比较贵了,ssd2828在bao上的价格也是10块左右了,arm9+ssd2828应该便宜一些 LCMOK 发表于 2014-9-16 22:37
给LCD的初始化只写了0X11 0X29 就OK 了么?
还有其他针对屏的,屏用的驱动IC不一样,初始化也不一样咯,这两个是通用的,而且是最主要的 LCMOK 发表于 2014-9-16 22:37
给LCD的初始化只写了0X11 0X29 就OK 了么?
还有其他针对屏的,屏用的驱动IC不一样,初始化也不一样咯,这两个是通用的,而且是最主要的。主要目的是让调试的人知道不光要设置SSD2828,还需要设置LCD这个概念,刚调试网上找很少资料的,弄了好久才弄懂原来LCD也需要初始化的。 机器人天空 发表于 2014-9-16 22:58
楼主是逗我们的吧
晕,写那么长的文章逗你们玩有意思吗?刚调试这个东西概念都不懂,网上资料又少,没有FAE支持,都快把我逼疯了, stm8s 发表于 2014-9-16 18:55
楼主牛逼
{:handshake:} 相互学习,时间花在哪,就会在哪有收获,{:biggrin:} 那是要用这个做什么? buck 发表于 2014-9-17 06:21
2Mbps = 1MHz,理论值只比你的小点而已,所以我说你的频率是适合的。
你也太早了吧,带孩子醒了,睡不着,又来看帖了{:sad:} buck 发表于 2014-9-17 08:30
整天操着卖白粉的心,已经提前进入老龄时代了,最近不到五点就醒....
5点就醒了!!有点早了{:lol:} ,以前我爷爷也要到6点啊 mark,可能以后有用到。谢谢分享 主楼真强悍
就佩服这种调底层驱动的 能力是一方面 毅力更重要 真强。其实有时候很想搞个手机屏幕做到产品上用,效果好,价格也还可以 下载顶贴 楼主,是不是按照屏幕参数设置好RGB参数就可以了。我现在的情况是mipi几组差分线有信号,时钟正常,但就是无法显示,哪怕花屏也没有,不知哪里错了 請問一下樓主 是用什麼板子點的
有淘寶連結嗎? 牛逼大了 触屏用上没呢 方便透露下主控芯片吗? 赞一个,,显示效果还可以 楼主牛逼
楼主真是大神啊! 楼主你很犀利你造吗 不错,谢谢指导! 比较关心主控芯片,楼主厉害,图片好清晰好漂亮 楼主厉害 感谢分享经验 感谢分享经验 好厉害。。 LCMOK 发表于 2014-9-16 22:37
给LCD的初始化只写了0X11 0X29 就OK 了么?
屏在出厂前会把要初始化的参数固化(烧录)到IC中,这就是所谓的OTP(或NVM),OTP过的屏就不需要再初始化 只需送0x29 0x11。如果没OTP过的只送0X29 0X11应该是点不亮的 Xplain 发表于 2014-9-16 18:53
arm9
请问LZ 具体是哪个型号的ARM9,像2440我记得是不可以的,它可以点横屏到2048*1024,竖屏1080*1920是不行的 LZ能共享一下SSD2828的初始化吗,最近在研究这个,正在做SSD2828的转接板。
调试屏幕最喜欢用美女照了,哈哈 {:shocked:}楼主牛逼 linuxmake 发表于 2014-9-22 03:28
楼主,是不是按照屏幕参数设置好RGB参数就可以了。我现在的情况是mipi几组差分线有信号,时钟正常,但就是 ...
设置SSD2828的PLL啊,可能跟C9, CA, CB,这几个寄存器有关,之前我也是data lane上有数据,没显示,后面设置了下这几个参数就OK了 512561411 发表于 2014-9-22 07:38
触屏用上没呢
MXT540S找不到资料哦,糗大了这回,要签NDA,搞不定啊,资料都没人卖 tianxian 发表于 2014-9-22 13:06
请问LZ 具体是哪个型号的ARM9,像2440我记得是不可以的,它可以点横屏到2048*1024,竖屏1080*1920是不行 ...
atmel的A5啊, jarodzz 发表于 2014-9-22 04:16
請問一下樓主 是用什麼板子點的
有淘寶連結嗎?
没有哦,我们公司自己做的板子,不是开发板 tianxian 发表于 2014-9-22 13:02
屏在出厂前会把要初始化的参数固化(烧录)到IC中,这就是所谓的OTP(或NVM),OTP过的屏就不需要再初始化 ...
其实MI3的屏不用发29,11命令都能点亮,设置好SSD2828就OK了,没试过其他屏,不知道其他屏不用发这两个命令能不能亮 感觉有裤子拿……不过lz搞这驱动干啥用呢? whf199191 发表于 2014-9-23 23:21
感觉有裤子拿……不过lz搞这驱动干啥用呢?
项目相关,不然花时间去玩他干咱 Xplain 发表于 2014-9-23 23:24
项目相关,不然花时间去玩他干咱
lz能说说是啥项目么……感觉能用这屏的应该都可以用APP形式替代吧?本人刚出校门,还请指教呀~ bias 发表于 2014-9-22 15:41
LZ能共享一下SSD2828的初始化吗,最近在研究这个,正在做SSD2828的转接板。
领导在看帖呢,你说能给你吗兄弟 whf199191 发表于 2014-9-23 23:26
lz能说说是啥项目么……感觉能用这屏的应该都可以用APP形式替代吧?本人刚出校门,还请指教呀~ ...
{:sweat:} 没有驱动APP搞什么嘛,想画图最少屏要亮吧 Xplain 发表于 2014-9-23 23:30
没有驱动APP搞什么嘛,想画图最少屏要亮吧
硬件用蓝牙、wifi或otg外接,软件部分用APP,只要是个智能机就成……所以才问为啥要搞屏幕…… Xplain 发表于 2014-9-23 23:28
领导在看帖呢,你说能给你吗兄弟
.......领导在看,你还敢发帖子
我靠,楼主怎么找到米3屏的资料的? LZ请教个问题,SSD2828 QFN封装的底座是悬空还是接GND还是VDD?
我在规格书没找到,是不是悬空就可以了
bias 发表于 2014-9-24 17:18
LZ请教个问题,SSD2828 QFN封装的底座是悬空还是接GND还是VDD?
我在规格书没找到,是不是悬空就可以了
连接GND。。。。。。。 佩服厉害。 楼主厉害 mark ssd2828+ARM9价格还可以接受 tianxian 发表于 2014-9-22 13:02
屏在出厂前会把要初始化的参数固化(烧录)到IC中,这就是所谓的OTP(或NVM),OTP过的屏就不需要再初始化 ...
看来兄台是做屏的专家
ssd2828+ARM9 mark 楼主好厉害啊这种屏幕没资料都能驱动。 richards 发表于 2014-9-28 21:28
楼主好厉害啊这种屏幕没资料都能驱动。
屏能亮就好调了,屏亮了之后其他参数慢慢调,过程虽然很痛苦 楼主,能不能说一下如何读取屏幕的id,我读出来屏幕的ID是错误的,不知道问题出现在哪里 还有你spi采用的是24bit还是8bit的方式 linuxmake 发表于 2014-9-29 17:02
还有你spi采用的是24bit还是8bit的方式
24bit 8bit试过了都可以的 牛人呀, 这都可以搞定 linuxmake 发表于 2014-9-29 17:01
楼主,能不能说一下如何读取屏幕的id,我读出来屏幕的ID是错误的,不知道问题出现在哪里 ...
我用DA,DB,DC(user command)指令去读屏的ID全都是0,但是用BF(manufacturer command)去读驱动IC的ID是对的,每个屏的manufacturer command应该是不一样的,要看一下驱动IC的手册 期待楼主发更详尽的资料,学习一下。 mark{:biggrin:} 楼主 V5啊。 楼主,我安装图片流程,无法通过mipi读取液晶IC的寄存器,请问问题出现在哪里,使能了PLL也不行
代码如下:
SPI_2828_WrCmd(0xb7);
SPI_WriteData(0x90);// 82 50=TX_CLK 70=PCLK
SPI_WriteData(0x02);// 03 //Configuration Register
SPI_2828_WrCmd(0xbc);
SPI_WriteData(0x01);
SPI_WriteData(0x00);
SPI_2828_WrCmd(0xbf);
SPI_WriteData(0xda); //dah 屏的ID 指令
SPI_WriteData(0x00);
LCD_delay_ms(500);
printk("Interrupt Status register : 0x%02X\n",SPI_READ(0xc6));
//spi read SSD2828
//SPI_2828_WrReg(0xd4, 0x00FA);
SPI_2828_WrCmd(0xd4);
SPI_WriteData(0x01);
SPI_WriteData(0x00);
printk("hui:MIPI IC: 0x%x\n",SPI_READ(0xff)); linuxmake 发表于 2014-10-6 21:03
代码如下:
SPI_2828_WrCmd(0xb7);
SPI_WriteData(0x90);// 82 50=TX_CLK 70=PCLK
ssd_set_register(0xB7, 0x03C0);// DSC read packet, LP mode
ssd_set_register(0xC1, 0x0001);// 要读的字节数
ssd_set_register(0xBC, 0x0001);
ssd_set_register(0xBF, 0x000C);// get_pixel_format
delay(20);
ssd_get_register(0xFF);
printHex(rxBuffer, 4, 4);
这是24bit方式读屏多少位的代码,你参考一下呗,读回的数据放在全局变量rxBuffer中 Xplain 发表于 2014-10-9 09:03
ssd_set_register(0xB7, 0x03C0);// DSC read packet, LP mode
ssd_set_register(0xC1, 0x0001);// ...
还有就是RGB信号线要求严格吗,我现在用杜邦线连接好像效果不好。 我有个红米的屏幕,回去也研究一下。 linuxmake 发表于 2014-10-9 10:41
还有就是RGB信号线要求严格吗,我现在用杜邦线连接好像效果不好。
杜邦线有些影响,屏幕有点抖哦 我有块moto的屏 试试 楼主,我现在显示图片是没有问题,但是进入andorid系统后就出现花屏,黑屏的情况。你有没有遇到过这个情况? 还有就是,一旦出现黑屏就无法重新正常显示,这应该是时序问题吧 linuxmake 发表于 2014-10-18 23:21
还有就是,一旦出现黑屏就无法重新正常显示,这应该是时序问题吧
以前我用杜邦线连的时候就有这种问题,抖动很厉害,然后就黑屏,后面做板出来之后就没有了 Xplain 发表于 2014-10-19 10:21
以前我用杜邦线连的时候就有这种问题,抖动很厉害,然后就黑屏,后面做板出来之后就没有了 ...
好的,我现在把时钟降了些,好了些。你也是在android移植吗 linuxmake 发表于 2014-10-19 13:01
好的,我现在把时钟降了些,好了些。你也是在android移植吗
没有,我跑裸机的 楼主帮我看一下,我在初始化的时候能测试到MIPI_D0_N有波形,见图片右侧,初始化完成后的时间段内,MIPI_D0_N反而没有波形,只有50HZ左右的一个脉冲,可是我RGB有信号输入的(RGB信号正常)
按照你说的这是2828还没设置好,跟细节调节无关,些过去的0x11,0x29都起作用了,屏幕已经亮起,屏幕上都是各种颜色随机的雪花点,感觉就是RGB没到MIPI这边来,能帮我看看是什么问题吗?
这是初始化时候的波形
这是初始化之后的波形
SSD2828_GPIO_Config();
LCD_and_SSD2828_Reset();
//PLL Configure
SSD2828_SPI_WriteCmd(0x00BA); SSD2828_SPI_WriteDat(0x8014); //Fout = Fin * 0x14 / 1 = 24M * 20 /1 = 480M
SSD2828_SPI_WriteCmd(0x00BB); SSD2828_SPI_WriteDat(0x0005); //LP(Low Power) Clock = Fout /6/8 = 10M
SSD2828_SPI_WriteCmd(0x00B9); SSD2828_SPI_WriteDat(0x0001); //PLL ENABLE
Delay_MS(100);
//RGB Input Interface Control
SSD2828_SPI_WriteCmd(0x00B1); SSD2828_SPI_WriteDat((LCD_VSPW<<8)+LCD_HSPW);
SSD2828_SPI_WriteCmd(0x00B2); SSD2828_SPI_WriteDat((LCD_VBP<<8)+LCD_HBP);
SSD2828_SPI_WriteCmd(0x00B3); SSD2828_SPI_WriteDat((LCD_VFP<<8)+LCD_HFP);
SSD2828_SPI_WriteCmd(0x00B4); SSD2828_SPI_WriteDat(LCD_HDP);
SSD2828_SPI_WriteCmd(0x00B5); SSD2828_SPI_WriteDat(LCD_VDP);
SSD2828_SPI_WriteCmd(0x00B6); SSD2828_SPI_WriteDat(0x0007); //HS,VS,PCLK极性都=0 , Bit=11=24bpp
//MIPI Lane Configure
SSD2828_SPI_WriteCmd(0x00DE); SSD2828_SPI_WriteDat(0x0001); //2 Data Lane
SSD2828_SPI_WriteCmd(0x00C9); SSD2828_SPI_WriteDat(0x2302); //p1: HS-Data-zerop2: HS-Data- prepare--> 8031 issue
SSD2828_SPI_WriteCmd(0x00D6); SSD2828_SPI_WriteDat(0x0005); //Bit:Send X(now=1) Packet in Blanking Period, Bit:1=R.G.B/0=B.G.R
SSD2828_SPI_WriteCmd(0x00C4); SSD2828_SPI_WriteDat(0x0001); //Enable BTA
Delay_MS(100);
//use MIPI Init LCD
SSD2828_DCS_Write(tab1);
SSD2828_DCS_Write(tab2);
SSD2828_DCS_Write(tab3);
SSD2828_DCS_Write(tab4);
SSD2828_DCS_Write(tab5);
SSD2828_DCS_Write(tab6);
SSD2828_DCS_Write(tab7);
SSD2828_DCS_Write(tab8);
SSD2828_DCS_Write(tab9);
SSD2828_DCS_Write(tab10);
SSD2828_DCS_Write(tab11);
SSD2828_DCS_Write(tab12);
SSD2828_DCS_Write(tab13);
SSD2828_DCS_Write(tab14);
SSD2828_DCS_Write(tab15);
SSD2828_DCS_Write(tab16);
SSD2828_DCS_Write(tab17);
SSD2828_DCS_Write(tab18);
SSD2828_DCS_Write(tab19);
SSD2828_DCS_Write(tab20);
SSD2828_DCS_Write(tab21);
SSD2828_DCS_Write(tab22);
SSD2828_DCS_Write(tab23);
SSD2828_DCS_Write(tab24);
SSD2828_DCS_Write(tab25);
SSD2828_DCS_Write(tab26);
SSD2828_DCS_Write(tab27);
SSD2828_DCS_Write(tab28);
SSD2828_DCS_Write(tab29);
SSD2828_DCS_Write(tab30);
SSD2828_DCS_Write(tab31);
SSD2828_DCS_Write(tab32);
SSD2828_DCS_Write(tab33);
SSD2828_DCS_Write(tab34);
SSD2828_DCS_Write(SleeOut);
Delay_MS(120);
SSD2828_DCS_Write(DisplayON);
SSD2828_DCS_Write(MWrite);
// test();
SSD2828_SPI_WriteCmd(0x00E9); SSD2828_SPI_WriteDat(0xff2f);
SSD2828_SPI_WriteCmd(0x00EB); SSD2828_SPI_WriteDat(0x0100);
SSD2828_SPI_WriteCmd(0x00B7); SSD2828_SPI_WriteDat(0x034B);
靠,这头猪看着有3D的感觉 好牛逼
这都能搞出来
mark ,好东西,手机屏幕资料不好找 bias 发表于 2014-11-12 12:24
楼主帮我看一下,我在初始化的时候能测试到MIPI_D0_N有波形,见图片右侧,初始化完成后的时间段内,MIPI_D0 ...
哥们,你的SSD2828驱动LCD屏调试得怎么样了?
我对这个很感兴趣,像请教你个问题 SPI Generic mode下对LCD屏通过0XBF发送的发送的数据时什么定义的,有没一个相关协议! BigTang 发表于 2014-11-25 10:51
哥们,你的SSD2828驱动LCD屏调试得怎么样了?
我对这个很感兴趣,像请教你个问题 SPI Generic ...
通过0xBF发送的是屏的初始化 ,跟2828无关,看屏的资料 bias 发表于 2014-11-25 11:23
通过0xBF发送的是屏的初始化 ,跟2828无关,看屏的资料
谢谢,大概知道了。
还有点向您请教:对屏的寄存器读写数据是什么格式(写寄存器 先写地址再写数据)? BigTang 发表于 2014-11-25 11:34
谢谢,大概知道了。
还有点向您请教:对屏的寄存器读写数据是什么格式(写寄存器 先写地址再 ...
通过0xBF发出去的数据,第一个一般是寄存器,后面是数据,跟mcu口初始化液晶一样
bias 发表于 2014-11-25 11:52
通过0xBF发出去的数据,第一个一般是寄存器,后面是数据,跟mcu口初始化液晶一样
...
好的 知道了 谢谢!
页:
[1]
2