引入

我之前有两方面的使用屏幕的案例。在做的模块上需要用到屏幕来显示的时候,全是SPI屏幕,并口屏幕和IIC屏幕。在研究了驱动(或者是绘图函数更加合适)之后,我发现其实他们就是直接写显存,这个显存在面板驱动芯片内部。在废旧笔记本显示器再利用的方面,当时经常是另买一个40pin的驱动版和面板接在一起,再把HDMI或者DP接在驱动板上就能废物利用。

这次在我决定做comdex之后,我需要选一块看得过去的屏幕跑LVGL。这个屏幕尺寸不能太大,分辨率不能太低,另外,价格不能太贵,毕竟是要做N个送人的。做咸鱼蹲了一周之后我淘到一款18元的HX8369A控制的480*800的屏幕,并顺带研究下接口驱动。

本篇主要总结的是屏幕协议及其选择。未来可能会有针对微控制器的主机接口用法分析。

显示接口

本小结以几个协议原文、几个屏幕相关的数据手册原文为叙述基础,细节追溯带有我个人应用倾向性。

参考文档:

  1. MIPI联盟的DBI协议原文 MIPI Alliance Standard for Display Bus Interface v2.0 链接:https://share.weiyun.com/pgTKrIiV;
  2. MIPI联盟的DPI协议原文 MIPI Alliance Standard for Display Pixel Interface (DPI-2) 链接:https://share.weiyun.com/I7SXtSYQ;

概念

我们在学习的时候需要明确一些概念或者说专有明词是什么意思。首先是MIPI:

MIPI:全写为Mobile Industry Processor Interface,即移动产业处理器接口,MIPI Alliance,MIPI联盟,制定MIPI相关标准的组织,跟USB一样肯定也是一对耳熟能详的巨头企业联合发起搞的。我查了下中国的页里第一个就是全志,也看到小米和VIVO,但没有看到华为。DWG(Display Working Group)是MIPI联盟的一个工作组,下面的三个名词(不包括LCM)是DWG搞的。这里有一个瑞萨的PPT文档有阅读的价值,主要是讲了DCS命令,瑞萨的官网没找到,只在豆丁上有,4块钱我没舍得买,就放个链接:https://www.docin.com/p-1571989966.html

需要注意的是MIPI不是一个接口的名字,买屏幕时常见的说自己是MIPI接口的,我理解为他说的是DSI接口:

DSI:全写为Display serial interface,显示串行接口,是MIPI联盟定义的一种图象输出接口,是串行的,应该是由时钟和数据线组成,并用差分线的形式输出,频率相对很高,需要有专用的PHY,在高级点的应用中常见,在STM出的应用处理器MP157上就有,数据手册原文是“MIPI DSI 2 data lanes up to 1 GHz each”。注意类比也是MIPI联盟定义的CSI接口。DSI不是本文的重点。

DBI:全写为Display Bus Interface,显示总线接口,是MIPI联盟定义的一种图象接口,是并行的,也是我引文中提到的用单片机并口控制屏幕,业界也有称为MCU接口,正点原子出的一款4.3寸的屏幕用的这个接口,亲爱的杨神在大二时送我的屏幕也是此接口。DBI接口不是此次制作的重点。STM32F429数据手册里第一页提到的“LCD parallel interface, 8080/6800 modes”就是DBI接口,应该是和FSMC合用同一个外设的。

DPI:全写为Display Pixel Interface,显示像素接口,是MIPI联盟定义的一种图象接口,是并行的,是我们最常用的使用单片机LCDIF外设控制屏幕的接口,也是高端应用常见的接口,是本次制作和总结的重点。业内也有将其称为RGB接口。STM32F429的手册上称实现它的控制器为"LCD-TFT controller up to VGA resolution"。

插入思考:DPI常用来控制更大的屏幕,原因是DPI能直接写像素,而DBI则需要在驱动控制器(Driver controller)中集成显存(Graphic RAM),DBI可以允许主机通过命令修改显存中的部分值改变部分像素值。注意,这些命令(DCS)也是被MIPI定义了的标准命令,也就是说,当我们买到屏幕后商家给的初始化代码里长串的向驱动控制器中写入的命令和值的含义是有案可查的。需要集成显存应该是DBI接口应用在驱动控制器上的一个瓶颈,如果是一个1366*768的屏幕,就需要1366*768*3共3MB多的RAM,这无疑是巨大的面积开销。

LCM:全写为LCD Module,LCD模组,参考的两个协议中没有看到这个词的定义,我理解为包括LCD液晶面板,驱动控制器,接口排线和必要的固定保护件组成的模块,比我18块钱买的这个屏幕。我室友设计的是其中的驱动控制器,比如我买的LCM中的HX8369A,这个小芯片以特殊的工艺焊接在液晶面板上,它除了有主机侧的DBI/DPI/DSI接口的引脚外,还有千个以上的接面板的引脚。难道LCD也是像LED点阵一样逐行点亮的吗?

电路预设计

我拿到的这个屏幕商家说是支持MCU、RGB和SPI三种接口的,那么如何告知屏幕我选择的接口,如何初始化呢。如下图一。

图一 HX8369A的接口选择

DBI总线的认识

由图可见DBI/DPI内部也是略有复杂,且SPI怎么控制屏幕也是DBI总线的一种实现方式。经查DBI协议,DBI的type A和type B主要是读写信号线是合一还是分开的问题,type A还多了多了一个E clock线,并不重要。但是DBI的type C是串行模式,即SPI来实现。见下图二。

图二 DBI type C模式接线图

由上图可以得到这么几个要素:1,type C需要片选,复位,始终,命令\数据切换,数据输入和数据输出这么几个信号线;2,数据输入和数据输出是可以共用同一个线。

继续来认识type C的三个选项,这其实就是如何解决命令\数据切换的问题,因为协议中说命令数据切换线是可选的,不强制。但是我看了半天协议其实没有分出type C的option 1和2的区别,这里放上时序原图截图,请后续看到的人也一并想想。

图三 DBI type C option 1的时序

图四 DBI type C option 2的时序

option 3的时序就相对很好懂了。因为我用的SPI口的屏幕就是如此驱动的。这里也发出SPI口控制屏幕,也就是DBI type C option 3的时序截图。很明显,option 3通过命令线的高低电平值来确定当前是数据还是命令。

图五 DBI type C option 3的时序

DPI的时序认识

图一最右侧的显示模式中的模式一表示显存在驱动控制器之内,如图六。它可以由DBI模式来驱动。

图六 显示模式1

模式三则驱动控制器没有显存。显存放在主存里。这只能是DPI的模式,数据直接怼到面板上。

图七 显示模式3

DPI就是RGB接口,由行信号(水平同步,HSYNC),帧信号(垂直同步,VSYNC),数据有效信号(数据使能,LCD_DE),像素时钟(LCD_CLK),数据线组(LCD_R[7:0],LCD_G[7:0],LCD_B[7:0]),还有两根线不常用到就不赘述了。跟DVP的信号有点像啊,只是DVP没有数据有效信号,且数据线宽度没有这么高。

从电路到UI系列之一——常见显示控制接口的认识的更多相关文章

  1. Android UI系列-----时间、日期、Toasts和进度条Dialog

    您可以通过点击 右下角 的按钮 来对文章内容作出评价, 也可以通过左下方的 关注按钮 来关注我的博客的最新动态. 如果文章内容对您有帮助, 不要忘记点击右下角的 推荐按钮 来支持一下哦 如果您对文章内 ...

  2. 【转】Android UI系列-----时间、日期、Toasts和进度条Dialog

    原文网址:http://www.cnblogs.com/xiaoluo501395377/p/3421727.html 您可以通过点击 右下角 的按钮 来对文章内容作出评价, 也可以通过左下方的 关注 ...

  3. Lance老师UI系列教程第八课->新浪新闻SlidingMenu界面的实现

    UI系列教程第八课:Lance老师UI系列教程第八课->新浪新闻SlidingMenu界面的实现 今天蓝老师要讲的是关于新浪新闻侧滑界面的实现.先看看原图: 如图所示,这种侧滑效果以另一种方式替 ...

  4. unity UI如何开启(显示)或者关闭(隐藏)Panel界面最好?

    https://segmentfault.com/a/1190000012357091 unity UI如何开启(显示)或者关闭(隐藏)Panel界面,相信大家都是知道的,但是如何做最好呢? 可能大家 ...

  5. 【Kendo UI系列开发使用笔记】01-简单介绍

    ps:接触telerik出品的kendo ui系列已经快有一年了,使用过程中也在不断踩坑填坑.这套UI用起来还是非常爽的,尤其asp.net mvc版的配合lambda表达式来配置参数非常流畅.这次对 ...

  6. element UI 饿了么 UI 分页 按钮不显示的问题

    https://blog.csdn.net/sinat_37255207/article/details/88914235 一个很坑的 深坑  element UI 的 按钮 不显示的深坑 <e ...

  7. webpack打包绝对路径引用资源和element ui字体图标不显示的解决办法

    webpack打包绝对路径引用资源解决办法: 打开webpack.prod.conf.js 找到output:增加 publicPath: './',  即可,如图  element ui字体图标不显 ...

  8. C# 基础知识系列-13 常见类库(三)

    0. 前言 在<C# 基础知识系列- 13 常见类库(二)>中,我们介绍了一下DateTime和TimeSpan这两个结构体的内容,也就是C#中日期时间的简单操作.本篇将介绍Guid和Nu ...

  9. .net 反射访问私有变量和私有方法 如何创建C# Closure ? C# 批量生成随机密码,必须包含数字和字母,并用加密算法加密 C#中的foreach和yield 数组为什么可以使用linq查询 C#中的 具名参数 和 可选参数 显示实现接口 异步CTP(Async CTP)为什么那样工作? C#多线程基础,适合新手了解 C#加快Bitmap的访问速度 C#实现对图片文件的压

    以下为本次实践代码: using System; using System.Collections.Generic; using System.ComponentModel; using System ...

随机推荐

  1. Net之多线程用法

    1.多线程 2.线程池 3.Task using System; using System.Collections.Generic; using System.Linq; using System.T ...

  2. Java基础——Object类

    一.概述: Object是类层次结构的根,每个类都可以将Object作为超类.所有类都直接或者间接的继承该类 有一个构造方法 public Object() 面向对象中子类的构造方法默认访问的是父类的 ...

  3. contos 配置国内yum源

    contos配置国内yum源 前言 rpm管理软件包的命令,很难用,需要手动解决以来关系,所以最好用 yum 的理念是使用一个中心仓库(repository)管理一部分甚至一个distribution ...

  4. 基于WebSocket的简易聊天室

    用的是Flash + WebSocket 哦~ Flask 之 WebSocket 一.项目结构: 二.导入模块 pip3 install gevent-websocket 三.先来看一个一对一聊天的 ...

  5. Redis运维实战之集群中的脑裂

    1.对于分布式Redis主从集群来说,什么是脑裂? 所谓的脑裂,就是指在主从集群中,同时有两个主节点,它们都能接收写请求.而脑裂最直接的影响,就是客户端不知道应该往哪个主节点写入数据,结果就是不同的客 ...

  6. T12焊台控制器制作教程 | T12烙铁 | PID增量式算法恒温控制 | 运算放大器-热电偶电压采集 | OLED屏幕显示-SPI通信 | 旋转编码器EC11用户操作

    前言 购买T12烙铁的相关配件已经1年多了,期间也尝试了一些开源的T12控制器,但都没有成功,要么是配套资料少,要么是英文的,其中51和arduino的居多,STM32的较少.求人不如求己,索性自己开 ...

  7. golang实现WebSocket的商业化使用的开发逻辑(1)

    WebSocket是什么 WebSocket 是一种在单个 TCP 连接上进行全双工通信的协议.其最大特点之一就是:服务器可以主动向客户端推送信息,客户端也可以主动向服务器发送信息,是真正的双向平等对 ...

  8. luoguP6624 [省选联考 2020 A 卷] 作业题(莫比乌斯反演,矩阵树定理)

    luoguP6624 [省选联考 2020 A 卷] 作业题(莫比乌斯反演,矩阵树定理) Luogu 题外话: Day2一题没切. 我是傻逼. 题解时间 某种意义上说刻在DNA里的柿子,大概是很多人学 ...

  9. 面试问题之C++语言:简述编译过程

    转载于:https://blog.csdn.net/ypshowm/article/details/89374706 编译过程主要分为四步: 1.词法分析(扫描) 运行类似于有限状态机的算法将源代码的 ...

  10. 请解释Spring Bean的生命周期?

    首先说一下Servlet的生命周期:实例化,初始init,接收请求service,销毁destroy: Spring上下文中的Bean生命周期也类似,如下: (1)实例化Bean: 对于BeanFac ...