3寸屏幕
硬件平台
3寸屏:ST7701S驱动芯片,mipi接口,2lane
rv1126:易佰纳38板、正点原子rv1126开发板
所需资料
《屏幕规格书》、《开发板原理图》、《屏幕初始化序列》、《ST7701S数据手册》《rk屏幕相关文档》
驱动板绘制
因为开发板的DSI接口和屏幕的线序并不匹配,因此需要绘制转接驱动板,这里以易佰纳的开发板为例,DSI接口线序如下,这里主要关注供电输出为12V,CLKN、CLKP、D0N、D0P、D1N、D1P以及RST引脚,其中RST连接到的是GPIO2_D6,IO电压为3.3V(这里很重要,因为屏幕的RST电压要求3.3V才行,而正点原子的RST电压仅为1.8V导致屏幕一直没有反应)
原理图
背光电源芯片选用恒流输出的MP3302DJ,屏幕背光需要18V20mA,电流计算公式为200mV/R1因此采样电阻R1选用10R使之恒流20mA
LAYOUT
由于使用的是MIPI DSI接口,使用的是高速差分信号对,因此先要了解一下MIPI的布线规则。
MIPI布线规则
1:MIPI 的差分线阻抗(电压与电流的比值)控制标准是100 欧姆,误差不能大于±10%;
2:MIPI信号线下方最好有连续的地层(至少宽度为mipi单条线宽的4倍);
3:线对之间的误差不要超过10mil,即等长以确保数据同时到达,保证数据的正确性;
4:线对与线对之间的误差不要超过200mil;
5:线对之间要保持对称和等距,以保证信号的稳定;
6:线对与线对之间要保持3W以上的距离,防止干扰;
计算线宽和线距
1:打开嘉立创阻抗计算器,得出线距为4,线宽为6.19;
按照要求布线即可
RV1126适配屏幕
rv1126的屏幕驱动使用的是simple-panel驱动,我们只需要配置好设备树即可,可以参考《Rockchip_DRM_Panel_Porting_Guide》,其中所需的一些信息需要通过查找屏幕厂商提供的资料进行获得:
获取屏幕的时序和初始化序列,打开《屏幕数据手册》,可以获取以下信息,屏幕的显示物理尺寸为36.72mm*65.28mm,分辨率为480*854.
timing
打开初始化序列得到屏幕时序
HSYNC叫做水平同步信号(行同步信号)此信号表示新的一行开始,VSYNC表示垂直同步信号(帧同步信号)表示要开始新的一帧,由于硬件本身的特性会导致一定的延时,因此图像只显示在有效显示区域显示,而黑边(无效显示区域)就是为了延时而存在的。
1)一行即将显示,扫描枪就会快速移至左边,当HSYNC信号发起并结束,扫描枪打开;
2)扫描枪打开后延时HBP后继续扫描,此时开始处正是显示有效区域;
3)一行扫描结束后,扫描抢关闭等待HSYNC信号到来耗时HFP时间;
4)重复1/2/3步骤直至一帧扫描完成;
5)显示一帧后,等待VSYNC信号,耗时VFP;
6)VSYNC信号发起并结束,扫描枪重新移到左上角后打开后延时VBP开始等待HSYNC信号并继续步骤1
这里需要注意:水平方向上延时都是按照像素计算的,但是垂直方向上都是按照行来计算的!!!(看图更加直观)
计算公式:
单位均是CLK
HOZVAL为有效显示宽度,单位为像素
LINE为有效显示行数,单位为行
显示一行所需要的时间就是:HSYNC(HSPW )+ HBP + HOZVAL + HFP个像素之间(一般为clk)
显示一帧所需要的时间就是:VSYNC+VBP+LINE+VFP个行时间(行数)
最终耗时:T=行数*行时间=(VSYNC+VBP+LINE+VFP)*(HSYNC(HSPW )+ HBP + HOZVAL + HFP)clks
以本屏幕为例子计算一下
一帧耗时:(10+42+4+854)*(480+8+2+43)=485030clk
60fps为60*485030=29.1MHZ
初始化序列
由于是mipi屏幕,因此需要初始化序列来初始化屏幕的驱动芯片,初始化序列如下所示,其中初始化序列格式为[数据包类型 延时时长 数据包大小 数据]其中数据包类型有0x39 0x15 0x05等等,0x39表示长写入命令,即数据+命令>2,0x15表示短写入命令,即数据+命令=2,0x05为短写命令,发送单命令或者单数据
最后重新生成内核并烧入,
dmesg | grep drm
查看当前显示状态
cat /sys/kernel/debug/dri/0/summary
显示设备使用的vop(显示控制器)为ffb00000.vop,使用的接口为DSI,使用的是win2-0图层
查看drm buffer使用情况
屏幕成功点亮: