ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

LVDS接口从原理到时序配置:差分信号、映射与点屏调试实战

LVDS接口从原理到时序配置:差分信号、映射与点屏调试实战 做嵌入式和显示驱动这些年LVDS接口是我绕不开、也最怕翻车的接口之一。别看它只有那么几对差分线点屏时候的坑能从硬件布线一路埋到Linux内核的DeviceTree里去。所谓LVDS全称Low Voltage Differential Signaling低电压差分信号是一种高速低功耗的差分接口标准在LCD显示领域它把并行RGB的几十根线压缩成4对数据线加1对时钟线同时把像素时钟、有效数据、同步信号全部串行化送出去。这篇就围绕LVDS接口本身的定义、差分参数和完整时序展开把我踩过的坑、验证过的方法、能直接参考的配置都写出来给正在调屏的朋友一个实用参考。不管你是刚开始接触屏幕接口的新手还是被花屏折磨到怀疑人生的老工程师这篇内容都适合。我会尽量把原理讲透同时给出可以直接落地的参数和排查思路。文章不堆术语也不搞那种看起来很高端但读完全没印象的写法所有知识点都是以实际点屏和量产维护为目标来展开的。1. 先搞清楚LVDS到底是什么1.1 低电压差分信号的核心原理LVDS不止是屏接口它本身是一套电气标准。核心思路很简单发送端用一颗约3.5mA的恒流源去驱动一对差分线接收端在一个100Ω的终端电阻上取样于是在电阻两端产生大约350mV的差分电压。一对线里面一根走高、一根走低逻辑1和0靠两根线之间极性的翻转来判断而不是靠哪根线对地的绝对电压。这样做最大的好处是抗干扰能力强。外部噪声通常是共模性质的会同时叠加在两根线上接收端做差之后共模噪声天然被抵消掉。同时由于信号摆幅只有几百毫伏翻转时间短、功耗也低比传统TTL电平接口的功耗表现好太多了。在显示应用里LVDS链路的单通道速率动辄几百Mbps高分辨率下可以达到1Gbps级别这个速率放在并行TTL接口上是很难稳定实现的。再补一个容易被人忽略的点LVDS的接收端不一定需要外部供电很多接收器直接靠差分线上的共模偏置就能工作。当然绝大多数屏的TCON芯片还是有自己的电源系统这个不影响逻辑但理解这一点能帮你排查问题时少走弯路。简单说LVDS是一套小摆幅、差分、电流驱动的高速传输方案它把并行RGB的速率和噪声问题一起解决了。1.2 为什么现在的显示接口都爱用它回想一下老式的TTL RGB屏接口RGB888最少也需要24根数据线加上像素时钟、HSync、VSync、DE轻轻松松三十几根线。这样的排线在PCB上占地方不说高速翻转时串扰和EMI还很头疼。LVDS接口把并行信号转换成串行差分对之后单路只需要4对数据线加1对时钟线一共10根线就搞定了。线少带来的连锁好处很多连接器可以从几十pin缩小到小尺寸FFC/FPC走线面积大幅缩小产品结构更紧凑差分信号本身抗共模干扰板间连接和屏端排线能走更长距离且更稳定小摆幅意味着低功耗和低EMI对平板、一体机、车载这些对功耗和辐射敏感的场合特别友好。还有一点是生态决定的。现在很多SoC主控不直接输出TTL RGB而是输出MIPI DSI或者只有LVDS控制器但市面上大量车机屏、工控屏、安防屏依然是LVDS接口所以RGB转LVDSMIPI转LVDS这些桥接方案就在产品里非常常见。LVDS作为屏端的物理层标准往上承接各种源端往下对接Panel一直没有被淘汰。理解它对做硬件、驱动、FPGA的工程师都是刚需。2. LVDS接口硬件设计定义、参数与布线2.1 接口信号定义数据通道、时钟通道与双链路LVDS屏接口按通道数分成单路和双路两类。单路Single Link是最常见的形态由1对时钟线加4对数据线组成数据线一般命名为Tx0P/Tx0N、Tx1P/Tx1N直到Tx3P/Tx3N屏侧则对应叫Rx0P/Rx0N、Rx1P/Rx1N这些。每个像素时钟周期内每个数据通道串行发送7bit数据4个通道一共28bit正好覆盖RGB888的24bit数据外加3个同步信号剩余的1bit作保留。双路Dual Link则把带宽翻倍使用2对时钟线加8对数据线。图像被分成左右两半分别送入两条链路传输或者按像素交替分配具体看TCON的实现。双路主要用在2560×1440、3840×2160这种高分屏上单路4通道的带宽已经不够用了。有一个很容易搞混的概念LVDS说的4通道指的是4对数据线不是4bit。每个通道每个时钟周期传7bit所以单路8bit模式的位宽是28bit而不是4bit。每次遇到有人问LVDS不才4根数据线吗我都会强调这个7:1的串行化概念。屏规格书里所谓的4Lane LVDS指的就是4对数据线。为了直观我把常见类型整理成一张表LVDS类型数据对时钟对有效并行位宽典型分辨率单路6bit3118bit数据3bit同步800×600单路8bit4124bit数据3bit同步1保留1920×1080双路8bit8248bit数据6bit同步2保留2560×1440、3840×2160接法上有不少板子支持同一链路内的lane交换也就是怎么接都能亮因为软件或者转接芯片里可以重新映射。但这不是必然的有些老式屏不支持必须严格按照规格书接线。所以我一般先看屏的规格书里有没有提到支持lane swap没有的话就老老实实按顺序接。2.2 差分线高值低值电压参数与100Ω匹配热词里专门有lvds的差分线高值和低值说明这个问题问的人特别多。LVDS接收端判断信号不是看单根线的绝对电平而是看两根线之间的差分电压也就是Vod的值。以常见的LVDS发送器为例输出电流源典型值是3.5mA接收端终端电阻100Ω那么差分电压Vod 3.5mA × 100Ω 350mV左右。共模电压Vcm两根线的平均值一般在1.2V上下规格书里通常给出1.125V到1.375V的范围。所以两根线的绝对电压大约在0.95V到1.55V之间摆动一根高、一根低。你用示波器差分探头去测看到的应该是大约350mV和-350mV之间翻转的差分波形如果用普通单端探头分别测P和N管脚看到的是一个约1.2V共模基础上叠加的几百毫伏信号没有差分探头读数那么直观。这里必须强调接收端靠近屏连接器的地方一定得有100Ω终端电阻。很多LVDS屏模组内部已经内置了这个电阻PCB上就不能再重复并联否则等效阻抗变成50Ω信号反射加剧反之如果屏没内置而你板上又漏画了那波形反射会让眼图闭合屏幕会出现雪花噪点、闪烁甚至完全无画面。我处理过一块自己贴PCBA的板子整批屏幕都像蒙了一层雪花后来发现就是layout时漏了终端电阻补上100Ω之后画面立刻干净了。2.3 PCB布线要点与连接器注意事项LVDS硬件布线就三条核心差分阻抗、等长、回流路径。差分阻抗LVDS差分线要按100Ω差分阻抗设计。具体线宽线距由板厂叠层决定四层板1.6mm板厚、表层走线时常见线宽4到5mil、线距5到6mil可以做到100Ω差分。务必让板厂做阻抗控制并在出货前测试不要用单端50Ω的习惯去套。等长同一对P/N内部要严格等长误差控制在±5mil以内同一链路的多对线之间总长度差控制在±100mil内。串行链路速率高skew会吃时序裕量等长是LVDS走线最不能妥协的一项。回流路径差分线尽量连续换层的时候旁边要有完整的地过孔不要跨分割区。跨分割会导致回流路径被撕裂共模噪声变大灵敏度就下来了。连接器方面屏端FFC/FPC排线要尽量短。排线越长差分阻抗越难保证尤其在折叠和弯折处线的间距和到参考层的距离都可能变化。注意不要在差分对正下方铺上大面积铜皮很多人习惯给敏感信号包地但对差分来说紧贴的铺地会增加寄生电容并拉低阻抗除非做过仿真否则不推荐。3. LVDS时序详解从RGB Timing到串行链路3.1 时序基础DE模式与Porch参数很多人问LVDS时序其实把两件事混在了一块一是屏的输入时序本质上是RGB Timing以像素时钟和行场空白为单位二是链路本身的串行时序也就是7:1映射和位序。两者要分开理解才能准确配置驱动。现在的LVDS屏基本都是DE模式工作DE高电平期间有效像素持续送入TFT行间和场间靠空白间隔定位。HSync和VSync虽然也存在但很多主控在DE模式下只关心DE的位置HS/VS极性影响不大。不过实际调试中有些面板对HS/VS极性很敏感严格按规格书配最稳妥。屏规格书会给这样一组参数HTotal、HActive、HBackPorch、HFrontPorch、HSyncWidth以及纵向对应的VTotal、VActive、VBackPorch、VFrontPorch、VSyncWidth。它们的关系是HTotal HActive HBackPorch HSyncWidth HFrontPorch VTotal VActive VBackPorch VSyncWidth VFrontPorch像素时钟 HTotal × VTotal × 刷新率。不要拿显示分辨率直接乘刷新率去算像素时钟那样算出来偏小面板TCON会因为缺乏足够空白时间而无法完成内部数据搬运、充电补偿这些操作结果就是屏幕能亮但画面抖动、滚动或者有一两条横带。3.2 7:1串行映射与时序关系LVDS的时钟对TCLK的频率等于像素时钟。每个TCLK周期里4对数据线上各发出7个bit接收端在时钟沿采集这些串行数据经过内部串转并重组出一个28bit的并行像素包。这就是LVDS在显示领域常说的7:1串行化。做一个生活类比并行RGB信号就像一条4车道公路每个像素时钟周期内4条车道各要跑7辆车总共运28个bit。等到高速接收端28辆车再按顺序重新排队还原成原来的RGB和同步信号。发送端内部有一颗PLL把像素时钟倍频7倍用来产生逐bit发送的高速时钟源。调试难点不在发送接收本身而在于这个打包的位序规则。发送端和屏端TCON必须事先约定好哪个bit放在哪个位置这就是下面要讲的映射问题。如果两边约定不一致画面立刻给你脸色看。3.3 VESA vs JEIDA最容易翻车的映射问题这是LVDS点屏里最典型的坑没有之一。LVDS链路上统一传输28bit数据包但打包的位序有两大阵营VESA映射和JEIDA映射。简单说同一个像素的R/G/B颜色位在一组通道里的排列顺序不同。如果发送端按VESA发送屏端TCON却按JEIDA解包接收端拿到的颜色位就全错位了表现形式通常是严重偏色、像负片一样有时候还会带着强烈的雪花感。这种情况不是时序参数问题改Porch改像素时钟都没用必须把映射模式改对。关键点有三个主控侧LVDS控制器的输出格式、转接芯片RGB转LVDS或MIPI转LVDS的映射选择、屏模组侧TCON的映射模式三者必须保持一致。很多LVDS转接芯片提供专门的映射选择引脚、寄存器位或I2C配置。比如THC63LVDM83D可以用引脚电平切换瑞芯微平台在DeviceTree里配置lvds-format属性写成vesa-24bpp或者jeida-24bpp。我的经验是点屏之前先翻屏规格书里的Mapping图或者直接问屏厂要映射表。国产屏大多默认VESA但日系老屏很多用JEIDA混用案例太多了。特别是从老平台移植驱动的时候旧代码里可能写死了一种映射换屏后必须重新确认。3.4 实测参数计算以1080p60为例来一个实际算例目标模式1920×108060Hz。以一块常见LVDS屏的datasheet时序为例HActive1920HBackPorch148HSyncWidth44HFrontPorch88则HTotal192014844882200。 VActive1080VBackPorch36VSyncWidth5VFrontPorch4则VTotal108036541125。像素时钟DCLK 2200 × 1125 × 60 148.5MHz。对应到LVDS链路上时钟对频率等于像素时钟也就是148.5MHz每个数据lane按7:1串行化单lane数据速率 148.5MHz × 7 1039.5Mbps约等于1Gbps。这个速率下如果PCB等长和阻抗不过关眼图会明显劣化花屏、闪烁就来了。如果做RGB6666bit色深的单路链路数据通道减到3对那么并行位宽是18bit数据加3bit同步共21bit。不要拿24bit的映射去套6bit屏很多6bit面板虽然能接收4通道信号但第4个通道的数据会被忽略或要求接成特定电平必须按屏规格书来做。明白了参数计算再去核对Linux驱动或者FPGA代码里的配置基本一眼就能看出错在哪。4. 方案实操RGB转LVDS、FPGA接收与Linux适配4.1 3路RGB转LVDS的芯片选型与配置老一代方案里MCU或者SoC输出TTL RGB888就用LVDS发送器转成差分对。代表芯片有TI的DS90C385/DS90C383、东芝的THC63LVDM83D、NI的SN75LVDS83。这些芯片输入侧就是28bit并行RGB加时钟和同步信号输出侧就是4对数据加1对时钟。配置时重点看三件事映射选择DS90C385这类芯片通过SEL引脚电平选择VESA还是JEIDA必须和屏端一致。PLL倍频范围发送器内部PLL把输入像素时钟倍频7倍所以对输入时钟频率范围有限制。有些芯片在像素时钟低于20MHz时失锁低分辨率屏要注意。输入数据格式RGB的位宽、顺序、DE极性和数据对齐关系都要和芯片资料一致。主控那边如果GPIO复用功能配错了也会导致数据显示异常。我遇到过这样一个案子原方案用THC63LVDF84B点1024×768没有问题换了新主控之后偶尔黑屏1到2秒现象像是信号闪断。排查了很久最后发现新主控的像素时钟抖动偏大LVDS发送端PLL偶发失锁。后来在主控时钟输出上加了一颗RC滤波并把TCON配置成兼容扩频时钟的模式问题才解决。所以RGB转LVDS的坑不全在芯片本身源端时钟质量也一样关键。4.2 FPGA接收LVDS差分引脚与解串逻辑FPGA作为主控时经常要直接接收LVDS视频流。以Xilinx 7系列为例接收路径可以分为三步先用IBUFDS原生差分缓冲器把LVDS差分信号转成单端然后用ISERDESE2做7:1的串并转换最后把并行数据按VESA或JEIDA映射重新拼成RGB和同步信号。核心代码思路如下这段是示意代码实际工程要根据你的FPGA型号和时钟约束补全// 差分时钟对输入 IBUFDS #( .DIFF_TERM(TRUE), .IOSTANDARD(LVDS_25) ) ibuf_clk ( .O (clk_pixel), .I (lvds_clk_p), .IB(lvds_clk_n) ); // 数据lane解串ISERDESE2 7:1MasterSlave级联 ISERDESE2 #( .DATA_RATE(DDR), .DATA_WIDTH(7), ... ) iserdes_lane0 ( .Q1(q0_bit6), .Q2(q0_bit5), .Q3(q0_bit4), .Q4(q0_bit3), .Q5(q0_bit2), .Q6(q0_bit1), .Q7(q0_bit0), .Q8(), .D(lvds_data0_p), .DDB(lvds_data0_n), .CLK(clk_7x), .CLKB(~clk_7x), .CLKDIV(clk_pixel), ... );这里特别提醒7:1的ISERDES必须做Master和Slave级联因为7不是DDR模式下的偶数位宽只用一个ISERDESE2拉不出来完整的7bit。数据宽度设7用DDR模式才能在同一个像素时钟周期里采到7个bit。1080p60场景下像素时钟148.5MHz解串后的bit速率是148.5M×71.04Gbps这个速率已经超过普通单端IO的能力必须用HP bank的LVDS差分输入引脚。数据到了并行域之后还要按映射把q[6:0]这些bit重新排列输出成RGB24。这一步写错画面就会花屏或者颜色错乱。我建议先在FPGA内部做test pattern比如输出纯红、纯绿、纯蓝、纯白这样能快速判断问题出在通道错位还是映射错位。4.3 Linux BSP适配要点DeviceTree里的时序与映射嵌入式Linux下点LVDS屏RK、全志、NXP各有各的框架但共同点是最终都要落到DeviceTree配置上。以瑞芯微RK3566直连LVDS为例panel-timings节点要填时序参数panel-timings { clock-frequency 148500000; hactive 1920; vactive 1080; hback-porch 148; hfront-porch 88; hsync-len 44; vback-porch 36; vfront-porch 4; vsync-len 5; de-active 1; hs-active 0; vs-active 0; pixelclk-active 0; };LVDS控制器节点通常还要配成这样lvds { status okay; pinctrl-names default; pinctrl-0 lvds_pins; lvds-format vesa-24bpp; rockchip,output rgb; rockchip,output-mode lvds; };如果你的平台是MIPI转LVDS方式那就走DSI panel驱动需要单独给桥芯片配置初始化序列和lane速率此时panel-timings里的clock-frequency必须与桥芯片期望的DSI链路时钟匹配。这个环节最常见的问题是拿到一份普通RGB屏的时序直接套到LVDS屏上HTotal/VTotal对不上出现启动后画面错位或者右侧多出一条彩带。务必以LVDS屏规格书里的H/V Timings为准不要想当然沿用上一块屏的配置。新旧屏参数混在一起是最耗时间的排查陷阱之一。4.4 点亮屏的调试流程按经验给一套标准流程照着走能省很多冤枉时间确认面板各级供电VDD、AVDD、背光LED的电压和电流先量一遍确保背光能亮。背光亮不一定代表屏工作正常但背光都不亮逻辑信号再对也没用。确认上电序列按规格书要求先供电延迟后复位拉高再送时钟和数据。很多屏对上电时序有严格窗口违反它会导致TCON没起来。上纯色测试图先发纯红、纯绿、纯蓝。这步能快速验证颜色通道和映射是否正常。如果纯白块变成了青色说明R通道有问题以此类推可以把三个颜色通道逐一验证。用示波器测TCLK频率确认像素时钟等于HTotal乘以VTotal乘以刷新率。软件里配置错误会直接在这里体现。逐项试极性和映射先只改DE极性看花屏有没有变化再依次试HS/VS极性最后试VESA/JEIDA映射和lane顺序。我的经验是先查lane映射再查VESA/JEIDA最后才去纠结Porch细节这个顺序成功率最高。5. 常见问题与排查技巧实录5.1 黑屏/白屏/花屏的排查顺序现象不同排查重点也不同黑屏但是有背光先量Panel各级供电再确认DE是否有效再查像素时钟是否送到TCON最后查发送端配置。曾经遇到一种黑屏是驱动把输出数据全部配成了0画面全黑但所有信号都正常这种情况不看配置根本想不到。白屏大概率LVDS链路没收到有效数据TCON把所有像素刷新成最高灰度。优先检查时钟对和数据对有没有接反、有没有虚焊。花屏但颜色大致正确多为Porch或像素时钟不对也可能是数据lane顺序错位。花屏且颜色严重错乱优先检查映射和通道交换这基本是VESA/JEIDA或者lane swap的问题。满屏噪点、雪花优先查终端电阻和信号质量往往和布线、连接器接触有关。我的建议是看到花屏先别急着改软件拿示波器看发送端波形确实存在、幅值正常之后再回来看软件配置。很多所谓软件bug最后都是排线接触不良或者焊点虚焊。5.2 映射错误与颜色异常映射错误的表现很有辨识度。如果是R/G/B三个通道整体交换屏幕会出现纯色交换红色区域变绿绿色区域变蓝这种逻辑错误。如果是VESA/JEIDA错位画面看起来是偏色加扫描线感的混合症状因为每个通道的位在错误的位置被重组了。排查映射错误用纯色测试图最高效。纯白是最佳测试图因为白色要求RGB255如果输出结果不是一整块白就说明某个通道缺失或者映射错位。然后依次输出纯红、纯绿、纯蓝比如红色输出变成了青色说明红色通道没有被正确还原。通过这些测试你能从颜色关系反推出通道和映射错在哪。有些转接芯片支持在线切换映射利用这一点可以很快做A/B对比硬件上把VESA改成JEIDA看画面对应的颜色是否恢复。改完瞬间如果颜色明显变化说明问题就在映射。5.3 高速信号质量问题LVDS虽然抗共模干扰能力强但信号质量出问题的表现很隐蔽不像普通的逻辑错误那么明显。常见症状是亮暗条纹、拖影、偶发横线甚至高温老化测试后才开始花屏。这类问题通常不是逻辑配置而是物理层。常见原因按概率排序终端电阻缺失或者错误。等长差异过大。连接器接触不良、FFC排线在机箱内折叠半径太小。电源纹波过大导致TCON重建时钟的抖动变大。有条件的话把差分探头夹在接收端看实测眼图。以1Gbps链路为例眼睛张开高度大于250mV、宽度大于0.5UI基本可以判定合格如果只有200mV甚至更低就需要调整走线或者考虑加重定时方案。这里提醒一句普通200MHz示波器看1Gbps信号只能看个大概别说眼图连真实波形都会失真有条件还是上高频示波器。5.4 排查工具与方法最后把调试装备和方法整理一下都是我觉得真正有用的示波器建议500MHz以上带宽带宽不够测不了1Gbps眼图。示波器至少能确认时钟有没有、频率对不对。差分探头必须。普通鳄鱼夹探头直接测差分信号测出来的波形完全没参考价值。没有差分探头时可以用两个同轴通道做A-B数学运算但相位匹配要仔细。逻辑分析仪加LVDS解码板在FPGA点屏场景特别有用直接在FPGA内部用ILA观察解串后的并行数据可以复盘每个lane的bit串是否和预期一致。频率计或者计数器快速验证像素时钟和高频时钟比示波器读频率更准。还有一个我吃亏后才总结出来的习惯凡是换过LVDS屏型号的板子先别急着改DeviceTree把旧屏的信息全部清干净从规格书一栏一栏重新填。很多折腾一整天的疑难杂症最后发现是旧屏的映射和Porch残留在配置里被新屏的配置混着用怎么改都感觉不对劲。从空配置开始反而最快。
返回列表