上一篇文章讲了以下D_PHY层,这只是最底层的,针对于显示,上层由分出了四种,由专门的工作组进行定义,显示器方面叫做display wrok group,主要分为

DSC(display command set) 显示命令接口

DBI(display bus interface) 显示总线接口 ,CPU端的总线设计

DPI(display pixel interface) 显示像素接口,对于像素数据的处理

DSI(display serial interface) 显示串行接口,高速速度传输接口设计

DSC

这是一个纯协议层的设计,通过相关的命令设计来便捷的控制显示的一些快捷功能,部分command列表如下

这些命令通过DSI的再次封装之后发送就能控制显示器的相关功能

DBI

显示总线的设计,这套协议类似于定义电气连接,定义了视频流,音频流,控制流等数据以怎样的方式在CPU端封装,包含ABC三种方式,分别如下

数据通过读写一根线,使能一根线的传输方式,将音频视频流数据传输到主机端的mipi处理单元,典型的68显示接口

通过读写分离的方式来传输像素数据,80显示接口

通过串行总线方式传输图像数据

而数据来到之后,CPU以一个怎样的架构来处理视频数据就形成了DPI协议

DPI

DPI定义了CPU总线应该以怎样的架构来处理图像数据,主要分为四种类型,

可以看到,图像处理架构中,时序控制,缓存,寄存器,非实时内存,电源等组件形成type1模式,视频流由内部产生,外部只有控制端口.

2与1相比而言,数据缓存变成了局部缓存,占用的内存空间变小,相应的处理器压力会变大,同时,视频流由外部输入,此时,这就能对接上DBI的协议了

第三种模式,为了传输的实时性,不在用内存帧缓存,直接将输入数据转码成MIPI数据,同时,视频流依旧外部产生

不仅取消了帧缓存,而且取消了非实时内存,没有control interface,换成了control line,也没有

了控制寄存器

这四种架构在功能上各有不同,官方给了一个表格,可以根据自己的实际应用选择合适的架构

DSI

DSI主要的作用就是将CPU这一端的数据发送到设备端,包含链路管理,协议封装,数据装箱等,这也是MIPI最繁杂的部分

首先,DSI传输数据以包的形式发送,包括两种类型的数据包

  1. 短数据包,短数据包只有包头

四字节固定长度,一个字节的数据标示符+2字节数据+1字节ECC校验码

标示符包含虚拟数据通道[7:6]以及数据类型(5位),

数据:2字节固定

Ecc校验码:可以把两个位的错误纠正过来,例子如下

  1. 长数据包

6-65541字节长度(可变)

包含四字节包头:1字节数据标示符与短数据包一样,2字节数据长度+1字节ECC校验码

包含0-65535个有效数据(包头数据长度65535,十六位最大65535)

包含两字节数据包页脚:不能计算为0x0000,数据有效长度为0,页脚为0xffff

在传送过程中,链路层需要插入一些key来作为数据传送的标志性事件

同时,在数据包头有六个bit指示数据类型,部分如下

发送数据包中的部分数据类型定义

回应数据包中的数据类型定义

另外,还有数据包的响应,错误报告等,各种组合起来就形成了比较复杂的协议结构,想要详细了解请查看DSI协议手册

传送数据中像素的编码

在主机发送数据包中规定了数据包中的图像数据的像素格式,通过像素格式可以解析传送来的数据

另外,对于像素行列的切换也有响应的数据类型如下

通过这些信息,MIPI从设备可以解码出主机发送的数据转换为原始的RGB信号来驱动屏幕

像素格式有很多种,以0x0E格式举例

图像数据在数据包中以如下方式存放,LSB send frist

(注意这只是DSI格式,在经过D_PHY之后,这些数据会分散到几个lane中,最后在设备端汇总)

说到这里,基本上说完了MIPI的DISPLAY协议架构,比较概略,详细都是去看文档,一般而言,MIPI协议都有芯片厂商设计好了,但是对于芯片而言,调试寄存器的时候知道这些知识,百利无一害

目前的很多屏幕都是使用的mipi技术,apple,mi,meizu,nexus等,一般而言,CPU中也会存在display的接口,不想用高档CPU又想用高档屏幕的人,可以选择一些集成芯片来实现RGB或者YUV转MIPI,推荐芯片SSD2825 SSD2828,这家公司的系列产品,不同编号支持的lane数量不同,下一张聊聊怎样使用SSD2828驱动屏幕

最新文章

  1. docker 基础使用
  2. POJ 1014 Dividing
  3. Java 内存区域和GC机制
  4. puppet学习笔记(二)
  5. 打印的infoplist文件
  6. 不同浏览器JS获取浏览器高度和宽度
  7. Jquery IE 缓存问题
  8. record
  9. 深入分析 Java 中的中文编码问题(1)
  10. Stub和Mock的理解
  11. JMockit使用总结
  12. Ajax跨域之ContentType为application/json请求失败的问题
  13. 【C/C++】C++11 Move, Forward
  14. POJ--3614 Sunscreen(贪心)
  15. Java编程思想 学习笔记12
  16. 【转】 C#操作FTP
  17. javascript中所有函数的参数都是按值传递的
  18. Ionic -- css
  19. hdu-1179(匈牙利算法)
  20. 给model模型传数组参数

热门文章

  1. Android简单逐帧动画Frame的实现(二)
  2. jdk,tomcat配置
  3. python 函数部分
  4. js 基础对象二
  5. 我终于有案例库啦(github 提供的)
  6. haar_adaboost_cascade阅读资料
  7. 剑指offer 数字在排序数组中出现的次数
  8. Servlet程序开发--实例操作:MVC设计模式应用
  9. Entity Framework 学习初级篇6--EntityClient
  10. Android 禁止屏幕休眠和锁屏的方法