从电路到UI系列之一——常见显示控制接口的认识
引入
我之前有两方面的使用屏幕的案例。在做的模块上需要用到屏幕来显示的时候,全是SPI屏幕,并口屏幕和IIC屏幕。在研究了驱动(或者是绘图函数更加合适)之后,我发现其实他们就是直接写显存,这个显存在面板驱动芯片内部。在废旧笔记本显示器再利用的方面,当时经常是另买一个40pin的驱动版和面板接在一起,再把HDMI或者DP接在驱动板上就能废物利用。
这次在我决定做comdex之后,我需要选一块看得过去的屏幕跑LVGL。这个屏幕尺寸不能太大,分辨率不能太低,另外,价格不能太贵,毕竟是要做N个送人的。做咸鱼蹲了一周之后我淘到一款18元的HX8369A控制的480*800的屏幕,并顺带研究下接口驱动。
本篇主要总结的是屏幕协议及其选择。未来可能会有针对微控制器的主机接口用法分析。
显示接口
本小结以几个协议原文、几个屏幕相关的数据手册原文为叙述基础,细节追溯带有我个人应用倾向性。
参考文档:
- MIPI联盟的DBI协议原文 MIPI Alliance Standard for Display Bus Interface v2.0 链接:https://share.weiyun.com/pgTKrIiV;
- 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系列之一——常见显示控制接口的认识的更多相关文章
- Android UI系列-----时间、日期、Toasts和进度条Dialog
您可以通过点击 右下角 的按钮 来对文章内容作出评价, 也可以通过左下方的 关注按钮 来关注我的博客的最新动态. 如果文章内容对您有帮助, 不要忘记点击右下角的 推荐按钮 来支持一下哦 如果您对文章内 ...
- 【转】Android UI系列-----时间、日期、Toasts和进度条Dialog
原文网址:http://www.cnblogs.com/xiaoluo501395377/p/3421727.html 您可以通过点击 右下角 的按钮 来对文章内容作出评价, 也可以通过左下方的 关注 ...
- Lance老师UI系列教程第八课->新浪新闻SlidingMenu界面的实现
UI系列教程第八课:Lance老师UI系列教程第八课->新浪新闻SlidingMenu界面的实现 今天蓝老师要讲的是关于新浪新闻侧滑界面的实现.先看看原图: 如图所示,这种侧滑效果以另一种方式替 ...
- unity UI如何开启(显示)或者关闭(隐藏)Panel界面最好?
https://segmentfault.com/a/1190000012357091 unity UI如何开启(显示)或者关闭(隐藏)Panel界面,相信大家都是知道的,但是如何做最好呢? 可能大家 ...
- 【Kendo UI系列开发使用笔记】01-简单介绍
ps:接触telerik出品的kendo ui系列已经快有一年了,使用过程中也在不断踩坑填坑.这套UI用起来还是非常爽的,尤其asp.net mvc版的配合lambda表达式来配置参数非常流畅.这次对 ...
- element UI 饿了么 UI 分页 按钮不显示的问题
https://blog.csdn.net/sinat_37255207/article/details/88914235 一个很坑的 深坑 element UI 的 按钮 不显示的深坑 <e ...
- webpack打包绝对路径引用资源和element ui字体图标不显示的解决办法
webpack打包绝对路径引用资源解决办法: 打开webpack.prod.conf.js 找到output:增加 publicPath: './', 即可,如图 element ui字体图标不显 ...
- C# 基础知识系列-13 常见类库(三)
0. 前言 在<C# 基础知识系列- 13 常见类库(二)>中,我们介绍了一下DateTime和TimeSpan这两个结构体的内容,也就是C#中日期时间的简单操作.本篇将介绍Guid和Nu ...
- .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 ...
随机推荐
- VS2010 查看代码编辑器中的变量
查看变量的使用情况 1.选中代码中的变量 2.右键 Find Usages
- Flink域名处理
概述 最近做了一个小任务,要使用Flink处理域名数据,在4GB的域名文档中求出每个域名的顶级域名,最后输出每个顶级域名下的前10个子级域名.一个比较简单的入门级Flink应用,代码很容易写,主要用到 ...
- Git指令小结
一.初始化 git config --global user.name "username" 设置git用户名 git config --global user.email &qu ...
- 通过webgoat-xxe、jwt学习Java代码审计
WebGoat-JWT JWT Tokens 01 概念 本课程将介绍如何使用JSON Web Token(JWT)进行身份验证,以及在使用JWT时需要注意的常见陷阱. 目标 教授如何安全地实现令牌的 ...
- SIMOTION D435-2 PN报错1915,无法进入RUN状态 解决方法
1.现象 2.解决方法 以下几种情况会导致SIMOTION D CPU无法RUN状态: 1.SIMOTION D设置CPU上电后自动进入RUN状态,上电后D4x5 CPU准备就绪,开始执行系统任务区的 ...
- SpringBoot+Vue+mysql 搭建(一)
一.创建Spring boot maven 项目 Spring initializr 是Spring 官方提供的一个用来初始化一个Spring boot 项目的工具. 在idea中,直接 File-& ...
- Struts2里面有什么隐式对象?
Struts 2.1 的隐式对象 (这些隐式对象都是Map类型) parameters 用于访问请求参数 request 用于访问HttpServletRequest的属性 session 用于访问H ...
- WebApplicationContext?
WebApplicationContext 继承了ApplicationContext 并增加了一些WEB应用必备的特有功能,它不同于一般的ApplicationContext ,因为它能处理主题, ...
- 什么是通知Advice?
特定 JoinPoint 处的 Aspect 所采取的动作称为 Advice.Spring AOP 使用一个 Advice 作为拦截器,在 JoinPoint "周围"维护一系列的 ...
- JavaScript的取值小技巧之“中括号[]取值法”
一.简介 做下记录,今天看了一篇很有意思的文章,学到了这个取值的小技巧 正常的话我们一般都是用对象直接去'.'对应的属性名(也就是键值对的键)来获取对应的值 这里记录的是另一种取值方式,他是采用中括号 ...