尧图网络科技YAOTU DIGITAL 获取报价
获取报价
首页 / 资讯中心 / 文章详情

MIPI LP TX 低功耗发送原理与 FPGA 实现调试指南

发布时间:2026/9/29 22:48:51

资讯中心
01
ARTICLE

MIPI LP TX 低功耗发送原理与 FPGA 实现调试指南

MIPI LP TX 低功耗发送原理与 FPGA 实现调试指南
MIPI LP TX 这个关键词乍一看像是协议文档里随手截出来的一个信号名但真正在调试 MIPI 屏、写 FPGA 驱动或者调 C-PHY 参数的人看到它心里多半会咯噔一下——LP 模式发不出去整条链路就直接趴窝。LP TX 指的是 MIPI D-PHY 物理层里的低功耗发送方向它不负责高速图像数据却掌管着命令、参数、进入高速模式的握手信号。很多屏没信号花屏初始化失败的问题最后都落到这个不起眼的低功耗通道上。这篇内容面向正在做 MIPI 屏驱动、FPGA 实现 MIPI、嵌入式工业设备显示模块的工程师把 LP TX 从协议原理、时序细节、代码实现到实测排错完整拆一遍尽量让刚接触 MIPI 的人也能照着复现让调过几块屏的人也能找到之前没想通的那一环。1. 为什么 LP TX 是 MIPI 链路里最容易被低估的一环1.1 LP 模式和 HS 模式的分工到底怎么划MIPI D-PHY 把每条数据 lane 的工作状态分成两种HSHigh-Speed和 LPLow-Power。HS 模式跑的是差分小摆幅信号速率可以到 Gbps 级别专门传像素数据LP 模式跑的是单端大摆幅信号速率通常只有十几 Mbps用来传控制信息和总线状态。LP TX 就是主机侧或者 FPGA 侧在 LP 模式下把信号发到 lane 上的那套逻辑。很多人第一次接触 MIPI 会以为低速的 LP 不重要这个判断在纯数据回放场景下勉强成立但在真实屏驱动里完全不成立。原因很简单屏要显示图像必须先被叫醒。这个叫醒过程——从 LP-11 到 LP-01 到 LP-00 再到 HS-0 的握手序列——全部走 LP 通道。LP TX 发不对屏根本不会进入 HS 接收状态后面像素数据准备得再漂亮也没用。从信号数量上看一条 lane 在 LP 模式下其实是两根线Dp 和 Dn各自独立驱动组合出四种状态LP-00、LP-01、LP-10、LP-11。这四种状态不是随便编的它们构成了 MIPI 的语言。LP TX 的本质工作就是按照协议规定的顺序把这四种状态按时序切换出去。1.2 一个真实场景屏初始化卡在第一条命令我遇到过一块 ST7701S 的 MIPI 液晶屏接在自研的 FPGA 板上现象是上电后背光亮、但屏幕全白逻辑分析仪抓 lane 上什么都没有。一开始怀疑是 HS 时钟没起来查了半天 PLL 和时钟树没问题。后来把探头接到 LP 通道上才发现FPGA 在发第一条 DCS 命令之前LP 状态序列根本没走完——它直接从 LP-11 跳到了 HS-0中间少了 LP-01 和 LP-00 的过渡。这个坑非常典型。MIPI 协议里从 LP-11 进入 HS 传输必须经过 LP-01、LP-00、HS-0 这一串状态每一步都有最小时间要求比如 LP-01 和 LP-00 的持续时间 TLPX 有下限。FPGA 里如果用简单的状态机直接跳转综合工具可能把中间状态优化掉或者时序约束没写对导致实际输出被压缩。屏那边看到的是一个非法的状态跳变直接忽略于是没信号。所以 LP TX 不是能发出去就行它是一套有严格时序契约的状态机。理解这一点后面所有调试才有方向。1.3 LP TX 和 HS TX 在实现上的关键差异维度LP TXHS TX信号形式单端Dp/Dn 独立驱动差分Dp/Dn 互补摆幅约 1.2V典型约 200mV典型速率通常 ≤ 20 Mbps可达 Gbps 级驱动方式推挽或开漏取决于具体实现电流模差分驱动状态语义LP-00/01/10/11 四态编码差分 0/1主要用途控制、握手、进入/退出 HS像素数据、高速命令时序约束TLPX、TCLK-POST 等眼图、抖动、偏斜这张表里最值得注意的是状态语义这一行。HS 模式下你只管发 0 和 1LP 模式下你发的是状态而状态之间的转换顺序本身就是信息。这也是为什么 LP TX 的调试不能只看波形有没有跳变还要看跳变的顺序对不对。2. LP TX 的状态机与时序协议里那些不能省的步骤2.1 四种 LP 状态的物理含义先把四种状态说清楚不然后面时序没法讲。MIPI D-PHY 的一条 lane 有两根线 Dp 和 DnLP 模式下每根线可以被驱动到高或低于是有四种组合LP-11Dp1, Dn1这是 lane 的空闲状态也叫 Stop 状态。总线上没有传输时lane 应该停在这里。LP-01Dp0, Dn1这是进入 HS 前的第一个过渡状态。LP-00Dp0, Dn0这是进入 HS 前的第二个过渡状态也是很多控制序列的基准。LP-10Dp1, Dn0这个状态在 HS 进入序列里不出现但在某些退出序列和特殊控制里会用到。从 LP-11 到 HS 传输的标准路径是LP-11 → LP-01 → LP-00 → HS-0。注意这里 HS-0 已经是 HS 模式了不是 LP 状态。LP TX 负责的是前面三步最后一步交给 HS TX。反过来从 HS 退出回 LP 的路径是HS → LP-11中间会经过一个短暂的过渡具体时序由 THS-EXIT 等参数约束。这个退出过程如果处理不好会出现屏显示正常但偶尔闪一下的现象因为 lane 在退出时状态不干净。2.2 TLPX 和 TCLK-POST两个最常被忽略的时间参数协议里给 LP 状态转换定义了一组时间参数其中两个最容易出问题TLPXLP 状态转换之间的最小时间。协议规定 TLPX 最小 50ns。也就是说从 LP-11 到 LP-01、从 LP-01 到 LP-00每一步至少要维持 50ns。很多 FPGA 实现里状态机跑得太快一步只维持了几个时钟周期如果时钟是 100MHz一个周期 10ns五六个周期才 50ns稍不注意就短了。TCLK-POST从最后一次 HS 传输结束到下一次 LP 状态转换之间的最小时间协议规定最小 60ns。这个参数在连续传输场景里很关键如果主机发完一帧数据立刻又开始下一轮 LP 握手中间间隔不够屏可能来不及处理。这两个参数在代码里怎么落地最直接的办法是在状态机里加计数器。比如系统时钟 100MHzTLPX 要求 50ns那就至少计 5 个周期实际实现建议留余量计 8 到 10 个周期。TCLK-POST 要求 60ns计 8 个周期起步留到 12 个周期更稳。提示不要卡着协议最小值实现。协议给的是下限实际链路有走线延迟、屏端接收容限、温度漂移留 50% 到 100% 的余量是常规做法。2.3 进入 HS 的完整握手序列拆解把进入 HS 的序列完整写一遍这是 LP TX 最核心的输出内容LP-11 保持lane 空闲Dp1, Dn1。这个状态要维持足够长时间让屏端确认总线空闲。LP-11 → LP-01Dp 拉低Dn 保持高。这一步的持续时间 ≥ TLPX。LP-01 → LP-00Dn 也拉低。持续时间 ≥ TLPX。LP-00 → HS-0这里发生模式切换LP TX 交出控制权HS TX 接管开始发差分信号。从 LP-00 到 HS-0 的转换时间由 THS-ZERO 等参数约束。HS 传输发同步序列Sync、数据。HS → LP-11传输结束回到空闲。这个序列里第 2 步和第 3 步是 LP TX 的全部工作。听起来简单但实际实现时有两个细节第一Dp 和 Dn 的拉低顺序不能反。必须是先 Dp 后 Dn对应 LP-01 再到 LP-00。如果反过来先拉 Dn那就是 LP-10协议里这不是进入 HS 的合法路径。第二从 LP-00 切到 HS-0 的瞬间驱动电路要从单端推挽切换到差分电流模。这个切换如果做得生硬会在 lane 上产生毛刺屏端可能误判。常见做法是在 LP-00 末尾加一个短暂的准备期让驱动电路完成切换。2.4 退出 HS 时 LP TX 要做什么退出序列相对简单但同样有坑。HS 传输结束后HS TX 停止差分驱动lane 需要回到 LP-11。这个过程里 LP TX 要做的不是主动发什么而是确保 lane 被正确拉回空闲。具体来说HS 驱动停止后lane 上的差分电压会衰减LP 接收端的终端电阻会把 Dp 和 Dn 拉到一个确定电平。LP TX 此时要驱动 Dp 和 Dn 都到高形成 LP-11。如果驱动时机不对比如 HS 还没完全停止就强行拉高会出现电平冲突波形上表现为一个尖峰严重时可能损伤驱动电路。实测中判断退出是否干净可以看 LP-11 建立后的波形是否平稳。如果 LP-11 上有振铃或者台阶说明退出时序有问题需要调整 THS-EXIT 相关的延迟。3. 用 FPGA 实现 LP TX从状态机到约束文件3.1 为什么很多 FPGA MIPI 方案在 LP 上翻车FPGA 实现 MIPI 有个天然矛盾FPGA 的 IO 结构是为通用数字信号设计的而 MIPI 的 LP 模式要求特定的驱动特性和时序精度。常见的翻车点有三个第一IO 标准选错。MIPI LP 信号摆幅约 1.2V如果 FPGA bank 电压设成 3.3V 或者 1.8V要么电平不匹配要么需要外部电平转换。有些方案直接用 1.8V LVCMOS 驱动短距离能凑合长一点就不稳。第二状态机被综合优化。前面提到的 LP-01、LP-00 过渡状态如果代码里写成组合逻辑直接跳转综合工具可能认为中间状态不影响输出而合并掉。解决办法是把状态机写成时序逻辑每个状态用寄存器保持并且加综合属性防止优化。第三时序约束缺失。LP 状态的持续时间靠时钟周期数保证如果时钟约束没写对实际综合出来的延迟可能和预期差很多。特别是跨时钟域的场景LP TX 状态机和 HS 数据路径可能在不同时钟域交接处的时序要专门约束。3.2 一个可综合的 LP TX 状态机写法下面给一个简化的 Verilog 状态机框架重点展示状态保持和计数器逻辑。实际项目里需要根据具体 PHY 硬核或软核调整。// 假设系统时钟 100MHzTLPX 计 10 个周期 100ns localparam TLPX_CNT 10; localparam TPOST_CNT 12; typedef enum logic [2:0] { ST_LP11, ST_LP01, ST_LP00, ST_HS_REQ, ST_HS_ACTIVE, ST_HS_EXIT } lp_state_t; lp_state_t state, next_state; logic [7:0] cnt; always_ff (posedge clk or negedge rst_n) begin if (!rst_n) begin state ST_LP11; cnt 8d0; end else begin state next_state; if (state ! next_state) cnt 8d0; else cnt cnt 1b1; end end always_comb begin next_state state; case (state) ST_LP11: if (tx_start) next_state ST_LP01; ST_LP01: if (cnt TLPX_CNT) next_state ST_LP00; ST_LP00: if (cnt TLPX_CNT) next_state ST_HS_REQ; ST_HS_REQ: next_state ST_HS_ACTIVE; ST_HS_ACTIVE: if (tx_done) next_state ST_HS_EXIT; ST_HS_EXIT: if (cnt TPOST_CNT) next_state ST_LP11; default: next_state ST_LP11; endcase end // LP 驱动输出Dp/Dn 的电平由状态决定 always_comb begin case (state) ST_LP11: {dp_out, dn_out} 2b11; ST_LP01: {dp_out, dn_out} 2b01; ST_LP00: {dp_out, dn_out} 2b00; ST_HS_REQ: {dp_out, dn_out} 2b00; // 准备切 HS default: {dp_out, dn_out} 2b11; endcase end这段代码的关键点状态转换用next_state组合逻辑加寄存器保证每个状态至少维持一个时钟周期。计数器cnt在状态不变时累加状态切换时清零用来控制 TLPX 和 TPOST。LP 输出直接由状态译码ST_LP01输出2b01Dp0, Dn1ST_LP00输出2b00顺序不能错。实际项目中ST_HS_REQ到ST_HS_ACTIVE的切换要配合 PHY 的 HS 使能信号不能自己拍脑袋切。如果用的是硬核 PHY通常有专门的接口信号如果是软核自己搭那 HS 驱动电路的使能时序要单独设计。3.3 约束文件里必须写清楚的几条FPGA 实现里约束文件往往比代码更容易出问题。LP TX 相关的约束至少包括# 假设 lp_dp 和 lp_dn 是连接到 PHY 的管脚 set_output_delay -clock [get_clocks sys_clk] -max 2.0 [get_ports lp_dp] set_output_delay -clock [get_clocks sys_clk] -min 0.5 [get_ports lp_dp] set_output_delay -clock [get_clocks sys_clk] -max 2.0 [get_ports lp_dn] set_output_delay -clock [get_clocks sys_clk] -min 0.5 [get_ports lp_dn] # 如果 LP 状态机和 HS 路径跨时钟域加 false path 或 async 约束 set_false_path -from [get_clocks lp_clk] -to [get_clocks hs_clk]输出延迟的具体数值要根据 PHY 手册和板级走线来定上面给的只是示例。重点是LP 信号的输出延迟要约束否则综合工具不知道这些信号有多紧的时序要求可能布局布线时随便放导致实际延迟超标。另外如果 LP TX 和 HS TX 共用管脚这是常见做法因为一条 lane 物理上就两根线那三态控制要特别小心。LP 驱动和 HS 驱动不能同时使能否则会打架。通常用一个oe_lp和oe_hs信号互斥控制切换时留死区时间。3.4 用逻辑分析仪验证 LP 序列的实操方法代码写完、约束加完下一步是验证。最直接的工具是逻辑分析仪抓 Dp 和 Dn 两根线。抓的时候注意几点采样率要足够高。LP 状态最短 50ns采样率至少 200MSa/s 才能看清建议 500MSa/s 以上。触发条件设在 LP-11 到 LP-01 的跳变上这样能抓到完整的进入序列。同时抓时钟 lane 和数据 lane因为进入 HS 的握手在时钟 lane 和数据 lane 上都要发生。抓到波形后对照协议检查LP-11 是否稳定、LP-01 和 LP-00 的持续时间是否 ≥ TLPX、进入 HS 前是否有非法状态。如果发现 LP-01 或 LP-00 时间太短回去改计数器如果发现状态顺序不对检查状态机译码逻辑。我自己的习惯是先在低速下验证 LP 序列比如把系统时钟降到 10MHz这样每个状态持续时间长容易抓。确认序列正确后再升到正常频率看时序余量够不够。4. LP TX 调试实战从没信号到稳定点亮4.1 案例一ST7701S 屏完全无反应的排查链路回到开头那个 ST7701S 的案例完整排查过程是这样的第一步确认供电和复位。屏的 VDD、VDDI、复位时序都正常背光亮说明供电没问题。第二步抓 LP 通道。逻辑分析仪接 Dp/Dn发现上电后 lane 一直停在 LP-11没有任何状态跳变。这说明主机侧根本没发起传输。第三步查 FPGA 内部信号。用在线逻辑分析仪比如集成在工具链里的 ILA看 LP TX 状态机发现状态机停在ST_LP11tx_start信号没来。往上追发现是上层命令调度模块的问题——它等待一个PHY 就绪信号而这个信号因为 PHY 初始化配置错误一直没拉高。第四步修 PHY 配置。检查 PHY 硬核的配置寄存器发现 lane 使能位没写对数据 lane 被禁用了。改过来之后tx_start正常LP 序列发出来了。第五步验证序列。再抓波形看到 LP-11 → LP-01 → LP-00 → HS 的完整序列屏开始有反应但显示还是花屏。第六步查 HS 数据。花屏说明 HS 数据有问题跟 LP TX 无关了转去查像素格式和时序参数。这个案例的教训是LP TX 没输出不一定是 LP TX 本身的问题可能是上游的使能信号没来。排查时要沿着信号链往上追不要一上来就改状态机。4.2 案例二LP 序列正确但屏偶尔不亮另一个案例更隐蔽。屏大部分时候能亮但大概十次里有一次不亮重新上电又好了。抓 LP 波形发现失败那次 LP-01 的持续时间比正常时短了约 20ns。原因是状态机里的计数器用了组合逻辑比较综合工具在不同布局下延迟不一致偶尔导致状态提前切换。解决办法是把计数器比较改成寄存器输出并且把 TLPX 的计数值从刚好满足最小值改成留一倍余量。改完之后连续上电 100 次没有再出现。这个坑说明LP TX 的时序余量不能省。协议最小值是给理想情况的实际工程里要按最坏情况设计。4.3 案例三多 lane 场景下 LP 不同步MIPI 通常有多条数据 laneLP TX 要在所有 lane 上同步发状态。如果各 lane 的 LP 驱动有偏斜屏端可能采样出错。实测中发现FPGA 不同 bank 的管脚延迟差异可能有几百皮秒到几纳秒。对于 LP 这种低速信号几纳秒的偏斜通常还能容忍但如果偏斜超过 TLPX 的一定比例就会出问题。解决办法有两个一是把同一组 lane 的 LP 信号约束到同一个 bank 或相邻管脚减少布局差异二是在代码里对每条 lane 的 LP 输出加可调延迟实测校准。第二种方法更灵活但需要额外的校准流程。4.4 常见问题速查表现象可能原因排查方向屏完全无反应LP 序列没发出查 tx_start、PHY 使能屏偶尔不亮LP 状态时间不足查 TLPX 计数器余量花屏但能亮HS 数据问题查像素格式、时序参数显示正常但闪HS 退出不干净查 THS-EXIT、LP-11 建立多 lane 不同步LP 输出偏斜查管脚布局、加延迟校准波形有毛刺驱动切换冲突查 LP/HS 使能互斥、死区这张表可以贴在工位上遇到问题先对号入座能省不少时间。5. LP TX 与 C-PHY、DVP 等相邻技术的边界5.1 LP TX 在 C-PHY 里的对应物MIPI C-PHY 和 D-PHY 在物理层差异很大。C-PHY 用三根线trio传符号没有传统意义上的 Dp/Dn 差分对。但 C-PHY 同样有 LP 模式同样需要低功耗握手。C-PHY 的 LP 状态定义和 D-PHY 不完全一样它用三根线的电平组合表示不同状态。如果你从 D-PHY 转到 C-PHYLP TX 的状态机要重写不能直接复用。热词里出现的mipi c-phy s参数通常指的是 C-PHY 的通道参数配置和 LP 时序是两回事但调试时经常一起出现因为 C-PHY 的 LP 握手如果不对S 参数再好也没用。5.2 LP TX 和 DVP 接口的本质区别DVPDigital Video Port是并口摄像头接口它没有 LP/HS 的概念所有信号都是并行、持续时钟同步的。从 DVP 转到 MIPI最大的思维转变就是MIPI 是按需传输的总线平时在 LP-11 空闲有数据才进 HS。LP TX 就是管理这个按需过程的。热词里dvp摄像头和mipi经常一起出现因为很多方案要从 DVP 摄像头切到 MIPI 摄像头或者用 FPGA 做 DVP 到 MIPI 的桥接。桥接时 LP TX 的实现质量直接决定桥接是否稳定。5.3 和 LVDS 的对比为什么工业设备还在用 LVDSLVDS 是持续差分传输没有 LP 模式接口简单抗干扰好在工业设备里用了很多年。MIPI 的优势是速率高、线少、功耗低但复杂度高。热词里mipi和lvds和嵌入式工业设备放在一起反映的就是这个选型纠结。如果你的工业设备分辨率不高、线缆较长、环境干扰大LVDS 可能更省心。如果追求高分辨率、窄边框、低功耗MIPI 是趋势但要做好 LP TX 这类底层细节的调试准备。6. 把 LP TX 做稳的几个工程习惯6.1 先低速验证再升频这是我个人最推荐的习惯。LP TX 的状态机在低速时钟下先跑通用逻辑分析仪确认序列完全正确再逐步升到目标频率。低速下时序宽松容易定位问题升频后如果出问题至少知道状态机逻辑是对的只需调时序余量。6.2 给每个 LP 状态留可观测点在 FPGA 代码里把 LP 状态机的当前状态输出到调试管脚或者在线逻辑分析仪。这样一旦出问题能直接看到状态机卡在哪一步不用猜。很多项目为了省管脚不做这个结果调试时抓瞎反而更费时间。6.3 时序参数留余量不要卡最小值前面反复强调过这里再强调一次。TLPX 协议最小 50ns你按 100ns 设计TCLK-POST 最小 60ns你按 120ns 设计。多出来的时间对性能几乎没有影响但能大幅提升稳定性。工业设备尤其如此温度范围宽、长期运行余量就是可靠性。6.4 多 lane 场景做偏斜校准如果项目用多条数据 lane建议在 LP 输出上加可调延迟产线或上电时做一次校准。校准方法可以很简单让所有 lane 同时发 LP-01用逻辑分析仪测偏斜然后调整延迟值。这个流程做一次后面批量生产就省心了。6.5 保留一份已知良好的波形调试成功后把 LP 序列的波形存下来作为参考。后面如果换屏、换板、改代码出问题时先和这份波形对比能快速判断是 LP 的问题还是别的问题。这个习惯看起来笨但实际非常有效。LP TX 这个东西说大不大说小不小。它不决定图像质量但决定链路能不能建立。把它的状态机、时序、约束、调试方法吃透MIPI 屏调试里一大半玄学问题都会变成有明确方向的工程问题。我在实际项目里的体会是凡是 LP 做得扎实的方案后面 HS 调试通常也顺凡是 LP 凑合的方案后面总会在某个意想不到的地方卡住。这个投入值得。
02
RELATED NEWS

相关资讯

更多网站建设与数字化升级内容

03
WHY YAOTU

想打造同款高转化官网?

懂行业、懂生意,从建站到增长一站式陪跑

◈

场景化定制

不做模板站,围绕你的业务场景量身设计,小众不撞款。

◐

营销型架构

以转化目标组织内容与路径,让官网真正带来询盘。

▲

全周期服务

设计、开发、运营、运维一体,上线只是开始。

免费获取你的建站方案

留下需求,专属顾问 24 小时内为你输出方案建议。