ARTICLE DETAIL

资讯详情

深耕编程入门与网站建设的一线实战洞察。

GMSL与GMSL2技术详解:车载摄像头串行链路原理与调试实战

GMSL与GMSL2技术详解:车载摄像头串行链路原理与调试实战 搞汽车电子和智能驾驶的工程师应该都绕不开GMSL这个名词。我头一回接触GMSL是做环视项目客户要求四个摄像头分别装在车身四周主机放在车尾箱或仪表台后方中间隔着好几米的线束。当时我对串行器、解串器、反向通道这些概念毫无头绪纯粹靠翻芯片手册和点寄存器一点点把链路调通。这几年做了好几个平台的摄像头方案从第一代GMSL到GMSL2都上手过也踩了不少坑。今天把GMSL的基础知识和调试经验整理成一篇个人笔记给刚接触这项技术的朋友做个参考也方便自己日后回查。这篇笔记不会讲得太玄重点放在GMSL到底是做什么的、GMSL和GMSL2有什么差别、实际项目里怎么配置和调通链路、遇到黑屏花屏怎么查。不管你是做嵌入式软件、硬件设计还是系统集成只要跟车载摄像头打交道这篇应该都能帮上忙。1. GMSL到底是个什么东西1.1 一句话讲清GMSL的工作方式GMSL全称是Gigabit Multimedia Serial Link千兆多媒体串行链路最早由Maxim推出现在归在Analog DevicesADI旗下。它要解决的核心问题很简单怎么把高速视频数据从摄像头端搬到处理器端。摄像头传感器输出的通常是MIPI CSI-2格式的高速并行信号这种信号在PCB上走不了几厘米就得做阻抗匹配更别说通过几米长的车规线束去传输了。GMSL的做法是在摄像头端放一颗串行器Serializer把并行的CSI-2数据打包成高速差分串行信号再通过同轴线或者屏蔽双绞线传到另一端的解串器Deserializer由解串器恢复出CSI-2信号交给SoC处理。这个过程看起来跟网络通信里的编码、传输、解码逻辑一样只不过它针对的是视频和控制数据而且是完全点对点的专用通道。从物理形态上看GMSL链路就是一颗串行器加一颗解串器中间用一根线连接。这根线同时干三件事传差分视频数据、传I2C/UART控制信号、传电源。这也是GMSL能在车载领域大规模普及的根本原因——一根线代替了一大束信号线既减轻重量又降低成本。1.2 为什么车载系统离不开GMSL我说几个真实场景你就明白GMSL为什么是刚需了。第一个是距离问题。车上的摄像头分布在保险杠、外后视镜、车顶行李架这些位置到主机之间的线束往往要穿过整个车身距离至少两到五米。MIPI CSI-2这类并行接口不是为这种场景设计的信号完整性和EMC都会出问题。而GMSL的串行传输方式配合均衡器在标准同轴电缆上可以轻松支持15米以上的链路实际项目中十米以内非常稳定。第二个是带宽问题。现在的新车动不动就上800万像素摄像头RAW数据量已经超过1Gbps更不要说多路摄像头同时接入。GMSL2单链路可以跑到6Gbps支持1080p甚至4K分辨率的视频传输带宽余量足够。而且多路方案里还有四通道解串器一颗芯片同时接四个摄像头主机端的资源占用低很多。第三个是电磁环境。汽车点火线圈、电机、高压线束都是强干扰源摄像头线束往往跟动力线束走同一个线槽。GMSL本质是差分串行信号配合屏蔽同轴线抗干扰能力比并行CMOS信号强得多。在GMSL2里还专门做了扩频时钟来降低EMI实测下来对整个系统的EMC测试帮助很大。第四个是简化线束。这个对整车厂来说是实打实的成本。传统模拟摄像头每路要单独布视频线、电源线、地线而GMSL用一根同轴线就能完成供电加数据传输摄像头端也只需要一个连接器。线束少了装配工时和故障率都跟着降。1.3 GMSL、LVDS、MIPI CSI-2和FPD-Link的关系不少人会把GMSL和LVDS、FPD-Link搞混这里我统一梳理一下。MIPI CSI-2是摄像头传感器与SoC之间的标准接口属于并行短距离传输在PCB和FPC排线上使用。LVDS是低电压差分信号泛指一类电气标准很多老的显示接口和部分摄像头模组会用到本质是把并行数据转成差分对来传输。GMSL和TI的FPD-Link都属于专用SerDes技术在LVDS或者自定义的差分电气层之上做了视频打包、控制通道、同轴供电这些完整协议。技术传输介质典型距离主要应用MIPI CSI-2PCB/FPC排线几十厘米以内传感器到SoCLVDS差分线对1米以内老式摄像头/显示屏GMSL/GMSL2同轴线/STP15米以上车载摄像头/显示FPD-Link同轴线/STP15米以上车载摄像头/显示一句话总结CSI-2是芯片之间的接口GMSL是板子之间、甚至整车部件之间的传输方案。实际项目里通常是传感器输出CSI-2给串行器串行器转成GMSL信号经过线束传输后再由解串器恢复出CSI-2给SoC。搞清楚这个层级关系后续阅读芯片手册和框图就会顺很多。2. 从GMSL到GMSL2关键技术点对比2.1 GMSL2到底升级了什么第一代GMSL的链路速率是3.125Gbps主要面向720p和1080p级别的摄像头控制通道走的是I2C和UART。GMSL2把速率直接翻倍到6Gbps同时引入了一套全新的帧格式把视频数据、I2C、UART、GPIO和中断信号都封装进同一个协议层里。也就是说GMSL2不只是把路修宽了还把整条路上的交通规则彻底重写了。GMSL2还提供了3Gbps和6Gbps两档速率选择。这个设计很实用因为不是所有项目都需要6Gbps速率低一点功耗和EMI都能降不少。比如普通的200万像素摄像头1080p60fps也就是3Gbps档位绰绰有余只有上了4K或者多目拼接需求才需要切到6Gbps。我在项目里通常会先按传感器输出带宽留出30%的余量再决定用哪一档避免为了省功耗把速率卡得太紧。除了速率GMSL2在反向通道上也做了明显增强。第一代GMSL的反向通道速率很低主要是从解串器向串行器传配置命令GMSL2的反向通道带宽大幅提升支持从摄像头端向主机端传GPIO中断和即时状态信息这对于触发同步抓帧和故障上报非常有价值。2.2 功耗、EMI和稳定性的取舍做硬件的人最关心的其实是功耗和EMI表现。GMSL2在降低功耗上下了不少功夫比如引入了自适应均衡器可以根据线缆长度自动调整接收端的增益和均衡强度避免在短线上过度放大导致信号饱和。线缆短的时候系统功耗更低线缆长的时候自动增强相当于给了你一个免费的自适应算法。EMI方面GMSL2默认支持扩频时钟SSC可以把某一频率上的尖峰能量分散到周围频段减小对车内其他无线模块的干扰。实际项目里如果GMSL2链路跑6Gbps我建议把扩频功能打开测试结果普遍能低几个dB。但要注意一点SSC开启后有些便宜的示波器可能不好触发调试矩阵切换的板卡时容易误判信号问题这个我自己遇见过好几次。稳定性上GMSL2从协议层加入了更完整的帧同步和速率协商机制。链路建立后串行器和解串器会先握手确认双方工作模式再开始传视频数据。这种设计减少了上电时序带来的不确定性——第一代GMSL偶尔会遇到配置完成后图像不出来要再写一次寄存器才能恢复的bug在GMSL2上遇到的概率低很多。2.3 怎么判断项目该用GMSL还是GMSL2这个问题没有绝对答案但可以按这几个维度来判断。如果你的产品还在用720p或者1080p30fps摄像头而且摄像头数量不超过四路第一代GMSL其实够用。它的生态非常成熟芯片价格更低参考资料也多调试难度比GMSL2小。很多前装量产项目即使到2025年还在用一代方案就是因为稳定和成本压倒一切。但如果你做的是新平台我强烈建议直接上GMSL2。理由很简单GMSL2芯片基本向下兼容GMSL一代的很多概念而且带宽余量更大以后摄像头分辨率升级不用改硬件架构。我见过好几个项目一开始用一代芯片后来客户提需求要升级成2M或8M摄像头结果整个解串器主板重新画板损失远大于当初省的几块钱芯片差价。具体到芯片选择串行器一代经典型号是MAX96705解串器常用MAX96706GMSL2常用的串行器是MAX96717解串器有MAX96755、MAX96712、MAX9296这些。我个人用得最多的是MAX96712和MAX9296的组合一颗四通道解串器应对环视加前视绰绰有余。3. 串行器与解串器的核心工作机制3.1 链路建立与锁定流程GMSL链路从硬件上电到正常出图中间要经历一个明确的建立过程这个过程理解透了调试时候就能少走弯路。第一步是电源就绪。串行器端和解串器端都需要各自的上电时序尤其是摄像头端的电源通常由解串器通过同轴线提供远端供电出来后要先稳定再让串行器完成复位释放。第二步是串行器和解串器之间的物理层握手双方会通过训练序列协商速率和均衡参数。第三步是控制通道建立解串器作为主机通过I2C总线去访问远端串行器类似于“找到并注册设备”。第四步才是视频数据的传输。我在调试时最常看的一个信号是LOCK也就是解串器输出的锁相指示。LOCK拉高说明解串器已经成功锁定远端串行器发来的信号这是整个链路正常的前提条件。如果LOCK一直拉不起来优先查电源、复位和线缆连接而不应该急着看CSI配置。3.2 控制通道I2C和UART是怎么传过去的GMSL链路里最神奇的部分就是把I2C信号在串行链路上透明传输。解串器连接主控的I2C总线远端串行器连接摄像头传感器等从设备只要正确配置了设备地址映射主控可以像访问本地I2C设备一样访问远端传感器。这背后的实现原理是解串器把I2C的SCL和SDA上的读写操作封装成数据包通过反向通道送给串行器串行器再在本地转换成真实的I2C时序。因为是数据包传输所以I2C速度会受链路带宽限制实际项目里建议把远端I2C总线速率控制在400kHz以下超出后稳定性没法保证。地址映射要注意一个坑GMSL设备的默认I2C地址往往都是0x20或者0x40附近的某个值两颗芯片用同一个地址就会冲突。解决方法是先把解串器配置成不透明的地址转发模式给每颗远端芯片分配独立地址再把模式切换成透明转发。这个顺序一旦搞反地址映射配置会被远端广播包干扰可能直接导致后续配置全部失败。3.3 同轴电缆供电与反向通道同轴电缆供电在前面提了好几次这里把原理说透。GMSL同轴线既传高频差分信号又传直流电源其实是用了频率分割的思路视频和控制信号是高频分量通过中心导体传输直流电源通过偏置网络叠加在中心导体上在两端再用电感和电容组合把电源和信号分开。这个偏置网络在芯片内部有参考电路外部需要加电感和电容组成Bias-T。反向通道这个词指的是一条从解串器到串行器的低速控制链路。它和正向的视频数据通道方向相反所以叫“反向”。反向通道承载的就是I2C、UART、GPIO等控制信息。我理解它的作用类似于网络通信里的上行控制通道数据速率不用太高但要保证低延迟和高可靠性。实际做板时同轴电缆供电的电流能力要注意。系统里摄像头传感器加串行器大约需要150到250毫安电流如果线缆又细又长压降可能超过0.5伏摄像头端电压就不够。我在一个项目中用过0.5毫米的细同轴线10米距离供电电压掉了0.7伏后来换了更粗的RG174规格才解决。设计时记得给远端供电计算预留余量。4. 配置GMSL芯片的实操要点4.1 看懂关键寄存器组配置GMSL芯片本质就是操作一串寄存器。寄存器很多但核心的可以分为几类掌握之后基本可以应对绝大多数项目。第一类是链路配置寄存器用来设定串行器和解串器的工作模式、速率档位、均衡强度和扩频开关。第二类是I2C配置寄存器包括设备地址、地址映射、本地/远端转发使能等。第三类是视频通道寄存器配置CSI-2的输出格式、数据通道数量、虚拟通道号等。第四类是状态寄存器例如LOCK状态、错误计数、温度告警等。以解串器MAX96712为例关键的寄存器大多集中在0x00到0xAF的区间。比如寄存器0x0006是PHY层控制用来设置PLL倍频系数寄存器0x0010和0x0012则控制CSI输出端口的映射关系。具体数值一定要以芯片手册的recommended setting为基准不要自己凭空组合寄存器值因为很多参数之间存在耦合关系错一个可能信号就出不来。4.2 配置顺序和常见坑我总结的标准配置顺序是这样的先复位芯片并等待上电稳定然后配置解串器的输入输出基本模式和PLL参数再配置串行器的PLL和输入输出模式接着配置I2C地址映射最后使能视频输出通道。如果配置顺序反了最常见的一个现象是I2C可以正常访问芯片但CSI输出没有数据。原因是你提前使能了输出端口而输入侧还没有正常锁定导致输出端不停重复复位。所以我在项目里的习惯是所有参数配置完最后再写一次输出使能寄存器这样能最大程度避免中间态。实际调试中我还遇到过一种很隐蔽的情况写寄存器时用IO口模拟I2C速度很快比如超过1MHz结果GMSL芯片反应不过来寄存器写不进去或者写一半丢字节。排查了半天最后降低I2C速率到400kHz才稳定。芯片手册里写了最高I2C速率支持多少但实际应用时留足余量总没错。4.3 视频通道配置的细节视频通道关键是把串行器输入端的CSI-2格式和解串器输出端的CSI-2格式匹配好。很多工程师只关注分辨率和帧率忽略了CSI-2的数据通道数Lane Count、虚拟通道号Virtual Channel和数据类型Data Type这些参数。比如摄像头输出4通道MIPI CSI-2每通道1Gbps串行器必须按四通道模式接收解串器输出给SoC时如果SoC的CSI控制器只支持两通道那解串器就得把数据重新打包成两通道输出。这种重打包能力GMSL芯片是支持的但需要配置正确否则出来的图像会出现条纹错位或者颜色异常。虚拟通道号也经常被忽略。多路摄像头接入同一个解串器时每个摄像头应该分配不同的虚拟通道号这样SoC端可以通过CSI-2的VC区分不同来源的图像。我在环视项目里就把四个摄像头分别配成VC0到VC3主控那边直接按VC拿数据不需要额外做MUX。这个习惯建议新项目从第一天就培养起来后面做多摄同步会省很多事。4.4 GMSL2特有的功能配置除了常规的视频和控制通道GMSL2还提供了一些一代没有的高级功能用得好的话能解决很多实际问题。比如GMSL2的链路I2C速率更高可以承载更大的控制数据量同时支持通过同一条链路传输多路视频流比如一颗解串器同时接收两个不同摄像头的视频流在链路层完成合流再通过两个CSI端口分别输出。这个功能对双目前视摄像头特别有用两个摄像头模组可以用一颗解串器主机端接口资源节省一半。再比如GMSL2的GPIO隧道功能。摄像头端的红外补光灯、加热器、镜头遮挡检测这些信号都可以通过GMSL2的GPIO隧道映射到主机端直接在SoC侧控制远端的外设省掉单独布线。我当时调试一个带加热丝的摄像头项目就是用GMSL2的GPIO来控制加热丝开关省了一根两芯线客户很满意。5. 实际项目中的选型和布线经验5.1 线缆选型与屏蔽处理GMSL最常见的物理介质是同轴电缆和屏蔽双绞线。同轴线用在单摄像头的场景比较多屏蔽双绞线则适合需要传输差分信号又要兼顾机械强度的场景。选型时主要看三点特性阻抗、衰减特性和物理耐弯折能力。同轴线一般要求75欧姆特性阻抗这与射频同轴线的要求一致。如果你手头有网络分析仪可以用TDR功能测一下链路阻抗看连接器过渡点有没有突变。衰减特性决定有效传输距离GMSL2跑6Gbps时在RG174这类细同轴线上15米已经是接近极限了稳定起见建议控制在10米以内。屏蔽双绞线则需要注意差分阻抗匹配通常是100欧姆左右选错了会直接影响信号质量。线束的屏蔽层接地也很有讲究。屏蔽层的一端要可靠接地另一端视情况决定是接地还是通过电容单点接地目的是避免形成地环路。地环路带来的问题很典型画面出现低频条纹或者随发动机转速变化的噪声。这个在地线设计不规范的项目里屡见不鲜。5.2 ESD防护与接地方案车载摄像头的连接器暴露在车身外部必须做ESD防护。很多GMSL芯片内置了±8kV的ESD保护但经验告诉我外部环境恶劣时芯片内置防护往往不够尤其是在静电放电会直接打在连接器外壳上的场景。我做过的量产项目里都会在连接器输入侧加TVS管例如选结电容低的型号避免对高频信号造成额外衰减。并联的TVS管回路也要尽量短否则寄生电感会让TVS管的钳位效果大打折扣。另外连接器的金属外壳要和车身地可靠搭接让静电电荷快速泄放而不是经过芯片内部。接地问题再补充一点GMSL的屏蔽层、摄像头外壳、连接器外壳、主机外壳最好都在同一个参考地电位上。实际项目里如果发现图像有周期性噪声先拿万用表测摄像头端和主机端的地电位差超过几十毫伏就要处理。地电位差过大的通常原因是接地螺丝拧紧力矩不够或者接地桩位置被油漆覆盖导致接触不良。5.3 多摄像头系统的地址规划多路摄像头系统里最烦的一步就是给每颗芯片分配I2C地址。由于GMSL芯片上电后的默认地址都一样不加处理时解串器I2C总线上一旦挂了多路模组必然冲突。我常用的方法有两种。一种是在硬件上拉引脚很多GMSL芯片有专门的I2C地址配置引脚比如ADDR0、ADDR1通过上下拉组合给芯片设不同的地址。PCB布线时把这两个引脚设计成通过0欧电阻选择软件不用改硬件只是焊接不同阻值的电阻就行。另一种是软件方式先把解串器切换到非透明模式逐个通过链路枚举远端串行器给每颗芯片单独写新的I2C地址再切回透明模式。这种方式对硬件没有额外要求但需要芯片手册里的本地I2C地址信息配合配置时小心一点。多摄像头同步也是GMSL系统里容易被忽视的环节。多个摄像头如果想实现帧同步需要由解串器或SoC产生同步信号通过GMSL链路发送给每颗串行器再转发给摄像头传感器。GMSL2的帧同步机制比一代精确很多可以提供统一的同步脉冲让多路图像在同一时刻曝光。这个功能在做环视拼接时至关重要否则车辆行驶中画面拼接会产生撕裂。6. 常见问题与排查技巧实录6.1 黑屏排查路径黑屏是所有GMSL项目里出现频率最高的问题排查路径我写一下。第一步先看供电。用万用表量摄像头端同轴线供电点的电压如果电压偏低或者波动大先解决电源问题。第二步看LOCK状态用I2C读解串器的LOCK寄存器LOCK为低说明物理层没有锁定先从线缆和连接器查起LOCK为高但不出图问题大概率在CSI配置上。第三步检查CSI输出用示波器或者逻辑分析仪看SoC接收端的CSI信号如果CLK和数据通道没有输出那基本可以断定是解串器配置的问题。之前调过一台样机现象是刚上电能出图运行几分钟后黑屏。排查发现是摄像头端某个电源网络虚焊温度升高后接触电阻变大远端供电电压跌到芯片工作阈值以下链路自动失锁。重新焊接后问题解决。这种热敏性的故障最难查往往白天正常晚上就黑屏还是要从供电和焊点入手。6.2 花屏、条纹和干扰花屏和条纹通常意味着信号质量出了问题。常见的干扰源是电源纹波、地环路、线缆屏蔽层接触不良和系统中其他高频开关噪声。排查时最好用频谱仪或者高带宽示波器观察GMSL链路的眼图如果眼图边界模糊就说明信噪比不够。低成本的排查方法也有效换一根已知正常的线缆如果问题消失说明线缆或者连接器有问题如果把摄像头从车身上挪到桌面上测试问题消失那多半是接地或者外部干扰的问题。花屏问题里被忽视最多的是摄像头模组自身的电源滤波。摄像头传感器对电源噪声非常敏感电源纹波大会直接反映在图像上表现为细密条纹或者暗部噪点。给传感器电源加一级LDO和并联电容往往能解决很多看起来很玄乎的问题。6.3 链路不稳定、偶发断链链路偶发断链是量产阶段最头疼的问题因为它在实验室测试时很少复现装车后却随机出现。这种情况下需要先区分是链路失锁还是SoC接收端丢数据两种故障的表现和排查方向完全不同。链路失锁时解串器的LOCK会拉低SoC侧会检测到CSI错误上报摄像头流错误如果LOCK一直保持高只是图像偶发卡顿那更多是链路传输中的误码需要检查线缆屏蔽、供电稳定性和连接器端子接触。对于偶发误码强烈建议打开GMSL芯片内置的错误计数寄存器统计误码出现的时间和频率这样能快速定位到是电磁干扰还是接触不良。另外环境温度升高时线缆衰减会变大误码率会跟着上升。如果项目要求的工作温度范围很宽线缆选型时就要留出足够的衰减余量。我在一款前装项目中就吃过这个亏常温下一切正常高温箱做到85度时画面开始出现马赛克后来换了更粗的同轴线才通过。6.4 调试工具和日志建议调试GMSL系统工具用对了能省一半时间。基础的三件套是万用表、示波器和I2C调试工具。万用表用来查电源和地连通性示波器要看眼图和CSI波形I2C调试工具则用来读写芯片寄存器实时观察配置和状态。进阶工具方面解串器芯片自带的诊断功能值得好好利用。比如某些GMSL2解串器可以输出链路误码率估算值或者通过寄存器读取线缆衰减等级这些对于判断链路健康度非常有价值。另外推荐准备一根短跳线和一个同轴转SMA的转接头方便单独测试摄像头模组或者线缆段隔离故障范围。我在实际调测时还有一个习惯就是每次改动寄存器配置都会截图保存。看起来有点笨但真的能救命。因为GMSL芯片寄存器太多你很难记住哪个改动导致了问题有了截图记录回退版本就很简单。这个习惯帮我在好几个项目里避免了反复试错省下的时间远比截图花掉的多。个人实操中的一点体会最后聊几句不太容易在芯片手册里看到的东西。GMSL技术本身不算复杂难的是它把高速信号、模拟信号、电源管理、协议配置全揉在了一条链路上任何一个环节出问题表现可能都差不多——黑屏、花屏、断链。所以排查问题的时候千万不要一上来就怀疑软件配置先把物理层的电源、线缆、连接器都确认一遍再回去看寄存器状态。我见过太多工程师在寄存器上反复折腾最后发现只是同轴线没有插紧。还有一个小技巧如果你确认物理链路没问题但图像就是不稳定试着把GMSL芯片的SSC扩频关闭再测试。有些SoC的CSI接收端对扩频时钟比较敏感关闭SSC后虽然EMI指标稍微差一点但图像稳定性能显著提高。这种取舍在实际项目里很常见需要根据测试数据来判断而不是死守某一种配置。GMSL技术还在持续演进GMSL2之后还有更高带宽的新方案。但不管协议怎么变串行器加解串器、正向传视频、反向传控制的整体架构不会变。把这篇笔记里的基础概念和调试思路吃透不管是做摄像头还是做显示屏后续遇到新芯片都能快速上手。这篇笔记就先写到这里后续有新的调试案例我会继续补充。
返回列表