资讯动态

SoC-MIPI-Sensor时钟相关/MIPI时序相关LP-HS

发布时间:2026/8/24 12:56:37 来源:尧图企业网站定制
在对开发板做Sensor的bring-up的时候时钟是一个让人很头疼的问题因为时钟有很多很复杂我们要区分各个时钟的来源是什么含义是什么方向是什么。1.MCLK与MIPI_DPHY_RXCLK的关系我们就从MIPI接线出发首先在接线上就有两种时钟一个是MCLK一个是DPHY_RXCLK这两种时钟是两个方向相反、速率悬殊、物理特性完全不同的时钟信号。简单来说MCLK 是 SoC 喂给 Sensor 的基准心跳而 RXCLK 是 Sensor 带着图像数据送回给 SoC 的高频采样拍子。对照维度MCLK (Master Clock)RXCLK (MIPI RX Clock / Clock Lane)信号方向SoC → Sensor主控制器发给外设Sensor $\rightarrow$ SoC外设回传给主控制器物理信号形式单端信号单根线如 1.8V或3.3V CMOS差分信号一对线如MIPI_CLK_P与MIPI_CLK_N典型频率较低通常为 24MHz或27MHz极高通常在 200MHz到1.5GHz硬件引脚SoC 的普通 GPIO / 专用时钟输出引脚SoC 的专用高频 MIPI D-PHY / C-PHY 物理层引脚核心职责驱动 Sensor 芯片内部的 PLL 和逻辑电路启动供 SoC 端的 MIPI 接收器RX同步抓取高速数据包MCLK (Master Clock / 摄像头主时钟)一般我们在设备树中给出的时钟就是这个时钟。扮演角色Sensor 芯片的“起搏器”。工作原理芯片上电后Sensor 内部的逻辑电路和寄存器并不能独立凭空运转它需要一个外部参考频率。SoC 的时钟树CCF经过分频后通过一根独立的 PCB 走线将 MCLK如 $24\text{ MHz}$送入 Sensor 的MCLK/EXTCLK引脚。Sensor 拿到这颗低频 MCLK 后会用它内部的PLL锁相环进行成百上千倍的倍频生成 Sensor 内部所需的像素时钟、图像处理时钟以及 MIPI 发送时钟。[SoC 时钟源] --- (单端 24MHz MCLK) --- [Sensor 芯片] | (内部 PLL 放大成千倍) | v [SoC MIPI D-PHY] -- (差分高频 RXCLK Data) -- [Sensor MIPI 驱动]2.与其他时钟的关系除了上述两个时钟外在sensor内部还有两个极其重要的时钟先看关系图[SoC] --- MCLK (24MHz) │ ▼ (Sensor 内部锁相环 PLL 放大) ┌──────────┴──────────┐ ▼ ▼ Pixel Rate (PCLK) link_freq (RXCLK) (像素采样层) (MIPI 物理传输层)其实link freq就是时钟线CLK上的频率这里需要满足一个关系即Sensor 内部产生货物的速度Pixel Rate必须完美等于 MIPI 总线上搬运货物的物理总带宽Link freq*2*lanes。Pixel Rate像素速率HzSensor 硬件每秒钟实际产生的像素个数。bppBits Per Pixel位深每个像素占用的比特数如 RAW10 就是 10RAW12 就是 12。link freq链路频率HzMIPI 时钟线上Clock Lane的物理频率即前面提到的RXCLK频率。lanes数据通道数使用的 MIPI Data Lane 数量如 2-lane 或 4-lane。数字2因为 MIPI D-PHY 是DDR双倍速率传输时钟的上升沿和下降沿都会采样数据所以 1 Hz 的时钟频率可以传输 2 bits 的数据。在底层驱动如 RK3588 的 V4L2/VICAP 驱动中必须同时对齐这两个概念D-PHY 驱动依赖link_freqSoC 端的 MIPI RX 接收器D-PHY 物理层需要知道link_freq才能配置内部的高速计数器、设置正确的采样窗口如HS-Settle延时来精确抓取信号。如果设备树里的link_freq写错D-PHY 就会产生Lock Timeout报错导致streamon失败。ISP / VICAP 驱动依赖pixel_rateSoC 内部负责图像处理的 VICAP 或 ISP 模块需要读取pixel_rate用来判断内部的 AXI/Core 逻辑时钟Core Clock是否开得够大。如果 $\text{pixel\_rate} \text{Core Clock}$说明内部消费图像的速度落后于 Sensor 生产速度就会报FIFO Overflow溢出错误。3.由于时钟原因导致streamon失败理想状态下的完美工作流是这样的DTS 配置要求 24MHz→SoC 准确分频并在板子上输出 24MHz 的物理 MCLK→驱动将针对 24MHz 算好的寄存器表写入 Sensor。流程是这样的1.我们在设备树中写下sensor希望的时钟频率比如24MHz然后SoC按照这个频率通过MCLK发送给sensor假设是24MHz。2.Sensor 内部有一个锁相环PLL。寄存器表里配置的各种倍频Multiplier和分频Divider参数都是基于某一个特定的输入 MCLK 前提计算出来的。由此得到Pixel Rate (PCLK) link_freq (RXCLK)。上述就有可能出问题对于第一步而言1设备树里虽然写了要 24MHz但板子实际输出的并不一定刚好是 24MHz。因为 SoC 内部的时钟是由一个基础晶振比如 24MHz经过主 PLL 放大后再通过分频器Divider除下来的。如果分频系数不能整除实际输出的可能是 23.8MHz 或 24.5MHz。对于第二部而言2我们的寄存器表可能是基于27MHz的所以哪怕MCLK送来的是24MHz但经过PLL求得的频率是基于27MHz的。这两个错误都有可能因为时钟导致streamon失败。4.MIPI时序相关以下是关于 MIPI D-PHY 物理层中工作模式、LP01 状态以及高速模式物理特性的系统整理一、 MIPI 总线的工作模式LP 与 HSMIPI 协议通过在低功耗模式LP和高速模式HS之间动态切换兼顾了极高的传输速率与极低的功耗。模式特性LP (低功耗模式)HS (高速模式)核心作用发送控制指令、状态切换、低速数据传输传输突发的海量图像或视频有效数据信号类型单端信号 (Single-ended)差分信号 (Differential)电平特征逻辑0约 0V逻辑1约 1.2V共模电压约 200mV摆幅极小传输速率≤ 10 Mbps高达数 Gbps (视协议版本而定)二、 状态机过渡序列LP01在一个 MIPI 数据通道Lane中包含正极线Dp和负极线Dn两根信号线。在 LP 模式下它们作为两根独立的单端信号线可组合出 LP00、LP01、LP10 和 LP11 四种状态。LP01的具体含义是此时两根线的电平状态为正极线Dp为逻辑低电平0V。负极线Dn为逻辑高电平1.2V。LP01 并不是用来传输有效数据的而是状态机切换的过渡状态。当主机需要从空闲状态LP11唤醒总线并进入高速接收状态HS时必须发送一个标准的引导序列LP11(空闲) →LP01(准备) →LP00(进入高速)。三、 高速模式的物理特性低共模与小摆幅为了实现 Gbps 级别的传输MIPI HS 模式采用了特殊的物理层电平设计共模电压 (Common-Mode Voltage)指差分信号对相对于地的平均电压公式为 $V_{CM} \frac{V_{Dp} V_{Dn}}{2}$。MIPI HS 的 $V_{CM}$ 维持在 200mV 左右即两根线的电平围绕 0.2V 这个低基准线波动。摆幅极小 (Small Swing)指信号完成“0”与“1”切换时的电压差。HS 模式下的单端电压通常仅在 100mV 到 300mV 之间切换总跨度摆幅仅为 200mV。四、 采用“低共模、小摆幅”设计的核心优势突破传输速率极限引脚和走线存在寄生电容电平翻转就是充放电过程。爬升 200mV 的“台阶”所需时间远小于爬升 1.2V从而极大提升了信号翻转频率。大幅降低动态功耗动态功耗与电压摆幅的平方正相关。压缩摆幅能指数级降低海量数据连续传输时的发热和耗电。极佳的抗干扰能力极小的摆幅容易受噪因此搭配差分传输。外部电磁干扰会等量叠加在两根线上接收端通过读取电压差$V_{Dp} - V_{Dn}$可将共模干扰完美抵消。抑制自身电磁辐射 (EMI)微小的电压波动意味着对向外辐射的电磁能量极弱可防止 MIPI 线路干扰设备内部的高频天线如 Wi-Fi/5G。这份整理是否满足您作为技术文档或学习笔记的需求或者您还需要补充关于 MIPI 时序对齐方面的资料吗5.data lane和clk lane可以整理成一个不复杂、适合面试复习的版本MIPI D-PHY 里Clock Lane 和 Data Lane 是配合工作的。Clock Lane提供高速采样基准 Data Lane 真正传输 0/1 数据可以简单理解成Clock Lane 决定“什么时候采样”Data Lane 决定“采到什么数据”。比如 Data Lane 传0 1 0 1 1 0接收端按照 Clock Lane 的上升沿、下降沿去采这些 bit。D-PHY HS 模式使用 DDR所以一个 Clock 周期可以采两个 bit。HS / LPClock Lane 和 Data Lane 都有 HS、LP 状态。Data Lane 一般是LP ↓ 进入 HS ↓ SoT ↓ Packet Header ↓ Payload ↓ 退出 HS ↓ LP其中 SoT 可以理解为告诉接收端“一个新的高速数据 Burst 开始了”。接收端识别 SoT 后才知道后面是 CSI-2 Packet。HS-SETTLE 是什么HS-SETTLE主要针对Data Lane 从 LP 进入 HS。因为刚进入 HS 时LP电平 ↓ 高速差分信号建立 ↓ 接收端终端/模拟电路稳定 ↓ 数据真正可靠需要一点时间。所以Data Lane进入HS ↓ 等待 HS-SETTLE ↓ 开始认为采到的数据有效 ↓ 识别SoT ↓ 解析Packet注意HS-SETTLE 不是让 Clock 停止采样。Clock Lane仍然提供采样基准只是在 HS-SETTLE 期间接收端不会把前面不稳定的采样结果当成有效的 SoT/Packet 数据。所以可以记成Clock Lane → 决定什么时候采 HS-SETTLE → 决定什么时候开始相信采到的数据HS-SETTLE 太短 / 太长会怎样太短Data还没稳定 ↓ 接收端已经开始解析 ↓ 可能识别错SoT ↓ SOT / SOT Sync Error太长Data已经稳定 ↓ SoT已经开始发送 ↓ 接收端还在等待 ↓ 错过SoT ↓ SOT Sync Error所以不是越大越好也不是越小越好而是要落在正确的 PHY Timing 窗口内。非连续时钟如果因为温度或任何不稳定导致出现偏差可能数据发送了时钟采样还没稳定。Continuous / Non-Continuous ClockContinuous ClockClock Lane HS ~~~~~~~~~~~~~~~~~~~~~ 一直保持高速Clock Data Lane HS数据 → LP → HS数据 → LPNon-Continuous ClockClock Lane HS → LP → HS → LP → HS Data Lane HS → LP → HS → LP → HSNon-Continuous Clock 本身是合法模式。它只是多了一件事每次空闲后Clock Lane 都要重新从 LP 进入 HS。因此如果 PHY Timing 裕量比较小某次重新建立高速状态时更容易暴露时序问题。可能Clock重新进入HS ↓ Data Lane也准备进入HS ↓ PHY Timing裕量不足 ↓ SoT识别异常 ↓ SOT / Sync Error ↓ Packet异常严重时才可能进一步Packet异常 ↓ Frame结构异常 ↓ VID_LOCK异常 ↓ RKCIF收不到完整帧 ↓ DQBUF timeout这里不要再把它和PCLKDET0直接绑定。最后记住四句话Clock Lane什么时候采。Data Lane传什么数据。HS-SETTLE什么时候开始认为 Data Lane 的采样结果可靠。Non-Continuous ClockClock Lane 会反复 LP↔HS因此 PHY Timing 边界问题更容易被暴露。另外MIPI Clock Lane ≠ PCLKMIPI Clock Lane 是高速串行数据的采样基准PCLK 是芯片内部视频/像素处理使用的 Pixel Clock。

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价