jjzjj

【科普贴】MIPI协议之D-PHY协议详解

湉湉家的小虎子 2023-08-26 原文

一、 介绍

MIPI:全称移动行业处理器接口(Mobile Industry Processor Interface)。MIPI是由MIPI联盟发起的为移动应用处理器制定的开放标准。
MIPI可分为物理层和逻辑层两大部分。
MIPI按照物理层(Physical Standard)划分可分为:D-PHY、C-PHY、M-PHY三种。

1、D-PHY MIPI 简介

D-PHY的逻辑层主要是面向摄像头(CSI)、显示屏(DSI)等用途,D-PHY中的D是罗马数字500的意思,D-PHY最初版本是可以支持500Mbits/s。D-PHY采用差分信号传输方式(不全是差分,LP是单端传输),每条lane由2根信号线组成,分别是P和N,clock lane是必不可少的,data lane的数量可以根据数据传输的吞吐率来选择,至少要有一个data lane

2、C-PHY MIPI简介

C-PHY类似于D-PHY,其逻辑层主要也是面向摄像头(CSI)、显示屏(DSI)等用途,C-PHY中的C指的是Channel-limited。C-PHY总共有3条lane,每条lane使用3根信号线,3条信号线彼此差分。C-PHY没有单独的clock,时钟信号是包含在通讯的时序中。

3、M-PHY MIPI简介

M-PHY支持所有芯片到芯片的应用,以及高性能的摄像头和内存应用。M-PHY中支持的芯片到芯片应用协议包括DigRF、LLI,以及用于高性能相机应用的CSI-3等。M-PHY使用嵌入式时钟。当前很少用到,比较超前。

二、D-PHY电气特性介绍

D-PHY包含如下几种电气功能:高速发送(HS-TX),高速接收(HS-RX),低功耗发送(LP-TX),低功耗接收(LP-RX),低功耗争用检测(LP-CD)。PHY不需要包含所有的电气功能,我们根据需求来配置它的电气功能。但是任何物理层的电气特性都需要满足这些电气表,下图是全能的电气特性图。

D-PHY在使用的过程中,类似于其他总线也有Master和Slave之分,如在用Soc驱动LCD时使用D-PHY MIPI信号,这时Soc就是Master,LCD就是Slave。
Clock 信号是单向信号,只能Master向Slave提供,永远不变。
Data信号可以是单向信号,也可以是半双工信号,即可以反向传输。反向传输的本质其实是通过Master去读Slave里的数据。这种半双工的双向信号的数据传送,在反向传输数据的时候(Slave To Master),带宽只有正向传输(Master To Slave)的四分之一。

三、管脚连接方式

通常按照如下方式进行连接。

四、Lane信号幅度和定义

D-PHY Lane 的模式分为了 2 种,分别是High-Speed 和 Low-Power ,在传输的时候,信号的幅值也不一样。
High-Speed 也叫 Burst Mode,用于高速的数据传输,其实就是图像数据传输;在这种模式下,吞吐率可以达到 2500 Mbps,也就是 2.5Gbps/per Lane
Low-Power 模式用于一些控制信息,比如,传一些指令之类的;在这种模式下的最大速率是 10Mbps

如上图,HS 代表了 High-Speed,HS模式下,为差分信号传输,信号电平在100mV-300mV(200mV的压摆);LP模式下,Lane上的2根线是独立的信号,不在具有差分的意义,为单端信号传输,以GND作为参考,信号电平在0~1.2V(1.2V压摆)
从上图可以看出,HS差分传输的信号的最大摆幅是小于LP的低电压阈值的,所以LP的接收时钟接收到的是HS信号低。
无论是HS模式还是LP模式,都采用 LSB fisrt,MSB last 的传输方式

五、Lane线上的模式

我们通过spec可知:
Data Lane有High-Speed模式和Low-Power模式。Low-Power模式又分为了Control Mode和Escape Mode,Escape Mode又分为了Trigger、Ultra Low Power State、和Low-Power Data transmission。
Clock Lane有High-Speed模式和Low-Power模式,Low-Power模式有Ultra Low-Power
详细见下框图。

那么了解上面的许多模式,MIPI D-PHY如何进入这些模式呢?并且告诉对端我进入了这些模式了呢?

1、状态码(State Code)

MIPI D-PHY通过定义State Code来定义状态转化。

HS-0:表示High-Speed模式下,Dp那根线的数据是0,由于High-Speed是差分信号,那么Dn就是1。
HS-1:表示High-Speed 模式下, Dp那根线的数据是1,由于High-Speed是差分信号,那么Dn就是0。
在Low-Power模式下,Lane的2根线是独立的,不代表差分信号,那么2根线就有4种表达方式:
LP-00:表示在Low-Power模式下,Dp那根线的数据是0,Dn那根线的数据是0。
LP-01:表示在Low-Power模式下,Dp那根线的数据是0,Dn那根线的数据是1。
LP-10:表示在Low-Power模式下,Dp那根线的数据是1,Dn那根线的数据是0。
LP-11:表示在Low-Power模式下,Dp那根线的数据是1,Dn那根线的数据是1。

2、D-PHY Data Lane

2.1、High-Speed Data Lane传输
在正常情况下,Data Lane 要么是在Low-Power Mode要么就在High-Speed模式;那么我们如何进入 High-Speed呢?
MIPI的D-PHY规定,一个Data Lane进入 High-Speed的方式为发送一个Start-Of-Transmission Sequence即 SOT 信号,这个 SOT 信号的组成为:

即,顺序设置 LP-11、LP-01、LP-00、HS-0、发送 HS Sync 00011101序列,然后发送数据;
发起了 High-Speed Transmission 后,如何停止呢?这里 MIPI 定义了一个叫 End-of-Transmission,即 EOT;相对于发送开始,停止发送的流程比较简单,如下:

说白了,就是准备停止的时候,发送 LP-11;
所以呢,整个高速收发的开始和结束的时序图如下所示:

在发送端,开始进入 STOP(LP-11),然后通过拉 LP-01、LP-00、HS-0、发送 Sync 字段(HS-00011101)然后就不断的发送差分数据;直到数据发送完毕(如果完毕了),退出 High-Speed 模式,再次进入 Stop State;Stop State 比较关键,最后都是进入 Stop 模式,可以理解为 PHY stand by 了;
2.2、双向传输 Data Lane Turnaround
前面一直说 Data Lane 是双向传输,但是都只看到单向传输的部分,这里就是双向传输了,它被称作Turnaround,这个操作是在Control Mode下完成的,具体流程见下
注意,即便是 Trunaround 了,但是 Master 和 Slave 的角色依然不变;

也就是 LP-11、LP-10、LP-00、LP-10、LP-00、Wait ACK(接收 LP-00)、接收 LP-10、接收 LP-11;
它的时序如下:

2.3、Data Lane 的 Escape 模式
还记得前面我们讲 High-Speed 和 Low-Power 的时候吗,Low-Power 进而分为了 Control Mode 和 Escape Mode;Control Mode 你可以理解为那些个 LP-00、LP-11等等这些东西,这里我们将展开 Escape Mode;
注意,这里的 Escape 模式,指的是 Data Lane 的,不是 Clock Lane
Escape Mode 是 Low-Power 的一种,针对 Escape Mode 又细分了好几种,于是我们基于之前的介绍,进行扩展:1)Low-Power Data Transmission ,简称为 LPDT,意味在 LP 模式下进行数据传输;2)Ultra-Low Power State:简称为 ULPS,超低功耗状态;3)Trigger 来说的话,现在只有一个 Trigger 就是 Reset,用于触发 Reset;他们都预留了一些内容,来适应以后的标准升级。
2.3.1、进入Escape 模式
如果要进入 Escape 模式的话,需要通过一个叫 Esccape mode Entry 的流程(其实说白了,还是之前那一套东西,LP-11 这种)。
这个流程为:LP-11、LP-10、LP-00、LP-01、LP-00;
和之前不一样的是,Escape 模式呀,不是有定义一些 trigger 和 mode 吗,那你执行一串 LPxx 后,到底想进入哪个模式,或者 Trigger 一个什么呢?
所以这里定义了一个叫 Entry Command 的东西;
也就是说,真正进入一个 Escape 的下面的一个子模式,或者 Trigger 的话,需要这样的流程:
LP-11、LP-10、LP-00、LP-01、LP-00、[Entry Command]
这个 Entry Command 编码为:

那些Unknown的和Undefined的,为了将来预留的;
举个例子,以Trigger Reset为例,他的时序为:

2.3.2、Low-Power Data Transmission
如果在进入 Escape mode 的时候 Entry Command 指定为了 Low-Power Data Transmission,那么会进入这个 LPDT 模式,这个模式下呢,数据可以在低速情况下进行传输;这种模式下,Lane 可以暂停发送

可以看到,在传输 First Data Byte 后 Second Data Byte 的时候,中间停止了一会;
2.3.3、Ultra-Low Power State
如果在进入 Escape mode 的时候 Entry Command 指定为了 Ultra-Low Power State(ULPS)的话,这个 Lane 将进入 ULPS;

3、D-PHY Clock Lane

Clock Lane和Data Lane有点不一样,虽然都可以抽象为单端的高速差分信号,Clock Lane 没有Escape模式,但是Clock Lane有ULPS模式;
3.1、Clock Lane High-Speed And Low-Power
这里我们关注 Clock Lane 和 Data Lane 在进入和推出 Low-Power 的时候的时序:

可以看到,在 Data Lane 进入 Stop State 的时候,再经过 Tclk-post 后,Clock Lane 才进入 HS-0 的状态,然后在 HS-0 持续 Tclk-trail后,进入到 LP-11 状态;
但需要发数据的时候,Clock Lane 先进入 LP-11,然后进入 LP-01 并位处 Tlpx,然后进入 LP-00 并维持一些时间 Tclk-prepare,然后维持 HS-0 ,时间为 Tclk-zero,然后 Clock Lane 就可以正常工作了,在经过 Tclk-pre 后,Data Lane 方可工作;
整个过程如下所示:

3.2、Clock Lane 进入 Ultra-Low Power State
虽然针对 Clock Lane 没有定义 Escape 模式,但是它定义了 Ultra-Low Power State,进入 Clock Lane 的 Ultra-Low Power State 的方式为:LP-11、LP-10、LP-00

4、争用监测(Contention Detection)

正常情况下,连接的两端,在给定的一个时间内,只能够有一方去驱动线上的信号,当其中一端出现了故障,比如,同一时间,两端同时尝试去驱动同一个 Lane ,或者两端都不驱动这条 Lane,D-PHY 管这种情况叫做 “争用”(Contention);
具备双向通信的 LP Lane,都必须具备 Contention Detection 的能力,并且监测出如下冲突;
1、Modules 两端同时向反向驱动一条线;
2、Modules 一端驱动一条线为 LP-high,同时另一端驱动这条线为 HS-low;
上面的第一种情况,能够被 LP-CD 和 LP-RX 组合起来监测到;
上面的第二种情况,应该能够被 LP-RX 监测到;
监测的原理,可以参考 Spec;

有关【科普贴】MIPI协议之D-PHY协议详解的更多相关文章

  1. CAN协议的学习与理解 - 2

    最近在学习CAN,记录一下,也供大家参考交流。推荐几个我觉得很好的CAN学习,本文也是在看了他们的好文之后做的笔记首先是瑞萨的CAN入门,真的通透;秀!靠这篇我竟然2天理解了CAN协议!实战STM32F4CAN!原文链接:https://blog.csdn.net/XiaoXiaoPengBo/article/details/116206252CAN详解(小白教程)原文链接:https://blog.csdn.net/xwwwj/article/details/105372234一篇易懂的CAN通讯协议指南1一篇易懂的CAN通讯协议指南1-知乎(zhihu.com)视频推荐CAN总线个人知识总

  2. ruby - HTTP POST 上的 SSL 错误(未知协议(protocol)) - 2

    尝试通过SSL连接到ImgurAPI时出现错误。这是代码和错误:API_URI=URI.parse('https://api.imgur.com')API_PUBLIC_KEY='Client-ID--'ENDPOINTS={:image=>'/3/image',:gallery=>'/3/gallery'}#Public:Uploadanimage##args-Theimagepathfortheimagetoupload#defupload(image_path)http=Net::HTTP.new(API_URI.host)http.use_ssl=truehttp.verify

  3. 物联网MQTT协议详解 - 2

    一、什么是MQTT协议MessageQueuingTelemetryTransport:消息队列遥测传输协议。是一种基于客户端-服务端的发布/订阅模式。与HTTP一样,基于TCP/IP协议之上的通讯协议,提供有序、无损、双向连接,由IBM(蓝色巨人)发布。原理:(1)MQTT协议身份和消息格式有三种身份:发布者(Publish)、代理(Broker)(服务器)、订阅者(Subscribe)。其中,消息的发布者和订阅者都是客户端,消息代理是服务器,消息发布者可以同时是订阅者。MQTT传输的消息分为:主题(Topic)和负载(payload)两部分Topic,可以理解为消息的类型,订阅者订阅(Su

  4. Tcl脚本入门笔记详解(一) - 2

    TCL脚本语言简介•TCL(ToolCommandLanguage)是一种解释执行的脚本语言(ScriptingLanguage),它提供了通用的编程能力:支持变量、过程和控制结构;同时TCL还拥有一个功能强大的固有的核心命令集。TCL经常被用于快速原型开发,脚本编程,GUI和测试等方面。•实际上包含了两个部分:一个语言和一个库。首先,Tcl是一种简单的脚本语言,主要使用于发布命令给一些互交程序如文本编辑器、调试器和shell。由于TCL的解释器是用C\C++语言的过程库实现的,因此在某种意义上我们又可以把TCL看作C库,这个库中有丰富的用于扩展TCL命令的C\C++过程和函数,所以,Tcl是

  5. 网络实验之RIPV2协议(一) - 2

    一、RIPV2协议简介  RIP(RoutingInformationProtocol)路由协议是一种相对古老,在小型以及同介质网络中得到了广泛应用的一种路由协议。RIP采用距离向量算法,是一种距离向量协议。RIP-1是有类别路由协议(ClassfulRoutingProtocol),它只支持以广播方式发布协议报文。RIP-1的协议报文无法携带掩码信息,它只能识别A、B、C类这样的自然网段的路由,因此RIP-1不支持非连续子网(DiscontiguousSubnet)。RIP-2是一种无类别路由协议(ClasslessRoutingProtocol),支持路由标记,在路由策略中可根据路由标记对

  6. 【详解】Docker安装Elasticsearch7.16.1集群 - 2

    开门见山|拉取镜像dockerpullelasticsearch:7.16.1|配置存放的目录#存放配置文件的文件夹mkdir-p/opt/docker/elasticsearch/node-1/config#存放数据的文件夹mkdir-p/opt/docker/elasticsearch/node-1/data#存放运行日志的文件夹mkdir-p/opt/docker/elasticsearch/node-1/log#存放IK分词插件的文件夹mkdir-p/opt/docker/elasticsearch/node-1/plugins若你使用了moba,直接右键新建即可如上图所示依次类推创建

  7. 【Elasticsearch基础】Elasticsearch索引、文档以及映射操作详解 - 2

    文章目录概念索引相关操作创建索引更新副本查看索引删除索引索引的打开与关闭收缩索引索引别名查询索引别名文档相关操作新建文档查询文档更新文档删除文档映射相关操作查询文档映射创建静态映射创建索引并添加映射概念es中有三个概念要清楚,分别为索引、映射和文档(不用死记硬背,大概有个印象就可以)索引可理解为MySQL数据库;映射可理解为MySQL的表结构;文档可理解为MySQL表中的每行数据静态映射和动态映射上面已经介绍了,映射可理解为MySQL的表结构,在MySQL中,向表中插入数据是需要先创建表结构的;但在es中不必这样,可以直接插入文档,es可以根据插入的文档(数据),动态的创建映射(表结构),这就

  8. 最强Http缓存策略之强缓存和协商缓存的详解与应用实例 - 2

    HTTP缓存是指浏览器或者代理服务器将已经请求过的资源保存到本地,以便下次请求时能够直接从缓存中获取资源,从而减少网络请求次数,提高网页的加载速度和用户体验。缓存分为强缓存和协商缓存两种模式。一.强缓存强缓存是指浏览器直接从本地缓存中获取资源,而不需要向web服务器发出网络请求。这是因为浏览器在第一次请求资源时,服务器会在响应头中添加相关缓存的响应头,以表明该资源的缓存策略。常见的强缓存响应头如下所述:Cache-ControlCache-Control响应头是用于控制强制缓存和协商缓存的缓存策略。该响应头中的指令如下:max-age:指定该资源在本地缓存的最长有效时间,以秒为单位。例如:Ca

  9. IDEA 2022 创建 Spring Boot 项目详解 - 2

    如何用IDEA2022创建并初始化一个SpringBoot项目?目录如何用IDEA2022创建并初始化一个SpringBoot项目?0. 环境说明1.  创建SpringBoot项目 2.编写初始化代码0. 环境说明IDEA2022.3.1JDK1.8SpringBoot1.  创建SpringBoot项目        打开IDEA,选择NewProject创建项目。        填写项目名称、项目构建方式、jdk版本,按需要修改项目文件路径等信息。        选择springboot版本以及需要的包,此处只选择了springweb。        此处需特别注意,若你使用的是jdk1

  10. 详解Unity中的粒子系统Particle System (二) - 2

    前言上一篇我们简要讲述了粒子系统是什么,如何添加,以及基本模块的介绍,以及对于曲线和颜色编辑器的讲解。从本篇开始,我们将按照模块结构讲解下去,本篇主要讲粒子系统的主模块,该模块主要是控制粒子的初始状态和全局属性的,以下是关于该模块的介绍,请大家指正。目录前言本系列提要一、粒子系统主模块1.阅读前注意事项2.参考图3.参数讲解DurationLoopingPrewarmStartDelayStartLifetimeStartSpeed3DStartSizeStartSize3DStartRotationStartRotationFlipRotationStartColorGravityModif

随机推荐