4、D-PHY协议层:SoT与EoT序列、高速数据传输、LP状态与ULPS、Escape模式、Turnaround

好,咱们接着聊D-PHY的协议层。如果说物理层是高速公路的路基和车道,那协议层就是交通规则和信号灯。你光有路不行,车怎么上路、怎么并线、怎么停车,都得有规矩。这一节,我就把D-PHY协议层里几个最核心的“规矩”给你掰扯清楚。

4.1 SoT与EoT序列:数据传输的“起跑线”和“终点线”

先说说SoT(Start of Transmission)和EoT(End of Transmission)。说白了,这就是告诉接收端:“我要发数据了,你准备好!”和“我发完了,你可以歇着了。”

SoT序列,我习惯叫它“前导码+同步头”。它由两部分组成:

  • LP-111到LP-000的转换:这是从LP状态进入HS模式的“敲门砖”。接收端检测到这个边沿,就知道要切换高速接收了。
  • HS-00011101(8位):这是一个固定的同步码。接收端用它来锁定时钟相位,校准眼图。嗯,这里要注意,这个序列是固定的,不能改。

我在项目中遇到过一个问题:某次调试,摄像头模组偶尔会丢第一帧数据。查了半天,发现是SoT序列的LP-000保持时间不够长,接收端的PLL还没锁定就切到HS了。后来把LP-000的时长从100ns加到了200ns,问题就解决了。所以,SoT的时序余量一定要留够

EoT序列就简单多了:

  • HS-0(一个DDR bit):发送一个HS-0电平,表示数据结束。
  • LP-00到LP-11的转换:回到LP状态,释放总线。

你想想看,如果没有EoT,接收端怎么知道数据发完了?它会一直等,然后就超时了。所以EoT虽然短,但必不可少。

关键点总结:

  • SoT:LP-111→LP-000→HS-00011101
  • EoT:HS-0→LP-00→LP-11
  • SoT的LP-000时长建议≥150ns,确保接收端PLL稳定

4.2 高速数据传输:真正的“飙车”阶段

SoT之后,就是高速数据传输了。D-PHY在HS模式下,数据是DDR(双倍数据率)传输的,也就是时钟的上升沿和下降沿都采样数据。

举个例子,假设时钟频率是1GHz,那数据率就是2Gbps per lane。对于4-lane的CSI-2接口,总带宽就是8Gbps。嗯,这个速度,在FPGA上做接收,对时序要求很高。

我个人习惯,在FPGA中接收HS数据时,会做这几件事:

  1. 使用IDELAY或IODELAY:对数据线做精细的相位调整,确保采样点在眼图中央。
  2. 使用ISERDES或OSERDES:把高速串行数据转成并行数据,降低内部逻辑的工作频率。
  3. 做Bitslip对齐:因为D-PHY没有独立的帧同步信号,所以需要在数据流中寻找同步头(比如CSI-2的短包或长包起始码)。

我曾经在一个项目中,因为PCB走线等长没做好,导致lane之间skew太大,Bitslip怎么都对齐不了。后来在FPGA里加了per-lane的延迟调整,才勉强搞定。所以,硬件设计时,D-PHY的走线等长一定要严格控制,这是血的教训。

小技巧:

在FPGA中,可以用一个状态机来管理HS数据的接收:IDLE→SoT_DETECT→HS_RECEIVE→EoT_DETECT→IDLE。这样逻辑清晰,也容易调试。

4.3 LP状态与ULPS:省电的“待机模式”

LP状态,就是低功耗状态。D-PHY在LP模式下,电压摆幅只有1.2V左右,电流很小。但LP状态不止一种,它分为LP-00、LP-01、LP-10、LP-11四种。不同的组合,代表不同的控制指令。

其中,ULPS(Ultra-Low Power State)是超低功耗状态。说白了,就是让D-PHY进入“深度睡眠”。在ULPS下,所有驱动器都关闭,总线处于高阻态,功耗可以降到微瓦级别。

什么时候用ULPS?比如手机待机时,摄像头不需要工作,就可以让MIPI总线进入ULPS,省电。唤醒时,需要发送一个Mark-1序列(LP-11→LP-10→LP-00→LP-10→LP-11),让接收端“醒过来”。

我记得有一次调试,摄像头在ULPS唤醒后,偶尔会死机。后来发现是唤醒序列的时序不对,LP-00的保持时间太短。按照规范,LP-00至少要保持100μs。嗯,这个时间很长,但必须遵守。

警告:

ULPS唤醒时,接收端需要重新初始化PLL和同步电路。所以,从ULPS到正常HS传输,中间会有几百微秒的延迟。如果你的应用对唤醒时间敏感,比如拍照预览,就要考虑这个延迟。

4.4 Escape模式:LP下的“秘密通道”

Escape模式,是D-PHY在LP状态下的一种特殊传输模式。它允许在LP链路上传输一些控制信息,比如:

  • LPDT(Low-Power Data Transmission):在LP模式下传输少量数据,比如寄存器配置。
  • Trigger:触发信号,比如帧同步。
  • ULPS:进入ULPS的指令。

Escape模式的进入序列是:LP-11→LP-10→LP-00→LP-01→LP-00。然后发送8位Escape命令码,后面跟着数据。

你想想看,为什么要有Escape模式?因为HS模式功耗高,不适合传小数据。而LP模式虽然慢,但省电。所以,对于摄像头初始化时的寄存器配置,用Escape模式传,既省电又够用。

我建议,在FPGA实现中,Escape模式的接收可以用一个简单的状态机来处理。注意,Escape模式的数据率很低(通常几十Mbps),所以不需要复杂的时钟恢复电路。

4.5 Turnaround:总线的“方向盘”

Turnaround,简称TA。它的作用是改变总线的数据传输方向。在MIPI中,默认是主机(比如应用处理器)控制总线,从机(比如摄像头)响应。但有时候,从机需要主动发送数据给主机,比如摄像头上报错误状态。

这时候,就需要Turnaround。流程如下:

  1. 主机发送Turnaround请求(LP-11→LP-10→LP-00→LP-10→LP-00)。
  2. 主机释放总线,进入高阻态。
  3. 从机检测到Turnaround请求后,接管总线控制权。
  4. 从机发送数据,然后通过另一个Turnaround把控制权交还给主机。

说白了,Turnaround就像是一个“方向盘”,让总线控制权在主机和从机之间切换。我在项目中很少用到Turnaround,因为大多数场景下,主机主动发起所有通信就够了。但在一些复杂的传感器网络中,Turnaround是必不可少的。

避坑指南:

我曾经在实现Turnaround时,忘记在主机释放总线后加一个等待时间(通常≥150ns),导致从机还没准备好,主机就又开始驱动总线了。结果就是总线冲突,数据全乱。所以,Turnaround的时序一定要严格按照规范来,别偷懒。

好了,这一节的内容就这些。SoT和EoT是数据传输的“开关”,HS模式是“飙车”,LP和ULPS是“省电”,Escape模式是“秘密通道”,Turnaround是“方向盘”。把这些搞懂了,D-PHY协议层你就掌握了七八成。下一节,咱们聊聊CSI-2协议层,看看数据是怎么打包成帧的。