拓冰建站拓冰建站
首页 / 资讯中心 / 正文

MIPI D-PHY低功耗发射端LP TX原理、FPGA实现与调试实战

1. 从一根时钟线说起LP TX到底在MIPI系统里扮演什么角色搞MIPI D-PHY调试的人迟早会撞上LP TX这个词。它不像HSHigh-Speed数据通道那样动辄跑Gbps吸引眼球也不像Clock Lane那样直接决定采样窗口但一旦LP TX出问题整个链路可能连初始化都过不去——屏幕不亮、摄像头枚举失败、寄存器读写超时最后查来查去发现是低功耗状态下的发射端时序没配对。LP TX全称Low-Power Transmitter是MIPI D-PHY物理层里负责低功耗信令发送的模块。D-PHY的每条Lane都包含一套HS收发器和一套LP收发器两者共享同一对差分引脚。HS模式用200mV左右的差分摆幅跑高速数据LP模式则把差分线当成两根独立的单端线来用摆幅拉到0V到1.2V靠两根线的电平组合表达四种状态。LP TX就是驱动这四种状态的那部分电路。为什么需要LP TX因为MIPI链路不是一直跑高速的。摄像头和屏幕大部分时间处于待机或低刷新状态如果HS收发器一直开着功耗和EMI都受不了。LP模式用极低的静态电流维持链路状态同时还能传递控制命令。LP TX的核心任务就三个正确产生LP-00、LP-01、LP-10、LP-11四种线路状态在HS和LP之间完成有序切换保证LP状态之间的转换满足协议规定的时序参数。很多人第一次接触LP TX是在FPGA实现MIPI D-PHY的项目里。Xilinx和Lattice都有D-PHY的参考设计但参考设计通常只给一个能跑的配置不会告诉你为什么LP TX的时序要那样约束。等到自己改参数、换器件、调屏幕的时候问题就来了LP状态切换太快导致从设备没识别到或者LP TX的驱动能力不够导致上升沿太缓再或者LP和HS切换的衔接处出现毛刺。这些坑我在不同项目里踩过不止一次。这篇文章面向的是正在调试MIPI D-PHY链路的嵌入式工程师、FPGA开发者以及需要理解LP TX行为以便定位屏幕花屏、摄像头无信号问题的硬件工程师。我会从LP TX的电气原理讲起拆解四种LP状态的实际波形然后给出FPGA实现LP TX时的时序约束方法和实测调试技巧最后聊几个典型的LP TX相关故障案例。读完之后你应该能独立判断LP TX的问题出在驱动能力、时序参数还是状态机逻辑上。2. LP TX的电气本质推挽输出为什么不能随便用2.1 四种LP状态不是随便定义的MIPI D-PHY的LP模式把一对差分线拆成两根独立的单端线分别叫Dp和Dn。每根线可以被驱动到0V或1.2V两根线的组合产生四种状态状态Dp电平Dn电平含义LP-000V0VBridge状态HS进入前的静默态LP-010V1.2V逻辑0LP-101.2V0V逻辑1LP-111.2V1.2VStop状态链路空闲这四种状态不是随意排列的。协议规定LP状态之间的转换必须经过LP-00也就是说从LP-11到LP-01不能直接跳必须先到LP-00再到LP-01。这个规则的存在是因为LP-00代表差分线被拉到共同mode是HS和LP切换的锚点。如果你在FPGA里写状态机时忽略了这个约束从设备可能直接不响应。LP TX的电路结构本质上是一个推挽驱动器。每根线都有一个上管和一个下管上管把线拉到1.2V下管把线拉到0V。推挽结构的好处是驱动能力强、上升下降沿陡但坏处是如果两根线的推挽管同时导通就会形成从1.2V到地的直通电流烧管子的风险很大。所以LP TX的控制逻辑必须保证同一根线的上下管不会同时打开同时两根线之间的状态切换也要有序。2.2 为什么LP TX的驱动能力需要仔细调LP模式的速率虽然不高典型在10Mbps以下但驱动能力的设计很讲究。驱动太弱上升沿变缓从设备可能在采样点还没看到电平翻转驱动太强过冲和振铃严重EMI测试过不去还可能误触发从设备的输入阈值。LP TX的输出阻抗通常设计在50欧姆左右和传输线阻抗匹配。但实际PCB上MIPI走线的阻抗受叠层、线宽、过孔影响很难做到精确的50欧姆。这时候LP TX的驱动能力就需要可调。很多D-PHY IP核提供驱动强度配置寄存器可以按档位调整上管和下管的导通电阻。我实测过一组数据在一条约8cm的FPC排线上LP TX驱动强度设为最低档时LP-11到LP-00的下降沿约15ns从设备能正常识别设为最高档时下降沿缩到3ns但过冲达到300mV眼图明显恶化。最后选了中间档下降沿约8ns过冲控制在100mV以内。这个例子说明LP TX的驱动强度不是越大越好要结合走线长度和从设备的输入特性来选。注意LP TX的驱动强度配置通常需要配合从设备的输入阈值。有些屏幕模组的LP输入阈值偏高驱动太弱会导致识别失败有些则输入电容大驱动太强反而振铃。2.3 LP TX和HS TX共享引脚带来的切换难题D-PHY的每条Lane只有一对引脚HS TX和LP TX都挂在这对引脚上。HS模式时LP TX必须处于高阻态否则会干扰HS的差分信号。LP模式时HS TX也必须关掉。这个切换过程由D-PHY的状态机控制但LP TX的使能和禁用时序很关键。如果LP TX在HS TX还没完全启动时就退出高阻两个驱动器会同时驱动引脚轻则信号失真重则烧毁输出级。反过来如果HS TX已经关闭但LP TX还没接管引脚会浮空从设备可能误判为未知状态。协议里规定的切换顺序是HS进入时先经过LP-11到LP-00然后HS TX启动LP TX进入高阻HS退出时HS TX先关闭LP TX接管并回到LP-11。这个顺序在FPGA实现时需要用状态机严格保证不能靠组合逻辑随便拼。3. 用FPGA实现LP TX状态机、时序约束和实测波形3.1 状态机怎么写才不会被从设备拒绝在FPGA里实现LP TX核心是一个状态机控制Dp和Dn两根线的推挽输出。状态机的状态就是LP-00、LP-01、LP-10、LP-11四种加上HS请求和HS退出两个过渡状态。我习惯用三段式状态机来写第一段时序逻辑更新当前状态第二段组合逻辑判断转移条件第三段时序逻辑输出Dp和Dn的控制信号。这样做的好处是输出无毛刺因为输出是寄存过的。转移条件里最容易出错的是LP状态的转换顺序。协议要求任何LP状态之间的转换必须经过LP-00。比如从LP-11到LP-01正确路径是LP-11 - LP-00 - LP-01不能直接跳。我在早期项目里为了省时钟周期直接写了LP-11到LP-01的转移结果从设备完全不响应。后来用示波器抓波形发现从设备在LP-11之后等待LP-00的桥接状态没等到就不进入下一步。状态机的时钟频率选择也有讲究。LP模式的UIUnit Interval典型在50ns到100ns之间状态机的时钟至少要能分辨出这个时间粒度。我一般用100MHz时钟每个LP状态持续至少5个时钟周期这样时序余量充足也方便用计数器控制状态持续时间。3.2 时序约束里那些容易忽略的参数FPGA实现LP TX时时序约束不只是设个时钟频率那么简单。LP TX的输出到引脚之间通常有IOBInput/Output Block和PCB走线这些延迟会影响LP状态的转换时刻。如果从设备对LP状态的建立保持时间有要求就需要在约束里体现。Vivado里可以用set_output_delay来约束LP TX的输出时序。但LP模式的时序参数和HS不同协议里定义的LP时序参数包括参数含义典型值T_LPXLP状态转换的最小时间50nsT_CLK_PREPAREClock Lane从LP-11到HS的准备时间38nsT_CLK_ZEROHS零差分态持续时间300nsT_HS_PREPAREData Lane从LP-11到HS的准备时间40ns4UIT_HS_ZEROHS零差分态持续时间85ns6UI这些参数在协议里有明确的最小值要求FPGA状态机的计数器必须保证每个状态持续时间不小于这些值。我见过有人把T_LPX设成20ns结果从设备偶尔能识别偶尔不能查了半天才发现是LP状态转换太快。约束文件里还要注意false path的设置。LP TX的控制信号和HS TX的控制信号之间如果有逻辑交互但实际不会同时有效可以设false path减少时序压力。但前提是你得确认这两个信号真的不会同时有效否则设了false path反而掩盖了真正的时序问题。3.3 用示波器抓LP TX波形时看什么调试LP TX示波器是最直接的工具。但抓LP波形和抓HS波形不一样LP是单端信号要用两个探头分别接Dp和Dn然后看两根线的电平组合。我通常先抓LP-11到LP-00的转换。这个转换是HS进入前的关键节点如果下降沿太缓或者有台阶说明LP TX的驱动能力不够或者走线阻抗不匹配。正常的下降沿应该是单调的从1.2V降到0V时间在几纳秒到十几纳秒之间。然后抓LP-00到LP-01的转换。这个转换代表从Bridge状态发出逻辑0Dn从0V升到1.2VDp保持0V。如果Dn的上升沿出现振铃可能是驱动太强或者从设备输入电容太大。可以在Dn上串一个小电阻比如22欧姆来抑制振铃但电阻太大会影响上升时间。最后抓HS退出后的LP-11恢复。HS TX关闭后LP TX接管Dp和Dn都应该回到1.2V。如果有一根线恢复慢可能是LP TX的使能信号有延迟或者HS TX的关闭和LP TX的开启之间有竞争。提示抓LP波形时示波器的带宽不用太高500MHz足够。但探头的地线要短否则地环路会引入振铃让你误以为是LP TX的问题。4. LP TX相关的典型故障从花屏到枚举失败4.1 屏幕横向花屏和LP TX的关联MIPI屏幕横向花屏是一个很常见的故障现象。花屏的原因很多但有一类花屏和LP TX直接相关屏幕在初始化阶段能收到命令但进入HS显示数据后偶尔花屏或者从待机唤醒后花屏。这类问题的根因往往是LP TX在HS退出后的恢复时序不对。屏幕从HS模式退出后LP TX需要把Dp和Dn拉回LP-11然后屏幕才能接收下一条LP命令。如果LP TX恢复太慢屏幕可能在LP-11还没稳定时就尝试解析命令导致命令错位反映在屏幕上就是花屏。我遇到过一个案例RK3588平台驱动一块MIPI屏幕待机唤醒后必花屏。用示波器抓LP TX波形发现HS退出后Dp和Dn回到LP-11的时间差了约20nsDp先到Dn后到。屏幕的LP接收器在Dp和Dn都到LP-11之后才认为链路空闲这个20ns的偏差导致屏幕偶尔在Dn还没到1.2V时就采样了命令。后来在FPGA的LP TX状态机里把Dp和Dn的恢复改成同一时钟周期输出问题解决。这个案例说明LP TX的两根线之间的偏斜skew是一个容易被忽略的参数。协议里对LP TX的Dp和Dn之间的偏斜没有像HS那样严格规定但实际从设备可能对此敏感。在FPGA实现时尽量让Dp和Dn在同一时钟沿更新可以减少偏斜。4.2 摄像头枚举失败LP TX的驱动能力背锅MIPI CSI-2摄像头的枚举过程依赖LP模式下的寄存器读写。如果LP TX的驱动能力不足摄像头可能无法正确接收I2C over MIPI的命令导致枚举失败。我调试过一款DVP转MIPI的摄像头模组FPGA端LP TX驱动强度设为默认值摄像头偶尔能枚举成功偶尔失败。用示波器抓LP TX的波形发现LP-01状态下Dn的高电平只有1.0V左右而摄像头的LP输入阈值是1.1V。驱动能力不足导致高电平达不到阈值摄像头识别逻辑1时出现误判。解决方法是提高LP TX的驱动强度或者缩短走线长度。但提高驱动强度会带来过冲需要折中。最后把驱动强度提高一档同时在Dn上串了10欧姆电阻高电平达到1.15V过冲控制在150mV以内枚举稳定。这个案例的教训是LP TX的驱动能力不是只看波形好不好看要对照从设备的输入阈值来验证。协议规定LP TX的高电平最小是1.0V但很多从设备的实际阈值在1.1V到1.2V之间留的余量并不大。4.3 LP和HS切换时的毛刺导致数据错误LP TX和HS TX共享引脚切换时如果控制信号有毛刺可能在HS数据上叠加一个LP脉冲导致接收端误判。我在一个FPGA项目中遇到过HS数据偶发错误误码率不高但一直存在。用高速示波器抓HS眼图发现眼图上有偶发的窄脉冲。追到LP TX的控制信号发现HS使能信号和LP TX高阻控制信号之间有竞争冒险在切换瞬间产生了一个约2ns的毛刺。解决方法是在LP TX的高阻控制信号上加一级寄存器用HS使能信号的同步版本去控制消除组合逻辑的竞争。同时把LP TX的输出使能改成先断后通确保HS TX启动前LP TX已经完全进入高阻。这个问题的隐蔽性在于毛刺很窄普通示波器可能抓不到需要高带宽示波器加触发。而且毛刺出现的概率和温度、电压有关实验室常温下可能不出现到了现场就偶发。所以LP TX和HS TX的切换逻辑一定要用同步设计避免组合逻辑直接驱动输出使能。5. 调试LP TX的实操清单和参数速查5.1 上电前先确认这几件事在给MIPI链路上电之前先确认LP TX相关的硬件和配置引脚连接Dp和Dn是否接反。MIPI的Dp和Dn有极性要求接反了LP状态会全部错位。有些FPGA的D-PHY IP核支持极性翻转但最好在PCB上就接对。供电电压LP TX的1.2V供电是否稳定。LP TX的输出高电平直接由这个电压决定如果供电偏低高电平可能达不到从设备的阈值。驱动强度配置FPGA的D-PHY IP核里LP TX驱动强度是否配置。有些IP核默认是最低档需要手动改。状态机时钟LP TX状态机的时钟频率是否足够分辨LP状态的持续时间。建议至少50MHz100MHz更稳妥。5.2 用表格快速定位LP TX问题现象可能原因排查方法从设备完全不响应LP TX无输出或状态机卡死示波器看Dp/Dn是否有LP-11偶尔响应偶尔不响应驱动能力不足或时序余量小抓LP波形看高电平幅值和转换时间HS数据偶发错误LP/HS切换毛刺高带宽示波器抓切换瞬间波形待机唤醒后花屏LP TX恢复时序偏斜抓HS退出后Dp/Dn回到LP-11的时间差枚举失败LP TX高电平达不到阈值对照从设备输入阈值测LP高电平5.3 几个实测有效的调试技巧第一个技巧是用GPIO模拟LP TX。在正式用D-PHY IP核之前可以用FPGA的普通GPIO配合推挽输出模式手动产生LP状态序列验证从设备是否能响应。这样可以把LP TX的问题和HS的问题分开定位。我通常先用GPIO发LP-11 - LP-00 - LP-01 - LP-00 - LP-11的序列看从设备是否有ACK。如果有说明LP TX的基本功能没问题再上D-PHY IP核。第二个技巧是在LP TX输出上串小电阻。22欧姆到33欧姆的串阻可以抑制过冲和振铃同时不影响LP状态的转换时间。如果串阻后波形明显改善说明驱动太强或走线阻抗不匹配。如果串阻后高电平达不到阈值说明驱动本来就不够需要提高驱动强度而不是加电阻。第三个技巧是用眼图模板检查LP波形。虽然LP不是高速信号但可以用示波器的眼图功能把多个LP转换周期叠加看高电平和低电平的分布。如果高电平的分布很宽说明驱动能力或供电有问题如果转换沿的分布很宽说明时序抖动大可能是状态机时钟不稳定。注意LP TX的调试不要只盯着LP本身。LP TX的问题可能表现为HS数据错误HS的问题也可能表现为LP状态异常。定位时要结合协议分析仪和示波器从链路初始化的第一步开始逐段排查。6. 从LP TX延伸出去D-PHY调试的全局视角LP TX只是D-PHY物理层的一部分但它的行为会影响整个链路。调试LP TX的时候我习惯把它放在D-PHY的全局里看LP TX负责低功耗信令HS TX负责高速数据两者共享引脚由状态机协调。任何一个环节出问题都可能表现为另一个环节的故障。比如屏幕花屏可能是HS数据眼图不好也可能是LP TX在HS退出后恢复不对。摄像头枚举失败可能是LP TX驱动不够也可能是HS时钟没起来。定位的时候先用协议分析仪看链路初始化的流程走到哪一步再用示波器看对应步骤的波形最后对照协议参数检查时序余量。LP TX的调试经验告诉我MIPI D-PHY的问题很少是单一因素造成的。驱动能力、时序参数、状态机逻辑、PCB走线、从设备特性这些因素相互影响。解决一个问题的时候要确认没有引入新的问题。比如提高LP TX驱动强度解决了高电平不够的问题但可能带来过冲需要再调串阻。这种迭代在D-PHY调试里很常见耐心和系统的排查方法比任何单一技巧都重要。最后分享一个我常用的检查方法把LP TX的所有状态转换列成表每个转换对应的Dp/Dn电平、持续时间、前后状态都写清楚然后逐条对照协议和从设备手册。这个表看起来笨但能发现很多凭直觉容易忽略的细节。我在最近一个项目中就是靠这个表发现LP-00到LP-10的转换时间比协议要求少了5ns补上之后链路稳定性明显提升。
分享:

看完干货,该让你的企业上线了

免费需求沟通 · 48 小时内出具建站方案 · 河南本地可上门