目录

  • 前言
  • 1 D-PHY 简述
  • 2 D-PHY硬件结构
    • 2.1 Lane模型
    • 2.2 D-PHY Lane State
    • 2.3 配置选项
  • 3 D-PHY Operation
    • 3.1 D-PHY Lane Operation
    • 3.2 D-PHY Data Lane High-Speed Mode
      • 3.2.1 Start-of-Transmission
      • 3.2.2 End-of-Transmission
      • 3.2.3 HS Data Transmission
    • 3.3 D-PHY Data Lane Low-Power Mode
      • 3.3.1 Control Mode
      • 3.3.2 Escape Mode
        • 3.3.2.1 Reset-Trigger
        • 3.3.2.2 Low-Power Data Transmission
        • 3.3.2.3 Ultra-Low Power State
    • 3.4 Bi-directional Data Lane Turnaround
    • 3.5 D-PHY Clock Lane High-Speed Mode
    • 3.6 D-PHY Clock Lane ULPS Mode
    • 3.7 D-PHY Skew Calibration
  • 4 Fault Detection
    • 4.1 Contention Detection
    • 4.2 Sequence Error Detection
    • 4.3 Protocol Watchdog Timers (informative)
  • 5 Global Operation Flow Diagram

前言

前言出处:CSDN 爱洋葱
MIPI 接口广泛用于摄像头和显示器件;PHY 属于 MIPI 接口的最底层部分,也就是物理层,直接涉及到物理连线,信号传输等等。
MIPI 多媒体部分的 PHY主要分为了 3 种:

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

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

Note: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 中的这个 D,在罗马数字中代表了 “500”,那么 D-PHY 含义就是 500-PHY,也就是这个这个 PHY 最初设计是跑 500MHz,由于是 DDR 的时钟,所以理论上就是 1Gbps/per Lane 的速率;

1 D-PHY 简述

D-PHY 描述了一种源同步、高速、低功耗、低成本的 PHY。D-PHY 规范主要用于将相机和显示应用程序连接到主机处理器。和大部分总线一样也分Master-Slave端,且由于链路两侧之间的主从关系,链路的操作和可用数据速率是不对称的。这种不对称设计也降低了链路的复杂性。同时双向、半双工操作等一些特性是可选的,具有很大的灵活性。
D-PHY 在 Master 和 Slave 之间提供同步连接。一个基本的 PHY 配置由一个时钟信号(Clock Lane) + 一个或多个数据信号(Data Lane)组成。

  • Clock Lane是单向的,由Master端发向Slave端。
  • Data Lane 可以是单向或双向

对于半双工操作,反向带宽是正向带宽的四分之一。

D-PHY包含两种模式:

  1. High-Speed Mode——主要用于高速数据传输
  2. Low-Power Mode——主要用于控制,但还有其他可选用例。

在高速模式下,每条通道都在两侧端接,并由低摆幅、差分信号驱动,一般为200 mV。高速单条Data Lane的速率上限一般为2.5Gbps。
在低功耗模式下,所有电线均以单端和非端接方式运行。出于 EMI 的原因,该模式的驱动器应受压摆率控制和电流限制,其电压一般为1.2V。低功耗模式下的最大数据速率为 10 Mbps。

2 D-PHY硬件结构

2.1 Lane模型

一个 D-PHY 包含一个时钟通道模块和一个或多个数据通道模块。这些 D-PHY 通道模块中的每一个都通过两条线路与通道互连另一侧的互补部分进行通信。一个通用的 D-PHY 包含了 LP-TX、LP-RX、HS-TX、HS-RX、LP-CD,最后对外的接口是 Dp 和 Dn(差分信号)。
其中HS-TX、HS-RX 即为High-Speed模式,该模式下Dp和Dn为差分信号,使能端接。
其中LP-TX、LP-RX、LP-CD 即为Low-Power 模式,该模式下Dp和Dn则非差分信号,也关闭端接。

D-PHY至少由一条Clock Lane和一条Data Lane组成。

值得一说的是,Master需要一个 PLL 时钟乘法器来生成高频时钟。D-PHY 规范使用架构模型,其中 PHY 外部的单独时钟乘法器单元为 PHY 生成所需的高频时钟信号,该时钟由开发者决定。
则硬件框图如下所示:

2.2 D-PHY Lane State

Data Lane多种模式下,具有不同的行为,那这些行为是如何定义的,即如何进入HS模式,如何进入LP模式,又如何进入Escape Mode下的多种模式。这些都是通过Spec规定好的状态来决定的。如下图:

Note: HS:是 High-Speed 的简写 LP:是 Low-Power 的简写


MIPI 在 D-PHY 层定义了一些状态(High-Speed、Control Mode、Escape Mode),那么我们要怎么和对端协商,或者换句话来说,我们要怎么进入对应的模式,并且告知对端呢?通常的情况下,一些通信协议可能会将状态码以 Packets 的形式发送到对端,然后改变模式之类的,但是在 MIPI 的 D-PHY 中定义状态转换,就是靠这些 State Code;

接下来我们看看这些 State Code 是什么含义:

在High-Speed 模式下,Lane 的 2 根线是独立的,不代表差分信号,那么 2 根线就有 4 种表达方式:
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.3 配置选项

正如前面所说,Lane的配置据有很大的灵活性。一般而言主要是选择如下(摘自Specification for D-PHY Version 1.2)
• Single or Multiple Data Lanes
• Bi-directional and/or Unidirectional Data Lane (per Lane)
• Supported types of Reverse communication (per Lane)
• Functionality supported by Escape mode (for each direction per Lane)
• Data transmission can be with 8-bit raw data (default) or using 8b9b encoded symbol

3 D-PHY Operation

在D-PHY的Spec中,定义了Data Lane和Clock Lane,同时也定义了两种模式:

  • High-Speed Mode
  • Low-Power Mode
    即Data Lane与Clock Lane均有这两种模式,但是二者又有所不同。下面分别进行分析。

3.1 D-PHY Lane Operation

一般而言,Data Lane0同时具有High-Speed Mode 与 Low-Power Mode,而Data Lane1-Lane3仅用于High-Speed Mode进行使用。即Data Lane0为半双工双向传输Lane(当然这也是可裁剪的)。下面描述了D-PHY Data Lane的所有工作模式。在Low-Powe模式下分为Control Mode与Escape Mode,而Escape Mode进而又分成多个模式。接下来一个一个看。
图片来源:CSDN 爱洋葱

3.2 D-PHY Data Lane High-Speed Mode

高速数据传输以Burst发生。传输从停止状态开始并以停止状态结束。在Burst之间的中间时间期间,Data Lane应保持在Stop状态,除非在Lane上出现转向或退出请求。 在HS模式传输数据过程,Clock Lane处于高速模式,为从Slave端提供 DDR 时钟。

在D-PHY上传输的最小单位是Byte。

3.2.1 Start-of-Transmission

默认情况下,D-PHY处于IDLE状态,即LP11。那我们如何从这个状态切换到HS 模式并进行数据发送,并且对端也能知晓?答案就是通过发送我们约定好的序列。进入传输的序列即称之为Start-of-Transmission(SOT),同理也会存在其他推出的序列,进入其他模式的序列,后续意义分析。

SOT序列:LP11->LP01->LP00->HS0->HS Sync 序列(00011101)->send data

3.2.2 End-of-Transmission

既然后SOT,那么也应该存在EOT来切换自己状态到IDLE(Stop 状态)并同步对端。

EOT序列:LP11

3.2.3 HS Data Transmission

从3.2.1与3.2.2我们能知道如何开始与结束High-Speed的传输。从整个传输来看,即如下图,首先从Stop状态发送SOT进入High-Speed Mode,然后再以Burst方式进行数据传输,待数据传输完成之后,再发送EOT回到Stop状态。

3.3 D-PHY Data Lane Low-Power Mode

Data Lane的Low-Power模式分为Control Mode与Escape Mode,而Escape Mode又分为以下三类:

  1. Low-Power Data Transmission
  2. Ultra-Low Power State
  3. Reset-Trigger

3.3.1 Control Mode

Control Mode是一个有趣的模式,它并不进行数据的传输,而是作为状态的管理,在我看来更像是一个桥。我们需要切换到High-Speed或者Escape Mode则需要先从Control Mode开始,并不能直接从High-Speed切换到Esccape Mode,就算半双工的BTA动作也是如此,在每次完成High-Speed传输或者Escape Mode的行为后,总是通过LP11返回Control Mode。

3.3.2 Escape Mode

Escape Mode是Data Lane处于低功耗状态的一种特殊操作模式。在这种模式下,很多附加的操作都是可以实现的,甚至是与对端的自定义行为。如何实现这些附加操作呢==》通过Escape Entry Codes。如下图所示,目前D-PHY定义了Low-Power Data Transmission,Ultra-Low Power State 与 Reset-Trigger三种模式。在进入Escape Mode之后通过发送Escape Entry Codes,这样自己与对端都能知道要进入什么模式了。

进入Escape Mode序列:LP11-> LP10-> LP00->LP01->LP->00
退出Escape Mode序列:LP11
以状态机方式来看Escape Mode下的三种情况,下图比较清晰:

3.3.2.1 Reset-Trigger

Trigger是根据发送方协议的请求向接收方协议发送标志的机制。这可以是正向或反向,具体取决于操作方向和可用的Escape Mode功能。
下图为发送一个Reset-Trigger的波形图。

Note:包括 Reset-Trigger 在内的触发信号是一个通用的消息系统。Trigger命令不会影响 PHY本身的行为。因此,协议层可以将Trigger用于任何目的。

3.3.2.2 Low-Power Data Transmission

如果 Escape 模式进入程序之后是低功耗数据传输 (LPDT) 进入命令,则数据可以通过协议以低速进行通信,而通道保持在低功耗模式。
Data Lane可以在使用 LPDT 时暂停,即在保持Space state(LP00)。

数据应使用与Entry Commands相同的 Spaced-One-Hot 代码在行上进行编码。

下图为一个两字节的传输,且两个字节之间有一个暂停期。

3.3.2.3 Ultra-Low Power State

如果在退出模式进入命令之后发送超低功耗状态进入命令,则通道应进入超低功耗状态 (ULPS),在此状态期间,线路处于空间状态 (LP-00)。

3.4 Bi-directional Data Lane Turnaround

Data Lane的控制权可以通过Bus Turn Around功能来移交,即达到D-PHY半双工,Data Lane能双向传输的设计目的。但Master需要Slave发送数据的时候,首先Master处于Control Mode(LP11)下,向Slave发送BTA序列,则Slave接收之后则开始驱动总线并发送相应数据。

BTA应完全在控制模式下处理。
BTA 序列:LP11->LP10->LP-00->LP10->LP-00->Wait ACK(接收 LP-00,此时共同驱动)->Slave端 LP10->Slave端LP11;
状态机:

3.5 D-PHY Clock Lane High-Speed Mode

在HS模式下,Clock Lane提供从Master到Slave的低摆幅、差分 DDR(半速率)时钟信号,用于高速数据传输。Clock Lane类似于单向数据通道,只能为Master向Slave方向。

Clock Lane 进入High-Speed Mode序列:LP11->LP10(TLPX)->LP00(TCLK-PREPARE)->HS0(TCLK-ZERO)->TCLK-PRE
Clock Lane 退出High-Speed Mode序列:HS0/HS1->TCLK-POST end with HS0->TCLK-TRAIL->LP-11(THS-EXIT)
进入HS:
退出HS:
状态机:

3.6 D-PHY Clock Lane ULPS Mode

虽然时钟通道不包括常规的 Escape 模式,但时钟通道应支持超低功耗状态。

Clock Lane 进入ULPS Mode序列:LP11->LP10->LP00
Clock Lane 退出ULPS Mode序列:LP00->LP10(Twakeup)->LP11

3.7 D-PHY Skew Calibration

当运行高于 1.5 Gbps 或更改为高于 1.5 Gbps 的任何速率时,需要进行Skew Calibration,以保证数据的正确传输。当速率低于1.5Gbps或者改变状态时(ULPS 到 HS),Skew Calibration是可选的。
对比如下:

Start-of-Skew Calibration 序列:LP11->LP01(TLPX)->LP00(THS-PREPARE)->HS0 (THS-ZERO)->high-speed sync sequence(16’hFFFF)->01010101 same as clock lane
End-of-Skew Calibration 序列:THS-TRAIL->LP11(THS-EXIT)

4 Fault Detection

D-PHY 有三种不同的机制来检测链路的错误。分比如如下:

  1. Contention Detection
  2. Sequence Error Detection
  3. Protocol Watchdog Timers (informative)

在 D-PHY 中无法检测到某些错误,需要协议级解决方案。

4.1 Contention Detection

Contention Detection即竞争检测。在除开特殊的过渡阶段(例如:BTA)之外,总线只能由一段驱动。由于错误或者系统错误,导致Lane处于未知状态,两端同时驱动或者同时不驱动总线,即称为总线竞争检测。
具备双向通信的 Lane,都必须具备总线竞争监测并且监测出如下冲突:

  1. 同一条线路两侧的模块相互驱动相反的 LP 电平。在这种情况下,线路电压将稳定在 VOL,MIN 和 VOH,MAX 之间的某个值。 因为 VIL 大于 VIHCD,所以稳定值将始终高于 VIHCD、低于 VIL,或两者兼而有之。
  2. 一侧的模块驱动 LP-high,而另一侧驱动同一条线上的 HS-low。在这种情况下,线路电压将稳定到低于 VIL 的值。 应在传输 LP-high 的一侧检测到争用。
    第一个条件可以通过 LP-CD 和 LP-RX 功能的组合来检测。
    LP-RX 功能应该能够检测到第二个争用条件。

4.2 Sequence Error Detection

Sequence Error Detection即序列错误监测。如果通道信号异常,接收 PHY 可能会检测到信号序列错误。在 PHY 内部检测到的错误可以通过 PPI 传送给协议。 这种错误检测是可选的,但强烈推荐,因为它提高了可靠性。
主要序列错误如下:

  1. SoT Error
  2. SoT Sync Error
  3. EoT Sync Error
  4. Escape Entry Command Error
  5. LP Transmission Sync Error
  6. False Control Error

4.3 Protocol Watchdog Timers (informative)

PHY 层无法监测所有错误,尤其是协议层的错误。D-PHY可以提供一个定时器,由使用者告诉D-PHY需要运行的时间,如果运行超时,则D-PHY认为这是错误。该Timeout机制来检测的行为主要如下:

  1. HS RX Timeout
  2. HS TX Timeout
  3. Escape Mode Timeout
  4. Escape Mode Silence Timeout
  5. Turnaround Errors

5 Global Operation Flow Diagram


MIPI 打怪升级之D-PHY篇相关推荐

  1. 模型压缩:模型量化打怪升级之路-工具篇

    本文转载自商汤泰坦公开课. 1/ 最近发现一些还在学校读书的同学非常关注一个量化工作精度的高低,读过我上篇分享(模型压缩:模型量化打怪升级之路 - 0 序章)的同学应该知道,部分学术界的工作与工业界的 ...

  2. 详解Linux运维工程师打怪升级篇

    详解 Linux 运维工程师打怪升级篇 积累经验篇 做运维也快4年多了,就像游戏打怪升级,升级后知识体系和运维体系也相对变化挺大,学习了很多新的知识点. 运维工程师 是从一个呆逼进化为苦逼再成长为牛逼 ...

  3. 【转载】运维职业向!我是怎么入得运维行业?运维工程师入门必备技能以及打怪升级篇...

    前言:转载 陈浩一个从事安全运维向的前辈文章.写的很好.人非常nice,遇到了问题,qq上很快就回复了我. 大道三千 入门最难,凡事入了行,也就什么都好说了,好的自然不断努力奋斗修行,不好的自然很快就 ...

  4. 【Java基础知识回顾篇】之打怪升级Day001

    Java基础知识回顾篇之打怪升级Day001 目录 Java基础知识回顾篇之打怪升级Day001 简介 一.为什么现在主流的是Java8和Java11? 二.简单尝试编写java程序 1.编写一个He ...

  5. CodeWar打怪升级-Python篇

    CodeWar打怪升级-Python篇 1.  The goal of this exercise is to convert a string to a new string where each ...

  6. 运维工程师打怪升级进阶之路 V2.0

    很多读者伙伴们反应总结的很系统.很全面,无论是0基础初学者,还是有基础的入门者,或者是有经验的职场运维工程师们,都反馈此系列文章非常不错! 命名:<运维工程师打怪升级之路> 版本:V1.0 ...

  7. 程序猿菜鸟打怪升级—一路火花带闪电

    文章目录 一. 昨夜西风凋碧树,独上高楼,望尽天涯路 二. 衣带渐宽终不悔,为伊消得人憔悴 三.众里寻他千百度,蓦然回首,那人却在,灯火阑珊处 [告别平庸的9个方法] 各位小伙伴,大家好!我是猿人谷, ...

  8. 【如何3秒钟看出一个人的python实力|Python 数据分析打怪升级之路 day04】:手把手教你如何分析用户数据、数据分析基本概念

    数据分析打怪升级进度:day04 哈喽大家好啊,欢迎来到夜斗小神社数据分析打怪升级之路! 大家可以叫我小夜斗:"一枚想要做python领域强者的小萌新" 你会确信你终于在CSDN找 ...

  9. Android 开发--利用android studio 制作简单文字打怪升级游戏(伪地牢类)1.开始

    本人目前是大三考研党,之前有学过一些杂七杂八的知识,但是没有办法利用这些知识制作一些真正有用的东西出来.后来自学了android开发,学会使用了android studio,终于决定利用android ...

最新文章

  1. 【CVPR2022】双曲图像分割
  2. maven项目转成web项目
  3. 为了更高效的开发代码,这里列出了一些webstorm的快捷键和zencoding
  4. CodeForces - 1287C Garland(贪心)
  5. 基于间隔推送全量更新数据状态的设计方法
  6. ASP.NET Core 实战:使用ASP.NET Core Web API 和 Vue.js 搭建前后端分离项目
  7. Node.js从零开发Web Server博客项目笔记
  8. 这月跳槽的多吗?月薪多少才正常
  9. java 接口中的成员只有静态常量和_Java中抽象类和接口的具体区别是什么?
  10. 几款远程工具介绍(Xshell)(SecureCRT)(putty)
  11. libsvm 的使用
  12. 苹果移动设备用什么管理比较好?有什么推荐?
  13. 基于SWMM及自主开发城市内涝一维二维耦合软件的复杂城市排水系统建模技术及在城市排涝、海绵城市等领域实践
  14. Agilent GeneSpring GX V11.5_win32_win64扩展生物学分析软件
  15. iOS利用HealthKit获取健康里的步数和睡眠时间
  16. 计算机小喇叭找不到,Win7电脑右下角的小喇叭不见了
  17. 利用asyncio aiohttp爬取蜂鸟网美图
  18. 马赛克(蒙太奇)图片生成--Python实现
  19. LeetCode Image Smoother
  20. 微信抢红包算法实现(JAVA)

热门文章

  1. 成长的日记教案计算机,《成长日记ABC》教案1
  2. tmux命令-快速开始
  3. 理光Ricoh Aficio 1022 一体机驱动
  4. Angular - - $animate
  5. C语言中time函数的定义及用法示例
  6. tree老师:每天五分钟教你学linux命令03
  7. SpringBoot实现文件上传(Excel表)
  8. java mp4视频转换成h5_前端canvas动画如何转成mp4视频的方法
  9. 【Python实战】高校数据采集,爬虫训练场项目数据储备
  10. 基于灰度图的滚动轴承故障诊断python