当前位置:首页 > 公众号精选 > 嵌入式云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设备树修改笔记(熟悉新平台从点灯大法开始)

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

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

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

9月2日消息,不造车的华为或将催生出更大的独角兽公司,随着阿维塔和赛力斯的入局,华为引望愈发显得引人瞩目。

关键字: 阿维塔 塞力斯 华为

加利福尼亚州圣克拉拉县2024年8月30日 /美通社/ -- 数字化转型技术解决方案公司Trianz今天宣布,该公司与Amazon Web Services (AWS)签订了...

关键字: AWS AN BSP 数字化

伦敦2024年8月29日 /美通社/ -- 英国汽车技术公司SODA.Auto推出其旗舰产品SODA V,这是全球首款涵盖汽车工程师从创意到认证的所有需求的工具,可用于创建软件定义汽车。 SODA V工具的开发耗时1.5...

关键字: 汽车 人工智能 智能驱动 BSP

北京2024年8月28日 /美通社/ -- 越来越多用户希望企业业务能7×24不间断运行,同时企业却面临越来越多业务中断的风险,如企业系统复杂性的增加,频繁的功能更新和发布等。如何确保业务连续性,提升韧性,成...

关键字: 亚马逊 解密 控制平面 BSP

8月30日消息,据媒体报道,腾讯和网易近期正在缩减他们对日本游戏市场的投资。

关键字: 腾讯 编码器 CPU

8月28日消息,今天上午,2024中国国际大数据产业博览会开幕式在贵阳举行,华为董事、质量流程IT总裁陶景文发表了演讲。

关键字: 华为 12nm EDA 半导体

8月28日消息,在2024中国国际大数据产业博览会上,华为常务董事、华为云CEO张平安发表演讲称,数字世界的话语权最终是由生态的繁荣决定的。

关键字: 华为 12nm 手机 卫星通信

要点: 有效应对环境变化,经营业绩稳中有升 落实提质增效举措,毛利润率延续升势 战略布局成效显著,战新业务引领增长 以科技创新为引领,提升企业核心竞争力 坚持高质量发展策略,塑强核心竞争优势...

关键字: 通信 BSP 电信运营商 数字经济

北京2024年8月27日 /美通社/ -- 8月21日,由中央广播电视总台与中国电影电视技术学会联合牵头组建的NVI技术创新联盟在BIRTV2024超高清全产业链发展研讨会上宣布正式成立。 活动现场 NVI技术创新联...

关键字: VI 传输协议 音频 BSP

北京2024年8月27日 /美通社/ -- 在8月23日举办的2024年长三角生态绿色一体化发展示范区联合招商会上,软通动力信息技术(集团)股份有限公司(以下简称"软通动力")与长三角投资(上海)有限...

关键字: BSP 信息技术
关闭
关闭