MIPI 系列之 D-PHY

MIPI 系列之 D-PHY

1、简述

2、管脚连接

3、D-PHY 的时钟

4、D-PHY Lane (Clock Lane And Data Lane)

4.1、信号摆幅

4.2、信号含义

4.3、状态码

5、传输特性和方向

6、D-PHY Data Lane

6.1、高速 Data Lane 传输

6.2、双向传输 Data Lane Turnaround

6.3、Data Lane 的 Escape 模式

6.3.1、Escape 模式划分

6.3.2、进入 Escape 模式

6.3.3、Remote Triggers

6.3.4、Low-Power Data Transmission

6.3.5、Ultra-Low Power State

6.3.6、Escape 模式状态机

7、D-PHY Clock Lane

7.1、Clock Lane High-Speed And Low-Power

7.2、Clock Lane 进入 Ultra-Low Power State

8、错误监测

8.1、争用监测

8.2、序列错误监测

8.3、协议层看门狗定时器

9、Skew Calibration

10、小结


MIPI 接口广泛用于摄像头,和显示部分;PHY 属于 MIPI 接口的最底层部分,也就是物理层,直接涉及到物理连线,信号传输等等,要搞清楚 MIPI 的数据传送,那么从 PHY 入手了解,是一个不错的选择;

既然是 PHY,那么肯定在 PHY 层上,还搭建了其他的硬件层次结构,这里暂时只关注 PHY 层,后面会结合更加上层的逻辑来分析;在 PHY 上,只负责定义数据物理层的收发标准;

MIPI 的 PHY 分为了 3 种:

  • D-PHY
  • C-PHY
  • M-PHY

他们之前有什么区别和联系呢?

 可以在 MIPI 的官方网站上去搜索这些 PHY 的 Specification;需要额外说一下的是,D-PHY 最先出来,现在用得很多,传输速度快;M-PHY 再出来,速度最快,但是与 D-PHY 不兼容,而且受限于其他器件的发展,如此高的带宽,暂时用不上;最后出来的是 C-PHY,没有时钟信号,靠 pin 脚的编码来区分数据信号;

也就是说,M-PHY 现在基本没有应用场景,D-PHY 和 C-PHY 用得居多;

注意:C-PHY 和 D-PHY 的 C 和 D,不是 Camera 和 Display 的简写,只是 PHY 的命名;D-PHY 可以接 CSI 成为摄像头端的 PHY,也可以用在 DSI,作为 Display 的 PHY;C-PHY 也一样;

这里介绍的是 D-PHY 部分的内容;在 MIPI 的官网上可以看到 D-PHY 其实也分了很多的版本,也就是说,现在 MIPI 联盟中,发展了几个 PHY 的标准,而这几个 PHY 的标准又各自有不同的版本;

这里以 D-PHY 1.2 版本为基础来进行介绍;

多说两句,D-PHY 中的这个 D,在罗马数字中代表了 "500",那么 D-PHY 含义就是 500-PHY,也就是这个这个 PHY 最初设计是跑 500MHz,由于是 DDR 的时钟,所以理论上就是 1Gbps/per Lane 的速率;

1、简述

D-PHY 是一个高速、低功耗的源同步物理层,他具有高速、低功耗、低成本等特点;特别适合手机这样的应用;D-PHY 可以用于 Camera 和 Display 场景;

在 D-PHY 的使用过程中,和其他的总线一样,我们通常会定义个 Master 和 Slave,比如,我们用处理器的 D-PHY 连接到外面显示设备(屏幕)的 D-PHY,那么我们的处理器就是 Master,显示设备就是 Slave;

通常情况下,D-PHY 至少会包含一组 Clock 信号以及多组用于数据传输的 Data 信号:

  • Clock 信号是单向信号,只能由 Master 向 Slave 提供;
  • Data 信号可以是单向信号,也可以是半双工的双向信号;

这种半双工的双向信号的数据传送,在反向传输数据的时候(Slave To Master),带宽只有正向传输(Master To Slave)的四分之一;

2、管脚连接

D-PHY 的管脚连接如下图所示:

这个图是一个通用的管脚连接示意图,可以看到,一个通用的 D-PHY 包含了 LP-TX、LP-RX、HS-TX、HS-RX、LP-CD;最后对外的接口是 Dp 和 Dn;

这个图表示的是一个 Lane 的图,那么什么是 Lane 呢?MIPI 中,使用 Lane 来定义一对信号,搞过高速串行传输的哥们应该都知道,p 和 n 代表了差分信号的意思,也就是数据传输的时候的 D+ 和 D-,那么这个 p 和 n 就组成了一对信号,也就是一个 Lane;

D-PHY 的数据传送,是依赖差分时钟信号的(不完全对,后面在做解释),所以至少需要一个 Clock Lane(Clock+和Clock-),为了传输差分数据,那么至少也需要有一个 Data Lane(Data+和Data-);所以呢,D-PHY 的构成中,最少需要 2 个 Lane,也就是 4 条线;打个比方:

 所以呢,端口上呈现出来的就是 Lane 的连接了;

这里需要注意的是,虽然 D-PHY 定义了内部结构(包含了 LP-TX、LP-RX、HS-TX、HS-RX、LP-CD),但是实际使用的时候,可以做裁剪,并不是所有的端口都需要同时支持这些内容,比如你一个单向传输的端口,那么可能只需要支持你这个端口所需要的硬件部分即可,但是 D-PHY 为了通用性和层次抽象,将所有内容都列举出来了而已;

3、D-PHY 的时钟

前面说了,传输数据的时候,时钟是差分的信号,这里需要进一步说明一下,D-PHY 的时钟是 DDR 的,什么是 DDR 呢,就是双沿采样,上升沿和下降沿都对数据进行采样,这样的话,数据传输就又快了一倍;

和 DDR 时钟对应的类型是 SDR 时钟,我们常用的 SPI 就是这种类型,单沿采样;

而且时钟信号,始终都由 Master 提供给 Slave,永远不变;


前面知道,D-PHY Lane 有 Clock Lane 和 Data Lane 组成,而 Clock Lane 和 Data Lane 的特性,有一部分是一样的,也有不一样的地方,所以,为了讲清楚这个,先讲 Clock / Data Lane 都共同包含的部分,后面再将其分开来讲:


4、D-PHY Lane (Clock Lane And Data Lane)

MIPI 的 Spec 中,定义了 D-PHY Lane 的模式(这里的 Lane 包含了 Clock 和 Data),宏观上来讲 D-PHY Lane 的模式分为了 2 种:

  • High-Speed
  • Low-Power

High-Speed 也叫 Burst Mode,用于高速的数据传输,其实就是图像数据传输;在这种模式下,吞吐率可以达到 2500 Mbps,也就是 2.5Gbps/per Lane;

Low-Power 模式用于一些控制信息,比如,传一些指令之类的;在这种模式下的最大速率是 10Mbps;

4.1、信号摆幅

High-Speed 和 Low-Power 在传输的时候,信号的幅值也不一样:

如图所示,HS 代表了 High-Speed,HS模式下,为差分信号传输,信号电平在100mV~300mV(200mV的压摆);LP模式下,为单端信号传输,信号电平在0~1.2V(1.2V压摆)。

无论是HS模式还是LP模式,都采用 LSB fisrt,MSB last 的传输方式

4.2、信号含义

在 High-Speed 模式下,Lane 上传输的是差分信号;

在 Low-Power 模式下,Lane 上的 2 根线是独立的信号,不再是差分的含义了;具体是什么含义,后面马上见到,稍安勿躁;

4.3、状态码

有了前面的先验知识,这里 MIPI 组织,将不同的 Lane 信号类型状态组合起来,名了个名字:

来解释一下这个鬼玩意,第一眼看了,肯定想打人,这种表格直接搬出来,会造成比较大的心理阴影面积,因为表格中涉及到的名称,在前面都没见过,所以看起来不是很直观;逼着大家多看几遍 Spec 的节奏;

由于看过,所以我想告诉你 MIPI 定义这个玩意到底是为了啥;

MIPI 在 D-PHY 层定义了一些状态(High-Speed、Control Mode、Escape Mode),那么我们要怎么和对端协商,或者换句话来说,我们要怎么进入对应的模式,并且告知对端呢?

通常的情况下,一些通信协议可能会将状态码以 Packets 的形式发送到对端,然后改变模式之类的,但是在 MIPI 的 D-PHY 中定义状态转换,就是靠这些 State Code;

接下来我们看看这些 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,

HS:是 High-Speed 的简写

LP:是 Low-Power 的简写

好了,这里定义到这里就行了,后面那些 Control Mode 和 Escape Mode 里面的框框内容不用看,对,暂时不看他,否则你会感到疑惑;我们后面在仔细说;这里你只需要知道并了解,LP 模式下,通过 2 根线,可以表达 4 种不同的组合即可;

5、传输特性和方向

前面提起了 D-PHY 传输时基于差分信号的传输,但不完全是差分信号(因为 LP 模式的存在);在 High-Speed 下,为差分信号(时钟和数据),在 Low-Power 下呢,一个 Lane 中的 2 条线是独立的信号表示;

从传输方向上来说:

差分的时钟信号永远都是 Master->Slave;

High-Speed 模式下,都是单向的传输;

在 Low-Power 模式下,允许半双工的双向传输;

半双工传输在什么时候,以何种方式传输,传输的是什么内容,并且起什么作用呢?这个在本章的稍微后面一些做出解释,因为还需要更多的一些先验知识;

说在前面:上面的内容,适用于 Data Lane 和 Clock Lane,下面讨论的内容,将 Data Lane 和 Clock Lane 分开讨论,因为他们的模式和状态稍有区别,需要分开;

值得注意的是,在 LP 模式下(包括Control Mode和 Escape Mode),采用的是Spaced-One-Hot Coding机制。在该机制下,时钟可以从传输的数据中得以体现,因此不需要传输时钟。此时,用户可以根据实际需求,设置Clock Lane继续运行或者关闭以降低功耗。

6、D-PHY Data Lane

6.1、高速 Data Lane 传输

在正常情况下,Data Lane 要么是在 Low-Power Mode 要么就在 High-Speed 模式;那么我们如何进入 High-Speed 呢?这就要用到前面《4.3、状态码》的内容了;

我们回头来看那张表格,注意 LP-11 他代表了一个叫 Stop State 的状态;MIPI 的 D-PHY 规定,一个 Data Lane 进入 High-Speed 的方式为发送一个 Start-Of-Transmission Sequence 即 SOT 信号,这个 SOT 信号的组成为:

即,顺序设置 LP-11、LP-01、LP-00、HS-0、发送 HS Sync 序列,然后发送数据;

发起了 High-Speed Transmission 后,如何停止呢?这里 MIPI 定义了一个和 SOT 对应的破玩意,叫 End-of-Transmission,即 EOT;相对于发送开始,停止发送的流程比较简单,如下:

 说白了,就是准备停止的时候,发送 LP-11;

所以呢,整个高速收发的开始和结束的时序图如下所示:

可以看到呢,里面标注了 LP-11 到 LP-01,在到 LP-00 的整个过程;可以看到,这里是需要有持续时间的要求的,具体的要求可以参考 Spec,不再多说;

在硬件上可以将上面的过程,抽象为一个状态机来表达:

在发送端,开始进入 Stop(LP-11),然后通过拉 LP-01、LP-00、HS-0、发送 Sync 字段(HS-00011101)然后就不断的发送差分数据;直到数据发送完毕(如果完毕了),退出 High-Speed 模式,再次进入 Stop State;

接收端的类似,不在赘述;

这里,观众们可能看出点东西,Stop State 比较关键,最后都是进入这个 Stop 模式,可以理解为 PHY stand by 了;

6.2、双向传输 Data Lane Turnaround

前面一直说 Data Lane 双向传输,但是都只看到单向传输的部分,这里就是双向传输了;

D-PHY 的双向通道支持一个玩意,叫 TurnAround 的操作,简称为 TA 操作,他通过一些行为,可以让 Master 去读 Slave 的东西;也就是改变了数据传输的方向,这就体现的双向传输;

注意,即便是 Trunaround 了,但是 Master 和 Slave 的角色依然不变;

Trunaround 这个操作,在 Control 模式下完成,他的流程如下所示:

 也就是 LP-11、LP-10、LP-00、LP-10、LP-00、Wait ACK(接收 LP-00)、接收 LP-10、接收 LP-11;

 它的时序如下:

6.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;

6.3.1、Escape 模式划分

Escape Mode 是 Low-Power 的一种,针对 Escape Mode 又细分了好几种,于是我们基于之前的介绍,进行扩展:

可以看到 Escape Mode 按照 mode 和 trigger 划分;

Mode 的话,分为了:

  • Low-Power Data Transmission :简称为 LPDT,意味在 LP 模式下进行数据传输;
  • Ultra-Low Power State:简称为 ULPS,超低功耗状态;

Trigger 来说的话,现在只有一个 Triiger 就是 Reset,用于触发 Reset;

无论是 Mode 还是 Trggier 类型,他们都预留了一些内容,来适应以后的标准升级;

6.3.2、进入 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 编码为:

 那些 Unknow 的 和 Undefined 的,为了将来预留的;

举个例子,以 Trigger Reset 为例,他的时序为:

值得注意的是,由于 Escape mode 下使用的是 Spaced-One-Hot bit 的 encoding 的方式做数据的异步传输,所以呢,只需要 Data Lane 就行了,不要 Clock Lane;

6.3.3、Remote Triggers

Trigger 呢,只有一个,就上面这个,不再多说;

6.3.4、Low-Power Data Transmission

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

下面是一个例子:

可以看到,在传输 First Data Byte 后 Second Data Byte 的时候,中间停止了一会; 

6.3.5、Ultra-Low Power State

如果在进入 Escape mode 的时候 Entry Command 指定为了 Ultra-Low Power State(ULPS)的话,这个 Lane 将进入 ULPS;

下面是进入 ULPS 的一个例证:

进入 ULPS 后,想要唤醒,那么设置 LP-10 状态,并等待 Twakeup 时间,即可唤醒;

6.3.6、Escape 模式状态机

整个 Escape 模式的状态机如下所示:

状态机的含义不在多说了;

7、D-PHY Clock Lane

Clock Lane 和 Data Lane 有点不一样,虽然都可以抽象为单端的高速差分信号,Clock Lane 没有 Escape 模式,但是 Clock Lane 有 ULPS 模式;

7.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 方可工作;

整个过程如下所示:

 他的状态机如下所示:

7.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

他的状态机为:

它的时序如下所示:

8、错误监测

有些错误可以在 D-PHY 层被监测出来,有的错误,只能够在交互的协议层监测出来;

8.1、争用监测

争用监测也叫: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;

8.2、序列错误监测

序列错误监测也叫:Sequence Error Detection;PHY 层可以监测到信号的序列错误,什么叫序列错误呢,就是本来应该是 00001111 的,结果收到的是 10001111;

下面是 D-PHY 层可以监测到的 Sequence Error Detection:

  • SoT Error
  • SoT Sync Error
  • EoT Sync Error
  • Escape Mode Entry Command Error
  • LP Transmission Sync Error
  • False Control Error

8.3、协议层看门狗定时器

PHY 层也没办法监测到所有的错误,那么协议层提供一个额外的看门狗定时器,来监测错误就很有必要,主要是用一个 Timeout 超时机制,来判断在某些情况下是否发生了错误;也就是说,系统认为一个流程可能只跑得到 10ms,结果 50ms 都没结束,那么系统就认为发生了错误;

使用看门狗定时器主要有如下场景:

  • HS RX Timeout:高速接收模式下,如果在一段时间一直没有收到 EoT;就认为是 Timeout
  • HS TX Timeout:高速传输模式下,TX 的时间是有限制的(比如用什么样的速率传输多少个数据),超过了时间就认为 Timeout;
  • Escape Mode Timeout:
  • Escape Mode Silence Timeout:
  • Turnaround Error:

9、Skew Calibration

但支持的速度超过了 1.5Gbps 的时候,需要做一个事情,叫做 deskew 矫正;原因就是传输的速度太快了,data path 上任何细微的偏差都可能导致数据传输错误;

对比正常模式下,带 Skew Calibration 的时序如下:

 将他们放大后,区别在于:

10、小结

根据上面的描述呢,大致对 D-PHY 有了一些浅显的认识,针对 Data Lane 和 Clock Lane 来讲,他的状态机如下所示:

总的来说,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 和 Ultra Low-Power;

</article>
pdf_watermark
  • 4
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值