1. 一个常见需求RK3568工控板怎么点亮存量LVDS屏上个月帮客户调一块RK3568工控主板屏幕是老款10.1寸LVDS屏接口还是双八的。板子画出去了屏幕也定了结果一查手册才发现RK3568原生根本不出LVDS信号。最后只能走MIPI DSI挂一颗GM8775C转LVDS桥接芯片。这颗芯片在RK3568LVDS这个组合里出镜率实在太高了我见过的几款RK3568开发板只要带LVDS接口基本都是GM8775C或者同方案的桥接芯片。先说结论GM8775C是一颗国产MIPI DSI转LVDS桥接芯片专门解决“主控只有MIPI DSI输出但显示面板是LVDS接口”的问题。RK3568主控在工控、车载、自助终端、机器人领域很常见这类设备往往要兼容工业现场存量的LVDS屏——不是不想换新屏是结构件开模费、线束、老化测试都压在那里屏不能随便换。这篇文章把选型对比、硬件设计注意点、设备树配置和调试排障顺序完整写出来给同样要跑RK3568LVDS方案的朋友做个参考。1.1 工控现场的真实情况LVDS屏为什么还没被淘汰LVDS是低压差分信号早期在笔记本、工控机、医疗设备里大量铺开。它的优势很明确差分走线抗干扰能力强、线缆可以做得比较长、接口标准化程度高30pin或20pin的座子在市面上非常成熟。工业设备换屏的成本比消费电子高得多。一块LVDS屏已经过了高低温、振动、老化验证不是因为主控不支持LVDS就要全盘推翻。更现实的是很多项目的屏是甲方指定的面板型号和连接器位置都固定了选型时只能在主控侧想办法。所以RK3568这种新主控要去适配老屏MIPI转LVDS就是一个绕不开的桥。1.2 RK3568显示接口清单里为什么偏偏没有原生LVDSRK3568的显示输出接口包括HDMI/eDP/MIPI DSI/RGB并行接口不同封装和型号略有差异。但你去翻芯片手册很难找到原生LVDS PHY的选项。RK3566和RK3568的情况类似都依赖外接桥接芯片来兼容LVDS。很多人第一次做这个方案时会问“既然要转为什么不直接从RGB接口转LVDS”答案是如果屏的分辨率不高、颜色深度要求不高确实有RGB转LVDS的专用芯片成本也不高。但RK3568上很多项目需要走MIPI DSI一是因为DSI lane数可以灵活配置二是因为SoC内部从VOP到DSI controller的数据通路更成熟标准DRM框架支持度好。所以主流方案就成了DSI转LVDSGM8775C就是这个链路里的核心芯片。1.3 桥接芯片的本质给两种协议做“翻译”MIPI DSI和LVDS虽然都是差分信号但协议完全不同。MIPI DSI是包结构有LP/HS状态切换有command mode和video mode之分LVDS是纯粹的并行数据串行化靠DE/Hsync/Vsync信号驱动数据被分配到多对差分线上。GM8775C做的事就是把MIPI DSI的视频流“翻译”成LVDS输出的时序和电平。打个比方MIPI DSI像一个说英语的人LVDS屏像只懂中文的人GM8775C就是那个同声传译员。翻译员得先被叫醒供电、拿到工作牌复位、知道翻译规则寄存器配置然后才能上岗。这个理解方式对后面排查问题特别有用——屏不亮时先搞清楚是翻译员没醒、还是翻译规则配错了、还是翻译完但对方没听懂。2. GM8775C在链路中的角色输入侧看DSI输出侧看LVDS要把GM8775C用好就得先弄明白它输入什么、输出什么中间哪些参数可配。很多调试问题最后都归结到这几个变量上lane数、色深、时钟频率、数据映射、极性。2.1 输入侧MIPI DSI的lane数与带宽计算GM8775C的MIPI DSI输入支持常见的1-lane/2-lane/4-lane配置。决定用几lane主要看分辨率和刷新率需要的总带宽公式不复杂每lane数据速率 像素时钟 × 每像素位数 ÷ lane数以1920x108060Hz为例像素时钟约148.5MHzRGB888是24bit4条lane时每条lane数据速率约891Mbps。DSI controller和GM8775C都能承受这个速率。如果是1280x80060Hz像素时钟72MHz左右每条lane只有400多MbpsDSI链路余量很大。这里要注意的是设备树里配置的lane数和GM8775C寄存器里配置的lane数必须一致。我调试时就见过dts里写了4-lane但GM8775C初始化为2-lane结果画面像被压缩成条带状。这种问题示波器看不出来多半要重新核对寄存器配置。2.2 输出侧单通道与双通道LVDS以及色深的坑LVDS输出有单通道和双通道之分。单通道一般是指4对数据线加1对时钟双通道则是8对数据线加2对时钟。怎么判断用单通道还是双通道主要看屏的分辨率和色深。6bit面板18bit色在1080p以下通常单通道够用8bit面板24bit色在高分辨率下往往会用双通道。很多屏规格书里直接写“Single LVDS”或“Dual LVDS”这是最可靠的依据。颜色深度这个坑特别容易踩。GM8775C支持注入的MIPI数据格式通常可以设置RGB888或RGB666。如果屏是6bit但主控按RGB888发数据桥接芯片又按24bit映射输出LVDS线数不够就会出现偏色或丢低位数据。反过来屏是8bit但配置成18bit输出颜色会断层也就是常说的“色彩过渡有横纹”。2.3 寄存器控制的核心逻辑I2C配置与时序映射GM8775C通过I2C接口配置内部有若干寄存器控制输入输出参数包括输入lane数、输出单双通道输入数据格式RGB888/RGB666LVDS输出映射模式VESA或JEIDADE/Hsync/Vsync极性时钟极性与是否输出持续时钟扩频时钟SSC开关如果你想通过寄存器初始化流程一般是释放复位后I2C写初始化序列先配输入侧再配输出侧最后开启输出。不同批次芯片的寄存器地址可能有差异务必以手头这颗料的规格书为准。有一些板卡默认不写GM8775C寄存器靠芯片外围引脚配置成默认状态也能出图这种情况我在第5章会详细说。3. 三款主流MIPI转LVDS桥接芯片的取舍实录选型阶段我对比过几颗常见芯片GM8775C、TC358775XBG、SN65DSI84/86还有偶尔会遇到的LT8918B。每颗都有各自脾气最终选哪颗取决于项目的量、温度等级、价格和FAE支持力度。3.1 核心差异一览表维度GM8775CTC358775SN65DSI84/86LT8918B输入接口MIPI DSIMIPI DSIMIPI DSIMIPI DSI/LVDS/TTL输出接口LVDSLVDSLVDSLVDS/DP等多协议单双通道支持单/双通道支持单/双通道单通道为主86支持双通道支持单/双通道配置方式I2C寄存器I2C寄存器寄存器多且复杂I2C引脚strapI2C寄存器资料开放度国产原厂/代理可拿到文档少晦涩TI官方文档齐全需找原厂FAE价格区间相对便宜偏贵偏贵中等常见问题寄存器手册版本不一致初始化序列繁琐引脚配置多容易漏不同批次差异要注意表格信息是我自己和同行交流时的大致感受不是精确到分钱的采购报价具体还要以代理实际价格为准。但方向能说明问题GM8775C能成为开发板方案的主流选择核心原因是资料相对容易拿、价格有优势、FAE普遍愿意给初始化代码。3.2 便宜够用与稳定好调的博弈如果你的项目是消费类或一般工业类GM8775C配合RK3568性价比很高。开发板上大量使用说明它已经过了大批量的应用验证常见问题在网上能搜到解决方案原厂也能给出参考电路。至于TC358775稳定性和电气性能确实没得说很多车载项目指定用它。但它的寄存器太多数据手册动辄几百页配置的时候要非常小心初始化序列写错一两个字节就花屏而且文档里的推荐值有时候还要结合屏的参数二次计算。对小团队来说学习成本偏高。SN65DSI84好在Linux内核里有现成驱动如果你用Mainline内核它的集成度最高。但TI芯片价格不便宜而且现在供货周期也不如以前稳定除非项目预算充足或者客户指定否则在RK3568上我一般不会优先选它。3.3 什么情况下需要放弃GM8775C不是所有项目都适合GM8775C。我遇到过的几种情况会直接换芯片分辨率过高比如2560x1440以上单颗桥接芯片带宽不够需要评估双DSI双LVDS方案这时可能不止换桥接芯片连主控和VOP通道都要重新规划。客户明确要求车规级物料GM8775C的规格书如果不能满足AEC-Q100等级要求只能换TC358775这类有车规版本的选择。需要在显示链路上做图像缩放、OSD叠加、字符旋转等功能这已经不是普通桥接芯片能覆盖的可以考虑FPGA方案。FPGA的灵活性强但功耗、成本、研发周期都高出一截纯粹为了点亮一块屏用FPGA是杀鸡用牛刀。4. 硬件设计上容易翻车的五个细节桥接芯片的画板难度其实不高真正翻车的地方都集中在上电时序、I2C地址、差分阻抗和SSC这些容易被忽略的点上。每一条我都见过实物翻车案例。4.1 电源、复位、使能脚的时序窗口GM8775C一般需要多路电源核心逻辑电压和IO电压要按规格书要求的顺序上电。特别是复位RESET和使能PWRDN/EN引脚主控GPIO控制时必须先等电源稳定再释放复位之后延时一段时间再开始I2C初始化。有一个很典型的故障现象系统复位后偶发性白屏重新上电多试几次可能就好。查到最后是复位信号释放太早芯片内部LDO还没稳定寄存器写入失败但没有报错标志。解决办法很简单——复位释放后加至少10ms延时再做I2C访问。这个“延时大法”看似粗糙但在实际量产中非常管用能挡住一大批偶发启动失败的问题。4.2 I2C地址与上下拉电阻的处理GM8775C的I2C从机地址不是拍脑袋定的有的版本由引脚电平决定有的版本固定。调试时不要直接写在驱动里先用i2cdetect扫描总线上存在的设备地址确认后再固化进初始化代码。电平匹配也要注意。有些RK3568板卡的I2C总线是1.8V而GM8775C的IO电压是3.3V中间需要电平转换或确认芯片IO电平兼容。直接硬接可能导致I2C读不到数据或损坏引脚。上拉电阻一般接1kΩ到10kΩ具体要看I2C总线速度和线缆长度。预留0欧电阻的位置后期调I2C速率或上拉强度会方便很多。4.3 100Ω差分阻抗、等长与过孔控制LVDS和MIPI都是高速差分信号走线阻抗按100Ω差分控制。PCB设计时差分对要包地、避开其他时钟线同一对线尽量在同一层走过孔数量尽量一致等长误差控制在5mil以内是比较稳妥的做法。很多自制的转接板用飞线连接短距离测试可以出图但长时间工作容易出现花屏或信号漂移。LVDS屏本来是抗干扰很强的接口结果前面桥接芯片输出质量不行后端屏再抗干扰也没用。连接器位置建议靠近桥接芯片LVDS线与MIPI线不要平行走长距离。如果必须走长线中间加共模电感或接插件单独屏蔽地效果会好一些。4.4 时钟展频SSC与EMI的取舍SSC扩频时钟可以降低EMI峰值对过EMC测试有帮助。但缺点是可能引入像素时钟抖动部分对时钟敏感的LVDS屏会在开启SSC后出现轻微闪烁或水波纹。建议调试阶段先关闭SSC确认画面稳定后再打开。如果EMI测试过不了再想办法在屏端加展频配置并验证不同扩频比例下的显示效果。这个顺序能帮你分清问题是来自SSC还是来自其他地方。4.5 周边元器件的参考取值常规做法是每个电源引脚就近放0.1μF陶瓷电容靠近芯片电源端再放10μF钽电容或大容量MLCC。LVDS输出端的电流设置电阻按规格书推荐值取值不要随意改否则会直接影响LVDS差分电压摆幅导致远距离传输时屏端收不到信号。复位引脚可以加一个10kΩ下拉电阻和0.1μF电容组成上电延时防止复位信号被干扰。这些外围器件虽然不起眼但在量产一致性和ESD测试中作用很大。5. 软件侧两步走RK3568设备树接入与GM8775C初始化软件侧分为两块RK3568的DRM设备树链路以及GM8775C的寄存器初始化。这两块分开理解调试时才能快速定位问题到底出在VOP到DSI这一段还是桥接芯片到LVDS屏这一段。5.1 在DRM框架下正确挂载DSI到LVDS链路RK3568的显示框架是DRM/KMS默认设备树里有一个DSI controller节点下面挂panel或bridge。LVDS屏通过GM8775C接入后最干净的做法是把GM8775C设计成一个DRM bridge设备由内核在初始化时通过I2C配置芯片再把DSI output端连接到bridge的input端。但很多国产SDK并没有为GM8775C提供完善的DRM bridge驱动更多是直接在DSI节点下挂一个panel-lvds或simple-panel节点把所有初始化动作放在GPIO和显示timing里。这个方法能跑通是因为GM8775C默认状态可能就是可用的但灵活性差一旦需要切换映射格式或lane数就只能改代码。5.2 用panel-lvds直通点亮vs通过I2C初始化桥接我在实际项目中用过两种方式方法A不写GM8775C寄存器只靠芯片默认配置点亮。优点是快速验证硬件链路几分钟就能看到画面缺点是无法配置JEIDA/VESA映射、单双通道等关键参数如果屏规格和默认配置不匹配就会翻车。方法B把GM8775C挂到I2C初始化时逐条写寄存器。这是最终量产应该采用的方案因为所有参数明确可控。调试顺序建议先方法A验证硬件再方法B做最终固化可以省掉大量先排查硬件再排查软件的无效时间。5.3 设备树配置示例下面是一个基于Rockchip SDK常见结构的简化示例不是某一款开发板的完整源码重点看结构和思路dsi0 { status okay; rockchip,lane-rate 434; /* 每lane实际速率单位Mbps按像素时钟×24/lane数计算 */ panel0 { compatible simple-panel; reg 0; backlight backlight; enable-gpios gpio1 RK_PA6 GPIO_ACTIVE_HIGH; reset-gpios gpio1 RK_PA7 GPIO_ACTIVE_LOW; display-timings { native-mode timing0; timing0: timing0 { clock-frequency 72500000; /* 1280x80060Hz典型值 */ hactive 1280; vactive 800; hback-porch 40; hfront-porch 48; hsync-len 80; vback-porch 20; vfront-porch 3; vsync-len 10; de-active 1; pixelclk-active 0; }; }; ports { port0 { reg 0; panel_in_dsi0: endpoint { remote-endpoint dsi0_out_panel; }; }; }; }; }; dsi0_out_panel { remote-endpoint panel_in_dsi0; };如果走I2C初始化GM8775C则需要在I2C节点下增加GM8775C子节点i2c0 { status okay; gm8775c: gm8775c39 { compatible gm8775c-lvds-bridge; reg 0x39; reset-gpios gpio1 RK_PA7 GPIO_ACTIVE_LOW; enable-gpios gpio1 RK_PA6 GPIO_ACTIVE_HIGH; status okay; }; };I2C地址以实际扫描结果为准不要照抄0x39我见过不同封装版本地址不一样的。5.4 I2C寄存器初始化的常见写法初始化序列在驱动里一般用regmap或i2c_transfer发送。下面这段只是演示结构寄存器地址和值必须对照GM8775C规格书static const struct reg_sequence gm8775c_init_seq[] { /* 这里不是真实寄存器数据仅表示初始化顺序 */ // 复位 { 0x00, 0x01 }, // 配置MIPI输入lane数 { 0x01, 0x00 }, // 配置LVDS输出单双通道 { 0x02, 0x00 }, // 配置颜色深度与映射模式 { 0x03, 0x00 }, // 使能输出 { 0xFF, 0x01 }, }; int gm8775c_init(struct i2c_client *client) { /* 先复位再延时 */ gpiod_set_value(reset_gpio, 0); usleep_range(10000, 20000); gpiod_set_value(reset_gpio, 1); usleep_range(10000, 20000); return regmap_register_patch(gm8775c_regmap, gm8775c_init_seq, ARRAY_SIZE(gm8775c_init_seq)); }5.5 uboot阶段也要同步修改设备树RK3568的uboot和内核使用两套设备树很多项目只改了kernel的dtsuboot阶段logo一直出不来。要在LVDS屏上看到uboot logo或开机动画uboot的设备树里也要有对应的DSI和panel节点。至于uboot后期加开机动画那是另一个话题但要注意动画分辨率要匹配LVDS屏的timing如果uboot阶段的显示timing和kernel不一致切换时屏幕会闪一下甚至黑屏几秒。建议两边保持一致。6. 联调排障顺序先量波形再对时序最后翻极性很多工程师遇到LVDS屏不亮就急着改代码实际上排障顺序很重要。我的习惯是示波器量输入输出波形确认信号有没有到再核对时序参数最后查VESA/JEIDA映射和极性。这个顺序可以避免在错误方向上反复试。6.1 示波器测MIPI时钟和LVDS数据的正确姿势调试MIPI转LVDS链路时有两个关键波形要看第一个是MIPI DSI上的时钟波形。MIPI在LP模式下是低功耗状态只有进入HS模式才有高频差分摆幅。用示波器单次触发在开机瞬间抓CLKP对地波形能看到明显的HS脉冲包络。如果完全抓不到问题可能出在RK3568的DSI配置或PHY没有使能。第二个是LVDS输出端的差分波形。LVDS是电流源驱动在终端100Ω电阻上产生约350mV差分电压。用差分探头直接测CLKP与CLKN之间的波形比较准如果没有差分探头可以通过测量单端对地电压辅助判断但要注意探头接地线产生的噪声。有些项目在MIPI接口处放了测试电阻和测试点就是为了方便量产时抓波形。建议在设计阶段预留这些节点。6.2 黑屏、白屏、花屏的典型故障定位链路背光亮但完全黑屏大概率是LVDS信号的DE/Hsync/Vsync极性配置错误或者桥接芯片没有输出时钟。用示波器看LVDS连接器上有没有时钟对没有就查桥接芯片初始化。白屏常见原因是DE信号没有正确到达屏端。LVDS屏没有DE时会显示白屏或黑屏和屏厂设计有关。重点检查DE极性和GM8775C的DE映射寄存器。花屏或条纹优先怀疑像素时钟不匹配blanKing参数不对以及SSC在干扰。先关SSC再核对display-timings和屏规格书。偏色或颜色错乱大概率是VESA/JEIDA映射选错了。LVDS有两种主流的色彩映射标准屏规格书通常会写明采用哪种GM8775C寄存器里也要对应调整。6.3 分辨率与像素时钟对不上的计算实例以1280x80060Hz的屏为例假设屏规格书给出的timing为Hactive1280HfrontPorch48HBackPorch40HSync80Vactive800VfrontPorch3VBackPorch20VSync10行周期12804840801448帧周期80032010833像素时钟1448×833×60≈72.4MHz。设备树里的clock-frequency应该填72.4MHz附近的值。有些调试者把clock-frequency填成屏幕厂商标称的“133MHz”或者自己想当然填100MHz结果屏明显闪动或直接不亮。这里的本质是设备树的clock-frequency是给DRM计算显示时序用的必须和屏的真实timing一致。DSI lane rate也要跟着算72.4MHz×24bit/4lane≈434Mbps。如果RK3568的DSI节点里配置了lane-rate或类似的属性就填434左右。注意不同SDK的属性名不一样要以实际SDK为准。6.4 同时调试摄像头、EtherCAT等模块时的联动经验RK3568板子往往不只是接一块LVDS屏还可能接MIPI CSI摄像头比如OV5695、OV8858或者跑EtherCAT主站做实时控制。我的经验是MIPI DSI和MIPI CSI虽然都在MIPI接口体系里但一个是显示输出一个是摄像头输入设备树配置分开没有权限冲突。但调试时要注意干扰问题。DSI的持续时钟和摄像头数据线如果靠得太近辐射会把摄像头图像弄出横纹。这时可以通过降低DSI lane速率或开启SSC来改善。如果板子同时跑EtherCAT主站和显示刷新建议把EtherCAT实时任务绑核避免被显示中断和其他进程打断。这个虽然和GM8775C没有直接关系但在工控板联调时经常一起出现提前规划会少很多麻烦。7. 关于这颗芯片再说几点个人经验用GM8775C调完几个项目后我最大的体会是国产桥接芯片最大的风险不在芯片本身而在资料的版本管理。GM8775C的规格书和初始化代码在不同渠道拿到的版本可能不一样里面的寄存器描述会有细微差异。我的做法是每次打样前都向原厂或代理商确认“这颗料的当前版本对应哪一版规格书”然后把手头的初始化代码和规格书逐一核对而不是直接沿用以前项目的代码。另外GM8775C的初始化序列在量产阶段要固化到生产测试工具中。产线上如果芯片贴错批次或I2C地址有变测试工具能快速发现不用等到整机组装完再返工。最后分享一个小技巧如果调试时屏幕能点亮但颜色明显不对别急着怀疑GM8775C坏了先查LVDS屏规格书里的映射标准是VESA还是JEIDA。我见过好几个项目卡在这个问题上最后改一个寄存器就解决了。按“先量波形再对时序最后翻极性”的顺序排查MIPI转LVDS的方案是很好收尾的。