当前位置:首页 > 公众号精选 > 嵌入式云IOT技术圈
[导读]点击上方「嵌入式云IOT技术圈」,选择「置顶公众号」第一时间查看嵌入式笔记!上一篇文章,我们简单的列举了MIPI-DSI驱动的一些常用参数的基本解读,但是那仅仅是走马观花走了一遍,真正深入往里钻的话还是很难的,文章如下:LinuxMIPIDSILCD设备驱动开发调试细节学习笔记(...

点击上方「嵌入式云IOT技术圈」,选择「置顶公众号」第一时间查看嵌入式笔记!


上一篇文章,我们简单的列举了MIPI-DSI驱动的一些常用参数的基本解读,但是那仅仅是走马观花走了一遍,真正深入往里钻的话还是很难的,文章如下:


Linux MIPI DSI LCD设备驱动开发调试细节学习笔记(一)

1、MIPI LCD初始化序列描述

在上一篇文章中,我们看到荣品的屏设备树中有这么一段代码,但是里面的数据是什么含义呢?

panel-init-sequence = [
   05 78 01 11
   05 78 01 29
  ];
今天来详细记录下我学习在设备树中适配MIPI-DSI LCD初始化代码的详细过程。Linux提供了配置初始化代码的接口,相应的设备树也就支持了,这部分在内核的文档里有写:

kernel/Documentation/devicetree/bindings/display/panel/simple-panel.txt
这个文档里简单描述了一下:

- panel-init-sequence:
- panel-exit-sequence:
 A byte stream formed by simple multiple dcs packets.
  byte 0: dcs data type
  byte 1: wait number of specified ms after dcs command transmitted
  byte 2: packet payload length
  byte 3 and beyond: number byte of payload
翻译过来大概的意思是:

初始化序列
退出序列
由简单的多个dcs数据包形成的字节流
第0个字节:dcs数据类型
第1个字节:发送dcs命令后等待指定的毫秒数
第2个字节:数据包有效载荷长度
第3个字节及以后:有效载荷的字节数
一般情况下LCD屏会有初始化和反初始化的过程,但是在实际应用中,一般还很少会用到反初始化,所以LCD面板厂家一般都是只提供初始化代码,在MIPI DSI驱动中,我们需要将这些厂家提供的初始化代码转换为相应的DCS序列,关于初始化序列和退出序列的描述,由于我用的平台是瑞芯微,瑞芯微提供的技术文档也有相应的描述:具体参数配置方法,查看原厂瑞芯微给的文档的案例描述:

关于 DCS 类型是怎么来理解的,瑞芯微文档中也可以看到对它的描述:

个人的理解方法:

如果只有一个数据,对应的命令类型是0x05;如果有两个数据,对应的命令类型是0x15;如果多于两个数据,对应的命令类型是0x39

2、具体的配置方法(举例)
最近由于需要调试MIPI接口的LCD显示屏,然而我已经很久没调过驱动了;厂家给了我下面这一段初始化代码,我一看一脸懵逼,对于好多年没搞驱动的我不免觉得有点心虚,怕是月底验收任务的时候要被扣KPI了,厂商的初始化代码如下:

SET_GENERIC(0x02);
W_D(0x80);W_D(0xAB);
SET_GENERIC(0x02);
W_D(0x81);W_D(0x4B);
SET_GENERIC(0x02);
W_D(0x82);W_D(0x84);
SET_GENERIC(0x02);
W_D(0x83);W_D(0x88);
SET_GENERIC(0x02);
W_D(0x84);W_D(0xA8);
SET_GENERIC(0x02);
W_D(0x85);W_D(0xE3);
SET_GENERIC(0x02);
W_D(0x86);W_D(0xB8);
SET_GENERIC(0x02);
W_D(0x87);W_D(0x5A);
SET_GENERIC(0x02);
W_D(0xB1);W_D(0x38);
SET_GENERIC(0x01);
W_D(0x11);
delay_ms(120);
SET_GENERIC(0x01);
W_D(0x29);
那么这个初始化代码是什么含义呢?厂家一般不会告诉我,也不会给我提供寄存器手册,因为那是他们的知识产权,所以我也没必要知道他们到底设置了什么东西,我只需要知道它们就是协助我点屏的重要步骤之一就可以了。

我们就简单的认为这个初始化代码包含三类指令,分别是:

  • SET_GENERIC
  • W_D
  • delay_ms
不同厂家提供的初始化代码是不同的,但格式基本上都是大同小异,有的初始化代码很少,也有的超级长,比如荣品的设备树里就有一个更长的,如下所示,这个是已经将初始化代码转换为DCS格式的了:

可见有些LCD面板厂家提供的初始化代码也是很多的,所以搞这个真的还是要有点耐心的,否则很容易出错,一旦出错,可能屏幕都点不亮。以上只是举一个简单的例子,我们需要将上面厂家给我的初始化命令转化成对应的DCS格式,然后添加到设备树的初始化序列里,这样驱动在加载的时候才能够被正确识别到。

首先感谢CSDN网友提供以下思路:

https://blog.csdn.net/sunqinglin4826/article/details/104848529
https://blog.csdn.net/weixin_42399752/article/details/101108550
https://blog.csdn.net/dearsq/article/details/52354593
既然要将初始化代码转换成DCS格式,那么就衍生出下面的步骤:

  • 数个数
SET_GENERIC为开始,下一个SET_GENERIC(不包含这次的SET_GENERICDelay)为结束作为一次数据发送,数一数一共有几个数据。

  • 看延时
看看厂家提供的初始化代码里面有没有延时。

确定了以上步骤以后,我们就需要将初始化代码改写成下面的格式:

命令类型 延时数量 数据长度 数据
2.1、普通序列
SET_GENERIC(0x02);
W_D(0x80);W_D(0xAB);
如上,有三个数据,所以命令类型为39,所以第一个序列要这么写:

以下每一个字节一一进行对应:
命令类型 延时数量 数据长度 数据1 数据2 数据3
  39   00   03   02   80  AB
2.2、带延时的序列
SET_GENERIC(0x01);
W_D(0x11);
delay_ms(120);
如上,有两个数据,1个延时,所以命令类型为15,所以带延时的序列要这么写:

以下每一个字节一一进行对应:
命令类型 延时数量(转16进制)  数据长度  数据1  数据2
 15      78        02   01   11 
2.3、将厂家给的序列转换为DCS格式序列
以此类推,从厂家给我们的初始化代码转换为序列就是:

39 00 03 02 80 AB
39 00 03 02 81 4B
39 00 03 02 82 84
39 00 03 02 83 88
39 00 03 02 84 A8
39 00 03 02 85 E3
39 00 03 02 86 B8
39 00 03 02 87 5A
39 00 03 02 B1 38
15 78 02 01 11
15 00 02 01 29
所以在设备树里的初始化序列就应该这么写,把上面转换的结果复制到下面来:

panel-init-sequence = [
  39 00 03 02 80 AB
  39 00 03 02 81 4B
  39 00 03 02 82 84
  39 00 03 02 83 88
  39 00 03 02 84 A8
  39 00 03 02 85 E3
  39 00 03 02 86 B8
  39 00 03 02 87 5A
  39 00 03 02 B1 38
  15 78 02 01 11
  15 00 02 01 29
];
所以我们就不难理解以上荣品的DTS里初始化序列的含义:

panel-init-sequence = [
   05 78 01 11
   05 78 01 29
  ];
第一行:

  • 05表示DCS命令类型,表示只有一个数据。
  • 78表示延时时间为(0x78)=> 120ms
  • 01表示指令的数据长度只有一个字节
  • 11表示的就是数据
同理,第二行也是一样的理解,到这里我们就彻底的掌握了设备树关于初始化序列的配置方法了,如果想详细了解驱动代码里是怎么实现的,那么也可以去追一追代码,我觉得这种实现模式太优秀了,不得不说Linux内核实现的DSI驱动设计思想真的很棒!

还有很多内容,分几个章节来写吧,今天就学习总结到这了。

往期精彩

一个强大的音视频编解码库-rkmedia的应用

瑞芯微RV1109配置7寸电容触摸屏的方向修改笔记

如何添加APP到Buildroot里(以瑞芯微rv1126为例)

瑞芯微RV1109配置GPIO设备树修改笔记(熟悉新平台从点灯大法开始)

新产品立项了,作为嵌入式软件工程师该如何来开展设计工作?(个人经验分享)

觉得本次分享的文章对您有帮助,随手点[在看]并转发分享,也是对我的支持。

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

昆山2023年9月15日 /美通社/ -- 万豪旅享家旗下31个非凡品牌之一的万枫酒店今日宣布,昆山万枫酒店盛大开业。昆山市是首批"国家生态园林城市",旅游资源丰富,素有"百戏之祖,昆曲之乡...

关键字: 液晶电视 灯光 调试 高铁

覆盖华东、华北和西部的三大客户创新与应用中心在两年内相继开业 以客户为中心的本地化战略迎来重要里程碑 成都2023年9月7日 /美通社/ -- 生命科学集团赛多利斯持续扩张在华足迹,并于今日正式启用西部区...

关键字: 质量检测 仪器 生物技术 调试

随着全球汽车市场的快速发展,我们可以看到技术在多个维度上的快速迭代和演化,例如智能网联汽车和自动驾驶辅助系统(ADAS)的进步。智能化、互联化趋势给汽车系统内日益复杂的传感器与图像传输的协作带来了新的挑战。

关键字: 图像数据 自动驾驶辅助系统 MIPI

妇科大咖云集 共话日间诊疗新模式 北京2023年3月7日 /美通社/ -- 为进一步推广由郎景和院士牵头,朱兰教授等我国多位著名妇科医学专家共同编著《日间宫腔镜手术中心设置及管理流程中国专家共识》,普及日间宫腔镜诊疗理...

关键字: 东风 内窥镜 编写 调试

在完成应用系统的硬件组装和软件设计以后,便进入系统调试阶段。这个阶段的任务是排除样机中的硬件故 障和纠正软件中的设计错误,并解 决硬件和软件之间的不协调问题 。下面介绍几种调试方法。

关键字: MCS 51 应用系统 调试 加电复位电路

南京2022年12月16日 /美通社/ -- 近日,南瑞集团参建的全国首台(套)单机650MW水电机组全国产调速器、励磁系统在华能糯扎渡水电站#1机组成功投运,为我国水电站核心技术国产化替代提供了“示范样板”。 南瑞集...

关键字: 控制系统 电站 调速器 调试

Arasan宣布可立即提供MIPI CSI IP,其支持FPGA设计高达54.72Gbps(当所有3个通道运行高达8Gsps时)的C-PHY v2.0速度。  加...

关键字: MIPI AN ASIC COM

Arasan发布一款全新版本的MIPI CSI IP,其符合CSI-2 v2.1规范,支持FPGA设计高达8Gbps(用于1通道)的C-PHY v2.0速度。该IP设计用于满足FPGA计时限制,以在较低频率下运行,同时仍...

关键字: MIPI AN FPGA设计 GBPS

(全球TMT2022年11月11日讯)Arasan发布了一款全新版本的MIPI DSI IP,其符合DSI-2 v1.0规范,支持FPGA设计在8Gbps(用于1通道)运行时高达54.72Gbps的C-PHY v2.0...

关键字: MIPI AN ASIC GBPS

Arasan宣布可立即提供MIPI DSI IP,其支持FPGA设计高达54.72Gbps的C-PHY v2.0速度。  加利福尼亚州圣何塞2022年11月10日...

关键字: MIPI AN ASIC COM
关闭
关闭