ARTICLE DETAIL

资讯详情

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

LVDS接口详解:原理、电气参数、PCB布线与调试实战

LVDS接口详解:原理、电气参数、PCB布线与调试实战 做硬件这些年我一直觉得高速数字逻辑电平是最容易被低估的一环。电平标准选对了信号完整性问题少一大半选错了调试的时候能让人怀疑人生。LVDS这个老朋友我在FPGA驱动LVDS屏、ARM点RGB转LVDS屏、还有几块高速ADC采集板卡上都跟它打过交道这次正好借一个项目做完整梳理把原理、电气参数、PCB布线到实际调屏踩坑的细节一起聊透希望对你也有用。这篇内容适合正在做FPGA、嵌入式Linux点屏、视频接口转接或者单纯想搞懂LVDS是什么的硬件和软件工程师。你不需要很深的射频功底但需要一点数字电路常识我会把关键参数和实操细节拆开讲争取你看完能直接上手。1. 为什么需要LVDS被带宽和功耗逼出来的差分方案1.1 单端电平在高速时代遇到的麻烦早期的数字电路基本都是单端电平比如TTL、LVCMOS一个信号一个线地作为公共回流路径简单直接。但在速率上去之后问题接踵而至。信号翻转时电流在电感和地回路里产生地弹ground bounce接收端看到的地和发送端的地不是同一个地噪声就进来了。串扰也是个麻烦单端信号的边沿越陡串扰越严重因为耦合路径多而且没有一个干净的回流参考面。功耗方面满摆幅的3.3V或2.5V信号每次翻转都要对负载电容充放电频率高了以后动态功耗不可小视。你可能要说那就把摆幅降低比如1.8V LVCMOS这样功耗能降下来。但摆幅降了以后噪声容限也跟着降单端信号的抗干扰能力更弱传输距离也很有限。于是业内开始转向差分信号——一根信号用两根线来传接收端比较的是两根线之间的电压差而不是对地电压。这个转变很关键因为它从原理上改善了很多信号完整性问题。1.2 LVDS在电平家族里的定位谈LVDS之前不妨看看它身边的同类。CMLCurrent Mode Logic摆幅更小速度更高但功耗也高而且端接要求严格PECL/LVPECL在高速时钟分配里很常见但需要特殊的端接拓扑往往要处理开路发射极用起来麻烦HSTL则常用于DDR内存接口。LVDS能成为中高速接口的主流靠的是几个综合优势低摆幅约350mV差分、低功耗、天然的抗共模干扰能力以及简单的端接结构。我用一个生活化的比喻来解释差分信号的优势单端信号就像两个人隔着很远的距离喊话周围环境噪音一大基本就听不清了差分信号则是两个人站得很近一个说原话一个说反话接收端只听“两人声音的差别”周围环境如果同时影响两个人这种共模噪声会在差分相减时被抵消。LVDS正是基于这个思路但把摆幅压得很低速度能拉得很高功耗却很低所以特别适合在板级和短距离电缆上做高速传输。2. LVDS电气特性拆解参数才是协议的灵魂2.1 必须盯住的四个核心参数官方规范ANSI/TIA/EIA-644里定义的关键参数我每次画LVDS电路都会重新对照一遍这里按优先级列出来。差分输出电压VOD指接收端100Ω端接电阻上测到的电压差典型值为250mV到450mV。VOD大小决定信号质量太低抗噪能力差太高则会增加功耗和EMI。驱动端的3.5mA电流源流过100Ω端接电阻后理论上产生的压差就是350mV左右这是LVDS的“黄金数值”也是我调板时最关注的实测点。输出共模电压VOS指的是两根差分线上电压的平均值典型范围是1.125V到1.375V通常设计在1.2V左右。共模电压决定了发送端和接收端之间是否需要电平匹配如果两端共模不一致就需要用交流耦合隔离然后再在接收端重建共模。输入阈值接收端的差分输入阈值典型为±100mV也就是说只要接收端检测到差分电压超过100mV就判为逻辑1低于-100mV就判为逻辑0。这给了系统大约250mV的噪声容限余量不算大但配合差分结构足够稳定。传输速率标准LVDS本身可以支持很高的速率但我们日常说的LVDS接口往往指并行LVDS比如FPGA与LCD屏之间的7:1并行传输单通道速率经常在100Mbps到1Gbps区间。如果你要用SerDes方式速率可以更高但那已经涉及协议层了。还有几个容易忽略的细节。AC耦合时需要在接收端加一个偏置电路把共模拉回合适电平否则接收端可能工作不到最佳区间LVDS的驱动器设计成电流源形式所以它的输出阻抗不需要太纠结端接主要靠接收端的100Ω电阻。2.2 驱动器与接收器的内部结构LVDS驱动器本质上是一个恒流源加四个开关管。中间有一个3.5mA左右的恒流源根据输入逻辑控制电流流向哪一条差分线接收端是一个高输入阻抗的差分放大器并且需要外部或集成一个100Ω的终端电阻跨接在差分对上。这里有个常见误区很多人以为LVDS端接电阻只是用来匹配阻抗实际上它还承担着把电流信号“变成”电压信号的任务。没有这100Ω电阻3.5mA电流就无法产生可识别的压差接收器几乎什么都测不到。所以我画原理图的时候首要检查的就是这个电阻有没有放、放得对不对。2.3 LVDS-25、LVDS-18这些变体怎么理解FPGA厂商的数据手册里经常出现LVDS-25、LVDS-18、LVDS-12这些不是新协议而是指该LVDS I/O所用的I/O电源电压。比如Xilinx 7系列和Intel Cyclone系列往往支持LVDS-25和LVDS-18分别表示IO bank供电为2.5V和1.8V。不同bank电压会限制接口电平连接外部LVDS器件时要确认对方工作电压是否匹配否则需要电平转换或交流耦合设计。严格来说LVDS标准本身就是低摆幅对I/O电源的依赖没有LVTTL那么直接但FPGA的输入输出缓冲器和ESD结构会受bank电压影响所以在引脚规划时需要把这个变体参数定对否则在开发环境里连约束都过不了。3. LVDS链路设计实操从原理图到PCB3.1 端接电阻位置和阻值的取舍LVDS端接电阻的经验值就是100Ω容差尽量用1%。它必须靠近接收端放置越近越好。接在发送端没有意义因为发送端看出去的阻抗匹配和接收端的反射防护不是一回事如果你在两端都放端接等效阻抗变成50Ω驱动电流和电压的关系会被破坏信号幅度直接不对。我在设计FPC连接器方案的LVDS输出时遇到过因为端接电阻放得太远导致眼图闭合的案例。接收端芯片在朝主板方向时如果电阻放在FPC连接器之后走线到芯片pin之间还有一段很长的stub反射信号叠加到主信号上就会产生振铃。后来把电阻移到接收芯片附近眼图立刻改善。这块最好原理图阶段就考虑位置不要等PCB回来再改。3.2 差分走线阻抗、间距、等长PCB差分信号设计的核心是让差分对保持一个稳定的电场耦合。一般要求差分阻抗为100Ω±10%。这个阻抗不是随便画两根线就能出来的它取决于线宽、线间距、参考层距离以及板材介电常数。常规做法是四层板或更多层板给差分信号一个紧邻的完整参考地平面。走线时注意几点。第一差分对内两条线的间距尽量恒定不要因为绕线改变太大第二对外间距要拉开减少与其他信号的串扰第三尽量避免使用过孔非要用过孔时两条线必须成对过孔且过孔周边加地孔回流。等长方面对内等长是基本要求通常按照飞行时间来算PCB工具里可以设置延迟差值约束对于几百Mbps的LVDS5到10mil的偏差都问题不大但在高速串行LVDS或长链路时就要更严。3.3 常见接口形态RGB转LVDS、MIPI转LVDS与FPGA LVDS引脚硬件里最常遇到的几个LVDS应用场景我这几年都跑过每个都值得单独说。RGB转LVDS典型场景是主控端只有RGB并口输出但屏幕只有LVDS接口这时会有一颗转换芯片比如DS90C385、SN75LVDS83、LCDS602之类的。主控送来的RGB888、像素时钟、DE和同步信号进入芯片后按一定规则打包成4对数据通道和1对时钟通道发送给屏。好处是大幅减少了线数而且差分传输能支撑较长距离。时序上要注意像素时钟范围和DE极性很多转接芯片不支持过低的像素时钟比如低于25MHz时内部锁相环容易失锁。MIPI转LVDS则常出现在现代应用处理器上因为很多SoC默认只有MIPI DSI输出而工业屏或车规屏还是LVDS接口这时候用一颗MIPI转LVDS桥接芯片比如LT8912B、TC358775、RK的某些方案等。这种链路里MIPI侧的通道数比如4 lane和LVDS侧的映射关系要配置正确通常还需要通过I2C或寄存器配置屏参。Linux内核里往往是一组设备树属性规格不匹配就会无图或者花屏。FPGA引脚做LVDS时需要看FPGA型号的I/O能力。以Xilinx 7系列为例使用LVDS或LVDS-25时需要在XDC里对差分引脚组加上正确约束并且确认I/O bank电压。Verilog里例化原语时发送端常用OBUFDS接收端用IBUFDS。如果引脚约束没有配对综合器会报错或生成错误的结构。我曾经把差分P端和N端在XDC里写反结果示波器看到波形正常但丢数排查半天才发现是软件约束里P/N反了所以这类问题不仅要检查和硬件也要检查约束文件。4. 实战案例FPGA与RK3566点LVDS屏的全程记录4.1 FPGA侧LVDS输出的标准例化和约束FPGA驱动LVDS屏幕时最常做的就是把并行RGB数据和像素时钟转成LVDS差分信号。如果直接用OBUFDS把每个引脚单独转差分那每个BIT都是一对线线束还是很粗真正的屏幕驱动通常需要内部逻辑把RGB数据串行化。有些FPGA内部自带OSERDES这类串行器一个数据通道通过7:1或8:1的串行比把RGB三通道加上控制位都串起来。比如经典做法是每个LVDS通道承载7个位4个通道一组就是28个bit恰好对应24bit RGB加上4个控制位。时钟通道输出的是像素时钟的7倍频或与内部位时钟同步的时钟。我在实际项目里LVDS屏典型配置是像素时钟65MHz左右位时钟就要跑到455MHz在FPGA里用PLL生成位时钟检查时序收敛是重点。XDC约束里至少要写清差分引脚对、电平标准、IO bank电压并且给PLL加上可靠的复位逻辑。我遇到过PLL锁定指示没接上电后偶发初始化失败屏有时亮有时不亮的情况后来把LOCK信号和系统复位管理器联动问题就消失了。这种“偶发”问题最折磨人本质确实是时序初始化顺序没处理好。4.2 RK3566点LVDS屏设备树里那些要命的细节RK3566这类SoC在方案上经常用来点MIPI或LVDS屏。直接用LVDS屏时很多设计是从MIPI DSI桥接过去的也有原生LVDS接口的型号。以桥接方式为例设备树里要配置桥接芯片的地址、使能脚、背光控制、屏幕时序和LVDS映射顺序。设备树里大体上会有一段像这样的配置注意不同内核版本和桥接芯片型号会有差异需要查对应手册mipi_dsi { status okay; bridge0 { compatible ...; reg 0x0; enable-gpios gpio4 28 GPIO_ACTIVE_HIGH; backlight backlight; ports { #address-cells 1; #size-cells 0; }; }; };真正需要花时间的是部分的DPHY参数。MIPI转LVDS桥接芯片的输入lane数、lane速率、分辨率、刷新率都必须匹配。比如说一块1280x800的LVDS屏像素时钟是71MHz左右如果MIPI链路只配了2 lanelane速率就必须足够高否则带宽不够会花屏或闪烁。我调试时习惯先把MIPI侧简化成最低配置从单lane逐步增加确认链路速率没瓶颈之后再打开全部通道。4.3 屏参与时序不匹配的典型现象点屏最让人头疼的问题之一就是“能亮但不对”——背光亮了但画面偏移、雪花点、上下颠倒、颜色错乱。这类问题很多不是硬件坏而是LVDS映射格式错。LVDS存在两种常见映射JEIDA格式和VESA格式两者在RGB三色在高位还是低位的排列上不一样。同一块屏桥接芯片的映射寄存器配错颜色就会错乱或画面细节丢失。还有同步极性反了会直接导致画面左右滚或者上下跳。遇到这种情况我通常是这么排查先确认屏规格书里标注的格式是JEIDA还是VESA再去看桥接芯片寄存器默认值最后通过抓取LINK相关信号辅助判断。最好在板子上预留一个I2C调试接口这样能在系统起来后直接修改寄存器比反复编译内核高效太多。5. LVDS调试的常见坑与排查思路5.1 差分极性接反、无图无时钟的花式表现LVDS差分对极性接反是新手最容易犯的错误但表现并不单一。有的屏是完全没有画面有的屏是花屏还有的是画面正常但偶尔闪一下更隐蔽的问题。因为不同屏幕的接收端对数据lane和时钟lane极性处理策略不同有些屏自带极性纠正功能有的则没有。排查时最直接的办法是用示波器看差分对。把探头设为差分模式测量P-N电压差。正常的LVDS时钟通道应该是稳定的方波数据通道在显示有效区域时会有跳变在行消隐期间相对安静。如果看到波形存在但逻辑反了就把PCB上下两个网络对调或者用软件改约束方法重写映射。还有个经验是如果屏花得很均匀、没有任何可辨识图像大概率是数据lane和时钟lane映射错位如果画面清晰但颜色不对优先查格式映射如果画面稳定但会跑偏多半是同步信号极性或时序前肩后肩参数不对。这样分门别类能省不少时间。5.2 端接电阻、回流地、共模和电源噪声LVDS信号频率高但它对电源噪声的敏感度远超很多人预期。经验不足时我只盯着信号线忽略了为LVDS驱动器和接收器供电的LDO纹波。有一块板子在背光开启时LVDS信号上叠加了大约80mV的周期性噪声导致液晶屏出现细密横纹。后来把背光电源和LVDS供电完全分开横纹消失。回流地的问题更隐蔽。LVDS走线如果跨越了地平面分割回流电流必须绕路差模信号虽然不像单端信号那么依赖回流地但一旦回流被破坏共模转换CM-to-DM就会增大表现为EMI飙升或者接收端误码。这一点在混合信号板卡上特别容易出现因为模拟地和数字地常被分割LVDS若正好跨在分割处就很容易踩雷。5.3 实测工具和判断技巧LVDS的信号幅度小、速度快普通探头直接测看到的是叠加了很大共模的波形可能采样都不准。有条件就用真正的差分探头带宽至少1GHz没有差分探头时可以同时用两路单端探头做数学减法但这种做法在高频下相位差很难匹配只能作为定性参考。调试时我习惯先测时钟通道因为时钟永远都在跳容易判断链路通不通。再测一条数据通道把逻辑分析仪接到LVDS接收端之后的并行总线比较解码出的数据与预期。如果并行总线和寄存器配置都对屏幕还不对基本就把范围限定在屏端模块或线缆连接器上了。6. 关于LVDS的一些经验谈说了这么多最后按我自己的习惯分享几个实用层面的感触。第一LVDS是物理层标准它本身不规定数据格式所以“同样的LVDS电平”不代表“同样的屏接口定义”必须看屏规格书的pin定义和映射表格这一个细节可以避免一大半的无效调试。第二做PCB时别舍不得那几个地孔差分对换层处的地孔能让信号质量上一个台阶而端接电阻的位置再强调一次永远放在接收端。第三系统调试时不要一头扎进软件寄存器里先拿示波器确认波形、摆幅、共模是否在范围内这一步能快速区分是硬件链路问题还是逻辑配置问题。LVDS这套东西入门时看两页参数表并不难难的是在真实项目里把每一个细节落实到位。你现在手上如果有LVDS相关的板子或屏不妨先去看看原理图和PCB走线把端接电阻、极性、屏参手册这三样核对一遍很多看似玄学的画面问题会瞬间清晰起来。
返回列表