ps:创业开发产品,自学笔记,不一定适合教材性的阅读,零碎整理,自我总结用
材料:4.1寸lcd屏两块,屏自带触控,屏幕资料具备,rk3399和MK8788开发版上分别开发。
开发环境:
1】rk3399
-
- 开发板:友善的rk3399v2开发版,资料链接:
- 处理器:RK3399
- 内核:
- 编译工具:
- LCD:4.1‘’ LCD屏幕
- 参考文献
LCD驱动程序详细讲解(一)_weixin_33935505的博客-CSDN博客
LCD驱动详解 - Lilto - 博客园 (cnblogs.com)
主题:s3c2440移植linux-3.4.2中的LCD驱动_大白菜的博客-CSDN博客
【第2期】韦东山嵌入式Linux之第2期_驱动大全 (100ask.net)
2】Mk8788
- 开发板:自购mk8788 ,具备开发板接口讲解资料、源码
产品规格书:仿照此页面采用联发科I500P(MT8788)芯片方案的4G全网通安卓10平板电脑 | ScenSmart一站式智能制造平台|OEM|ODM|行业方案
一、搭建ubuntu
ps:人傻毛病多,自己给自己制造问题,数之不尽问题,自己慢慢解决吧,主要是真的很琐碎
硬件:
多台电脑、不同系统电脑
下载好ubuntu的桌面版和服务器版(相信未来可以驾驭它),
1、windows环境搭建虚拟机
windows中使用微软的那个啥啥来着,创建实例不会,还没搜索找资料
windows中使用ubuntu官网中的虚拟机感觉很难用
windows中不想使用那个啥啥流行的虚拟机
2、mac m2和m1 mimi搭建
1】下载了paralleres虚拟机,只有试用14天,对此就直接很不想用了,先学linux命令,学会买
2】mac的性能感觉真的很强,编译在虚拟机中可能会很强,然后装个ubuntu的主机去移植吧,主要是写帖子时候目前还到不了移植测试步骤
3、单独设备安装ubuntu系统
二、配置ubuntu
1】开启ssh
2】开启wiff、固定ip
3】更换国内源
4】安装输入法
5】linux 更新命令、安装工具来一遍
三、了解rk3399和mk8788的开发、编译等教程
四、解读lcd屏幕资料
ps:英文很差,基本一字一句的翻译理解,电气术语翻译还会有不通顺处。
五、下载安卓源码、rk3399v2源码和mk8788源码
复制
解压
移动
创建文件
六、.mk文件理解
七、源码文件目录用途
八、移植工具和移植教程
九、刷机相关学习
十、mipi接口的学习
用途:相机和屏幕,接口定义一致时,不知硬件上是否可以调换,然后代码控制?
mipi data是成对的差分信号,屏幕一般为2mipi和4mipi,区别在哪?
博主要开发的屏幕资料中有说明可以选择几路mipi,区别在哪?
对于相机传感器:同一颗sensor【传感器】由于register setting【寄存器/注册设置】不同,输出的信号有可能是2 lane或者4lane等
对于屏幕:lcd drive ic的寄存器?或者ic支持最大4lu,但具体要看Lcd屏的排线实现原理?待定未知
知识点1
MIPI_RDN和MIPI_RDP,有几对这样的pin脚就代表有*路mipi通道
第一路 | MIPI_RDN0 | |
MIPI_RDP0 | ||
第二路 | MIPI_RDN1 | |
MIPI_RDP1 | ||
第三路 | MIPI_RDN2 | |
MIPI_RDP2 | ||
第四路 | MIPI_RDN3 | |
MIPI_RDP3 |
知识点二 时钟
MIPI_RCN和MIPI_RCP:时钟信号
RCN | |
RCP |
CMMCLK | 时钟引脚 |
用法:
知识点三 I2C接口
SCL、SDA十I2C接口
SCL | |
DA |
用法:
mipi接口 参考文:
1⃣️此文作者笔风可爱,所以排第一
【Camera专题】你应该了解的Camera HW-硬件知识_c枫_撸码的日子的博客-CSDN博客_mipi2lane和4laneppi
2⃣️专业度高,直接飙代码
Android Camera驱动分析_Mr.How的博客-CSDN博客_查看当前安卓相机驱动
屏幕mipi接口
mipi接口原理
rgb lcd屏幕和MCU-LCD区别
此链接中很多专业解释的片段,建议大量阅读!
重点1:MCU-LCD屏它与RGB-LCD屏主要区别在于显存的位置.RGB-LCD的显存是由系统内存充当的,因此其大小只受限于系统内存的大小,这样 RGB-LCD可以做出较大尺寸,像4.3"只能算入门级,而MID中7",10"的屏都开始大量使用.
而MCU-LCD的设计之初只要考虑单片机的 内存较小,因此都是把显存内置在LCD模块内部.然后软件通过专门显示命令来更新显存,因此MCU屏往往不能做得很大.同时显示更新速度也比RGB- LCD慢
重点2:RGB显示速度明显比MCU快是因为。。。
mipi和lvds区别
十一、mk8788开发文章
1、MTK8788[android 9.0]GT9XX TP触摸屏驱动流程分析
MTK8788[android 9.0]GT9XX TP触摸屏驱动流程分析_Jimmy8618的博客-CSDN博客_vtouch-supply
摘录:
/* TOUCH start */
&touch {
tpd-resolution = <800 1280>;//分辨率
use-tpd-button = <0>;//如果TP有待按键。则定义值为1
tpd-key-num = <3>;//按键的数量
tpd-key-local= <139 172 158 0>;//按键的编码,一般为KEY_MENU,KEY_HOMEPAGE,KEY_BACK的键值
tpd-key-dim-local = <90 883 100 40 230 883 100 40 370 883 100 40 0 0 0 0>;//按键的布局信息,包含按键的宽度,高度,中心点的坐标
tpd-max-touch-num = <5>;//支持的最大触摸点数
goodix_touch@5e {
compatible = "mediatek,goodix_touch"; //用于匹配GT9xx这个TP驱动
reg = <0x5e>;//GT9xx I2c的地址
interrupt-parent = <&pio>; //中断脚
interrupts = <1 IRQ_TYPE_EDGE_RISING 1 0>;//中断模式是上升沿触发
//vtouch-supply = <&mt_pmic_vldo28_ldo_reg>; //原生MTK节点TP 2.8V PMIC供电
reg-tp-supply = <&mt_pmic_vldo28_ldo_reg>; //由于我们代码上修改了TP 2.8V PMIC供电节点获取是以reg-tp-supply这个字符获取的原生的是由vtouch-supply这个获取的
rst-gpio = <&pio 158 0>;//TP的复位引脚
int-gpio = <&pio 1 0>;//TP的中断引脚
2、
MTK8788[android 9.0]调试笔记 MIPI屏驱动移植_sdkdlwk的博客-CSDN博客
原生MTK LCM屏添加的路径在\vendor\mediatek\proprietary\bootable\bootloader\lk\dev\lcm*
多个屏驱动兼容。。。。
3、显示驱动,源码文件位置
mt8788_android9.0_lcd(lt8912b_mipi2lvds)_1024_768-Android文档类资源-CSDN下载
4、背光调节
mtk8788 pwm频率及背光亮度调节_阿闷的博客-CSDN博客_pwm背光调节
5、小平米调整系统字体
mtk8788 android 9.0 加大系统字体和图标_cerzong的博客-CSDN博客
摘要:由于屏幕(320*320)太小了,客户提个需求希望将APP图标跟系统字体加大,APP图标加大实际就是增大屏幕密度
6、LCD-TFT
LCD 液晶屏驱动详解_屏幕驱动_LTracer的博客-CSDN博客
LCD种类、电路连接及显示原理
LCD,即液晶显示器,是一种采用了液晶控制透光技术来实现色彩的显示器。LCD有很多种类型,比如STN、TFT、LTPS、OLED等。各有优缺点。TFT类型液晶显示器是目前最为主流的液晶显示器。
-
TFT-LCD的数据传输方式有2种:
单扫:对于一整屏的数据,从上到下,从左到右,一个一个地发送出来。
双扫:将一整屏的数据分为上下两部分,同时的从上到下,从左到右,一个一个的发送出来。
区别在哪里?对硬件要求区别?
-
LCD的信号种类:
信号名称 | 描述 |
---|---|
VSYNC | 垂直同步信号 |
HSYNC | 水平同步信号 |
VD[23:0] | 数据信号 |
HCLK | 时钟信号 |
LEND | 行结束信号 |
PWREN | 电源开关信号 |
- 借鉴其他电路模块图
- LCD控制器原理图
- 显示原理
除了配置一些寄存器告诉LCD控制器图像中像素的格式(RGB565),frameBuffer的首地址之类外,对于TFT LCD的访问还需要用到一些信号,所以需要通过配置寄存器来告诉LCD控制器这些信号的信息(比如何时发出控制信号,发出信号的持续时间等),
举个例子:
向LCD驱动器发送图片数据时需要时钟控制(VCLK),一个时钟发送一个像素点,那么控制器就需要主动发出时钟信号,这个时钟是由哪个引脚发出的,发出的频率是多少,这个都是要配置寄存器的,
通过时序图来分析需要用到的一些信号以及如何去配置它们,如果是第一次了解LCD控制,直接看时序还是比较困难的,所以先给出一个形象的比喻 :
frame buffer: 显存,用于存放LCD显示数据;frame buffer通过LCD控制器和LCD Panel建立一一映射关系;
LCD控制器: 参考LCD用户手册,配置LCD控制器,用于发出LCD控制信号,驱动LCD显示;
扫描方式: 如图所示,由start到end的扫描方向是:从左到右,从上到下(扫描方向的一种);
HSYNC: 行同步信号,用于行切换,一行扫描结束,需要扫描新行时,需要先发送行同步信号;
VSYNC: 列同步信号,用于列切换,一帧扫描结束,需要扫描新的一帧时,需要先发送列同步信号;
时钟信号: 每来一个时钟,扫描的点移位一;
上图中LD驱动器可以比喻成电子枪,LCD控制器就是控制这个电子枪的,它从显示缓存中拿像素数据传给电子枪并发送命令让电子枪发射像素颜色, 上图中,成像过程
- LCD控制器发出VSYNC信号,告诉电子枪,要发出一张新帧了,然后电子枪把枪头调转到LCD屏幕的左上角准备开始发射像素
- 发出VSYNC信号的同时,发出HSYNC信号(告诉电子枪新行开始, 从左向右动发射子弹吧)但是电子枪毕竟反应比较慢,过了少许开始发射子弹
对于上面两个过程,由于电子枪接受了VSYNC信号,调转枪头后,需要反应一段时间才能正常开始工作, 所以就白白扫射了几行的无效数据,相当于经过了几个HSYNC信号周期的时间, 一个HSYNC周期就是电子枪扫射一行的时间(从HSYNC信号开始扫射第一行直到到一行结束扫射结束所用时间),就出现了上方无效区 - 当第一行结束时,LCD控制器又发出HSYNC信号, 电子枪枪头扭转到下一行新行开始发射数据, 但是枪头扭转的比较慢, 所以出现了左右的无效区(即第一行结束后,电子枪由于硬件原因要反应一段时间, 所以在右边出现了无效数据区, 调转枪头后, 也得反应一段时间开始发射子弹,所以出现了左边的无效区),有人会问电子枪如何知道第一行何时结束(其实是我们通过寄存器告诉LCD控制器第一行有多少个数据的,我们的屏幕分辨率是480*272, 即这个信息会设置到寄存器里), 当一行结束时,LCD控制器就不会再发有效像素数据,并且等待电子枪游离一段时间,之后再发下一行的HSYNC信号.
- loop第三个过程
- 当扫描到最后一行结束时(一帧即将结束),LCD控制器就不会再发有效像素数据,并且等待电子枪游离一段时间,所以会继续往下扫描,出现了下方的无效区, 之后再发下一行的VSYNC信号, 之后回到过程1开始重复。
在工作中的显示器上,可以在四周看见黑色的边框。上方的黑框是因为当发出VSYNC信号时,需要经过若干行之后第一行数据才有效;下方的黑框是因为显示完所有行的数据时,显示器还没有扫描到最下边(VSYNC信号还没有发出),这时数据是无效的;左边的黑框是因为当发出HSYNC信号时,需要经过若干像素之后第一列数据才有效;右边的黑框是因为显示完一行数据时,显示器还没扫描到最右边(HSYNC信号还没有发出),这时数据已经无效。显示器只会依据VSYNC、HSYNC信号来取得、显示数据,并不理会该数据是否有效,何时发出有效的数据由显卡或LCD控制器决定。
VSYNC信号出现的频率表示一秒钟内能显示多少帧图像,称为垂直频率或场频率,这就是我们常说的“显示器频率”;
HSYNC信号出现的频率称为水平频率,表示一秒钟能显示多少个像素的数据。
显示器上,一帧数据的存放位置与VSYNC、HSYNC信号的关系如下图所示:
image-20210718155614982
有效数据的行数、列数,即分辨率,它与VSYNC、HSYNC信号之间的距离等,都是可以设置的