1:参考资料-《HIMPP媒体处理软件开发参考》-《屏幕对接指南》-《屏幕时钟时序计算器》-《京东方屏幕驱动》;
2:采用sample中的vdec例程进行改写,实现的主要功能为将JPG图像进行解码并通过MIPI屏幕显示;
3:PLL:倍频-Framebuff:帧缓冲设备,会生成一个/dev/fbx的设备,通过这个即可访问LCD-Alpha:透明度;
4:通过操作显存来实现LCD上显示字符或者图片;
5:mmap函数:将文件映射进内存,使得文件中的一个字节与内存对应;
6:memset函数:将内存中的一块设置为指定的内容;
7:lane:链接接收与发送设备的差分线,使用的京东方屏幕有4组lane;
8:MIPI是物理层的传输规范,包含了DSI(显示串行接口)和CSI(显示命令接口);
9:显示包含了图形层,视频层,设备层,三层通过VGS进行叠加,可以设置Alpha;
10:GPIO口设置为通用输入/输出,使能GPIO管脚>>配置GPIO_DIR,选择输入输出>>配置GPIO_DATA,设置读写信号值;
11:在将光信号转换为电信号的扫描过程中,扫描总是从图像的左上角开始,水平向前行进,同时扫描点也以较慢的速率向下移动。当扫描点到达图像右侧边缘时,扫描点快速返回左侧,重新开始在第1行的起点下面进行第2行扫描,行与行之间的返回过程称为水平消隐。一幅完整的图像扫描信号,由水平消隐间隔分开的行信号序列构成,称为一帧。扫描点扫描完一帧后,要从图像的右下角返回到图像的左上角,开始新一帧的扫描,这一时间间隔,叫做垂直消隐,也称场消隐(VBlank)
12:
13:HBP HFP VBP VFP比较重要
14:显示一行所需要的时间就是:HSPW (hsync)+ HBP + HOZVAL + HFP。
显示一帧所需要的时间就是:VSPW(vsync)+VBP+LINE+VFP 个行时间,
Htatal=hpw+hdisp+hfp+hbp
Vtatal=vpw+vdisp+vfp+vbp
pixel_clk = Htatal*Vtatal*fps (单位HZ,程序中采用KHZ)
Mipiclock = Htatal*Vtatal*fps*bus_hpw/lane_num/2
15:
源码分析:
1:首先是功能展示,由此可知该例程实现了将H264/H265/JPG格式的图像进行输出,这里我们选用JPG格式;
2:进入该函数,屏幕的分辨率是1080*1920(注意宽是1080高是1920!),按步骤进行;
3:到第五步时开始需要自己设置参数,这里需要注意,画布的大小应介于32,32到1080,1920之间,否则会报错误
4:此处开始配置屏幕,将屏幕的参数输入到屏幕时序计算器中,得到各个参数并填入,根据学长经验了解到需要将帧数减小为50,
且频率在100-110之间,
5:再配置用户,也可由计算器中得知,具体均注释出,不再赘述
6:此处:设置视频层的属性,具体可以参考HIMPP手册中的VO_VIDEO_LAYER_ATTR_S结构体的具体含义以及配置;
7:接着开始初始化屏幕,添加一条case,并设置设备属性,具体参数也可由计算器中获得
8:开启屏幕,根据驱动程序的初始化序列向屏幕发送初始化命令,这里涉及到三种传输方式,具体可以参考《屏幕对接指南》;
由于设备已开启就已经点亮了屏幕并已经初始化好屏幕的参数,因此我们需要将屏幕先下电再重新初始化序列,具体代码如下;
初始化之前先给屏幕上电和reset
9:调试过程,调试可以用到两个方法,一种是“cat /dev/logmpp”这是海思的官方日志,串口中的只显示大概的错误,而日志中可以显 示的更为详细,其中的line值并不准确,具体看后面的错误内容。另一个方法是“cat /proc/umap/mipi_tx”通过此命令可以显示你所 配置的各个时序,如下图所示:
10:效果展示:
-----------------------------------------------------------------------------------------------------------------------
踩坑点:
1:初始化序列中0x51寄存器控制的是背光,之前写了0导致屏幕不亮;
2:初始化画布是范围应是(32,32,1080,1920),仅提示未验证原因;
3:更改屏幕参数要HI_MPI_VO_Disable一下;
4: