一、OLED DDIC分类
OLED DDIC的技术方向可以分为3类:带Ram【内存】的IC、Ram-less IC和TDDI【显示&触控集成的IC】
1、带Ram的OLED DDIC
OLED DDIC有两个Ram,分别是Demura Ram和Display Ram。
1、带Ram的OLED DDIC
1-1)Demura Ram:屏幕产家会对面板的显示不均等问题进行补偿,补偿的数据存储在Flash IC内,在正常显示时,OLED DDIC会从Flash IC通过SPI协议Reload对应的自己内部的Demura Ram,用于显示的效果补偿。
1-2)Display Ram:系统传输的图片数据会先存在显示Display Ram内,显示时在通过从Display Ram调用。这种显示方式称为Command mode。在显示静态画面时,系统不要持续送图,显示IC自己刷新Ram即可,在静态画面的场景更省功耗,显示效果较优。
1-3)需要注意的是Display Ram的大小也直接决定了显示IC能支持的帧率和分辨率大小,“3每个颜色的bit位OLED IC的压缩倍率”,即可以计算出所需要占用的Ram大小;比如1280✘2800的分辨率,RGB共计3个颜色,是8个bit,DDIC的VESA选择1/3压缩,因此计算出来的Ram大小为:1280✘2800✘8✘3✘1/3=28672000bit=28.7Mbit。【有关OLED显示屏幕能支持的分辨率和帧率计算,这个后面再发光详细讨论】。
1-3)缺点:Ram的大小基本占到到了IC空间上的75%,因此IC的size会比较大,并且Ram较高。
综上,带Ram的OLED DDIC因为功耗低,显示效果好,是目前各家终端量产的主力。
2、OLED Ramless DDIC
2-1)Ram:Ramless是保留了demura Ram,而砍掉了display Ram。
2-2)驱动:主机需要支持送图给OLED DDIC,即只能跑vedieo模式,在视频场景上,预计功耗和带Ram的相差不大,但是静态场景,功耗会较高。虽然国产厂商推出,在AOD【息屏显示】的场景下,可以借用其demura ram去作为AOD的display,在AOD模式下跑无demura效果的commad mode,这样可以降低AOD模式下的功耗水平;但是Vedio mode和command mode的互相切换,以及有无demura效果对实际用户的使用场景影响,需要调试确认,保守的话,不考虑功耗,全程跑vedio 模式是可以的。
2-2)产能&成本:因为减少了Display Ram,IC的size降低接近一半,同一片晶圆的切片量预估可以提升40%,在结合晶圆价格,可以推算出来相同制程的Ram和Ramless的DDIC,成本约有1.5美金的价差。也正是这个价差,以及连任正非老爷子都要喊着活下去的大环境,各家终端,均在重点关注Ramless的验证和量产导入。目前主要进展最为迅速的是“性价比之王”和“非洲之王”两个终端。
综上,Ramless OLED DDIC除了便宜没有什么好处,是后续降本的趋势。
3、TDDI
OLED显示屏的显示和驱动集成芯片,据说前期是华为与Novatek一同开发,华为被制裁后,Novatek将此芯片变成公版,21年下半年即已经出样,目前各家屏厂和终端均基本完成了验证。
3-1)成本:LCD的触控前期也是采用外挂方案,但是已经与LCD的触控pattern是设计在自己的驱动背板内的,因此LCD的TDDI的panel可以减少光照的mask,成本降低显著,收益明显。OLED的触控当前都是“外挂互容”,驱动上面,很难将触控集成在驱动电路内,现在推出来的OLED TDDI芯片也是针对外挂的,因此panel上面并没有省到任何成本。IC制程上,现在量产的触控IC的模拟和数字部分采用的制程不一样,模拟部分用的110nm相对落后的制程,和显示ic合二为一以后,全部采用先进的40nm或者28nm制程的,成本上会有上升。因此针对OLED TDDI在成本维度上并没有实现“1+1<2”反而会“1+1≥2”;
3-2)触控性能:当前在量产的是外挂式的互容方案,而Novatek目推出的自容方案,理论上对比现有的触控的信噪比会有提升,但是基于笔者验证结果看,其触控性能也仅仅是相对于现在外挂式的性能相当,甚至还会略差;后续厂家也有厂家在检讨互容方案,这个可以期待一下;
3-3)外观:同样因为是“外挂自容”方案,相对于“互容”方案,以经验4mm左右需要一个通道,自容方案的触控走线明显增多,直接导致产品的下边框增加,在笔者所在公司,手机的性能全部要给外观让步【注:实际大部分人买手机也确实因为颜值】,这个是产品经理无法接受的,因此产品并不care;
3-4)功耗收益:OLED TDDI相比较与现在量产的外挂的触控IC,触控部分的制程迭代到了28nm,因此在功耗上是有降低的,也是目前笔者能想到的唯一收益。
3-5)量产情况:虽然在手机上目前并未量产OLED TDDI,但是在小尺寸的OLED手表上面已经量产了;当前流行的上下折叠手机的副屏,各家基本在3寸左右,对整机堆叠空间要求极高,是有明确的需求的,但是目前选用手机的TDDI的话,IC的size过大并且成本高,不利于堆叠;选用手表的OLED TDDI,其对应的通道数又无法支持对应的触控需求,因此上下折叠副屏依然选择手表的DDIC和TPIC。
二、调试方式
1.串口调试
通过串口通信,将调试信息发送到电脑端,电脑使用串口助手显示调试信息
2.显示屏调试
直接将显示屏连接到单片机,将调试信息打印在显示屏上(本节)
3.Keil调试模式
借助Keil软件的调试模式,可使用单步运行、设置断点、查看寄存器及变量等功能
二、硬件电路
7脚就不放上来了
四脚的OLED一般采用I2C的通信协议,上图中的SCL和SDA需要接在32的I2C通信的引脚上(但本节up主教的是GPIO口模拟的I2C通信)
此次接线为:SCL接PB8,SDA接PB9
三、驱动函数
偷懒,直接截图(doge)
使用之前,先初始化一下;函数的第一个为第几行,第二个为第几列
四、代码实现
1.准备驱动函数
OLED驱动函数模块在up提供的程序源码的1-4内,点进去,再次点击4针脚的文件(7脚就选7脚),将里面的三个文件复制粘贴到我们新建的4-1OLED显示屏的hardware文件夹内,并在Keil软件内添加
(1)OLED.c文件只需要更改引脚配置部分和下方初始化的部分(如图),看你自己把SCL和SDA这两个引脚接在了哪两个端口上
我们本次接线外设为GPIOB,端口是8和9
为啥配置为开漏输出:因为标准I2C是有上拉电阻的,没有信号总线高电平,所以要配置成开漏(强制滴)
(开漏输出:仅低电平可以驱动;前面写过的文章3-1GPIO输出)
(2)OLED_Front.h:字库,定义字符的点阵数据,也就是不同的字符有哪些地方需要点亮
2.主函数
(1)老规矩现在main函数最前头include一下OLED.h
(2)在主函数while循环之前进行初始化:OLED_Init();
(3)
①OLED_ShowChar:显示一个字符,第一个参数为第几行,第二参数为第几列,第三个参数为有单引号括起来的字符
②OLED_ShowString:显示字符串,第一、二个参数同上,第三个参数为有双引号括起来的字符串(注意字符串不要超过屏幕了,否则字符串会覆盖或者说字符串乱了,是不会给你第二行接着现实的,自己可以试试)
同时该函数可以用于清除部分,在你想清掉的地方显示空格字符就可以了(OLED_Clear函数局部版)
③OLED_ShowNum:显示无符号十进制数字(全是正的),第一、二个参数同上,第三个参数为数字,第四个参数为显示数字数量
注:若第四个参数大于实际第三个参数的数量,则会在数字前头补0显示(例如,我要显示12345,但是我第四个参数填的6,则OLED显示为012345)如果小于,则会把多余的高位的数据切掉(例如,我还是要显示12345,但是我第四个参数填的4,则OLED显示为2345),这个同样也适用于下面两个函数
④OLED_ShowSignedNum:显示无符号十进制数字,参数和上一个一样,不同的是可以显示负数,第三个参数直接写负数就行(正数不用加正号哦,显示屏显示时会加上正号的,例如,第三个参数写66,显示屏显示为+66)
⑤OLED_ShowHexNum和OLED_ShowBinNum,参数和上面的一样,分别显示十六进制的数和二进制的数(第三个参数都写0x0001,第四个参数:第一个函数写4,第二个函数写16;第一个函数显示为0001,第二个函数显示为0000 0000 0000 0001)
⑥OLED_Clear:清屏;