ARTICLE DETAIL

资讯详情

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

MAX9295/9296 MIPI PHY四种模式详解与数据通路设计实战

MAX9295/9296 MIPI PHY四种模式详解与数据通路设计实战 1. 为什么MAX9295/9296的MIPI PHY模式值得单独拿出来讲搞车载视觉或者多路摄像头聚合的兄弟对MAX9295和MAX9296这对芯片组合应该不陌生。MAX9295做串行器把MIPI CSI-2信号转成GMSL2走同轴线或屏蔽双绞线MAX9296做解串器把GMSL2还原成MIPI CSI-2送给SoC。这套链路在环视、前视、舱内监控里用得极多属于那种“方案成熟但细节坑不少”的典型。我接触这套芯片大概有几年了从最早的调试抓瞎到后来慢慢把数据手册里那些PHY配置寄存器一个个啃明白中间踩的坑足够写一本小册子。很多人拿到参考设计I2C配置一抄发现能出图就觉得搞定了。但一旦遇到需要双路输出、需要不同分辨率混跑、或者需要把两路视频拼成一个4-lane输出的时候就懵了。问题的根子往往就出在对MIPI PHY模式和数据通路设计的理解不够透。这篇东西不打算复述数据手册而是想把我自己从实际项目里总结出来的四种MIPI PHY模式的理解、它们各自适合什么场景、寄存器层面怎么配、数据通路怎么规划掰开揉碎讲一遍。如果你正在用MAX9295/9296做多摄像头方案或者被CSI-2的lane分配和PHY模式搞得头大那这篇应该能帮你省下不少抓波形的时间。核心关键词先摆出来MAX9295、MAX9296、GMSL2-CSI2、MIPI PHY、数据通路。这几个词基本覆盖了从串行端到解串端再到SoC入口的整条链路后面所有内容都围绕它们展开。2. 先搞清楚MAX9295和MAX9296在链路里各自干什么2.1 串行器MAX9295的角色定位MAX9295是一颗GMSL2串行器输入端是MIPI CSI-2输出端是GMSL2。它通常放在摄像头模组那一侧和图像传感器挨着。传感器出来的CSI-2信号进入MAX9295经过PHY接收、像素打包、协议封装最后通过GMSL2的PHY发出去。它支持多种输入配置包括不同的lane数和不同的PHY模式这一点直接决定了你摄像头端能怎么接。我见过不少人把MAX9295当成一个单纯的“并串转换”芯片这个理解不能说错但太粗了。它内部其实有相当灵活的路由和映射能力尤其是当你的传感器输出lane数和GMSL2链路带宽不匹配的时候MAX9295的PHY模式选择就变得很关键。比如传感器只出2-lane但你想用更高的帧率或者更大的分辨率就得考虑怎么把CSI-2的PHY配置成能充分利用链路带宽的模式。2.2 解串器MAX9296的角色定位MAX9296是配套的GMSL2解串器放在主板这一侧。它接收GMSL2信号解出CSI-2然后送给SoC或者ISP。MAX9296通常支持双路GMSL2输入也就是说一颗芯片可以接两路MAX9295这在环视方案里非常常见——四个摄像头两颗MAX9296或者一颗MAX9296接两路再加别的。MAX9296的输出侧就是MIPI CSI-2 PHY这里就是标题里说的“4种MIPI PHY模式”主要发挥作用的地方。它可以把两路输入分别输出成两路独立的CSI-2也可以把两路合并成一路更宽lane的CSI-2还可以做数据流的复制或者拆分。这些不同的输出组织方式对应的就是不同的PHY模式配置。2.3 GMSL2-CSI2这条链路的核心约束GMSL2-CSI2不是简单的透传中间涉及到速率匹配、lane映射、虚拟通道分配、数据类型打包等一系列问题。GMSL2的单链路速率是固定的几档比如3Gbps、6Gbps而CSI-2的lane速率和lane数是可以灵活组合的。这就带来一个核心约束你必须在串行端和解串端同时规划好PHY模式让两边的带宽和lane配置对得上否则要么出不了图要么出图但丢帧、花屏。我个人的经验是先把GMSL2链路的可用带宽算清楚再倒推CSI-2这边需要多少lane、什么速率最后去定MAX9295和MAX9296的PHY模式。这个顺序不能反反了就容易出现“配置都能读回来但就是没图”的情况。3. 四种MIPI PHY模式逐一拆解3.1 模式一标准D-PHY单路输出模式这是最基础的模式。MAX9296把一路GMSL2输入解出来通过一组CSI-2 D-PHY输出。lane数可以是1/2/4具体看你的SoC接收端支持多少。这个模式下MAX9296的另一个输入通道可以关闭或者独立配置成另一路输出但两路之间没有数据交互。这种模式适合什么场景单摄像头方案或者虽然有多摄像头但SoC有足够多的CSI-2接口每个摄像头独立走一路。它的好处是简单、调试直观每一路都是独立的CSI-2虚拟通道也不需要特别处理。坏处是占用SoC的CSI-2接口多如果SoC只有两路CSI-2但你要接四个摄像头就不够用了。配置上这个模式主要关注几个点lane数要和SoC端匹配时钟模式要选对连续时钟还是非连续时钟还有就是GMSL2那边的link速率要和MAX9295的输入配置对齐。我遇到过好几次lane数配错了比如SoC端期望4-lane但MAX9296只出了2-lane结果就是SoC的CSI-2接收器一直报错但MAX9296这边看起来一切正常。3.2 模式二双路独立输出模式这个模式下MAX9296的两路GMSL2输入各自解出一路CSI-2分别从两组PHY输出。注意这里的两组PHY是物理上独立的不是同一组PHY分时复用。MAX9296内部有两套CSI-2输出PHY可以同时工作。这个模式在环视方案里用得最多。比如左前和右前两个摄像头分别接MAX9296的两路输入然后MAX9296输出两路CSI-2给SoC。SoC这边如果有两路CSI-2输入就刚好接上。每一路的lane数可以独立配置比如一路2-lane另一路2-lane或者一路4-lane另一路2-lane只要SoC支持。这里有个细节容易忽略两路输出的时钟是独立的还是同源的在MAX9296里两路CSI-2 PHY的时钟可以来自各自的GMSL2恢复时钟也可以来自同一个参考时钟。如果两路摄像头的帧率不同步用独立时钟没问题但如果需要严格同步就得考虑时钟同源配置。我在做立体视觉方案的时候就因为这个时钟问题折腾了很久后来把两路PHY的时钟都切到同一个参考源才解决同步问题。3.3 模式三双路合并单输出模式这个模式就有意思了。MAX9296把两路GMSL2输入的数据合并到一组CSI-2 PHY上输出。怎么合并有两种常见做法一种是lane合并比如两路各2-lane合并成一组4-lane输出数据通过虚拟通道区分另一种是数据流拼接把两路视频拼成一幅更大的图或者前后排列。lane合并的模式下MAX9296内部会把两路数据流分配到同一组PHY的不同lane上。这时候虚拟通道VC就非常重要了因为SoC收到的是一路CSI-2但里面有两路视频必须靠VC来区分。VC的分配在MAX9296的寄存器里配置通常一路用VC0另一路用VC1。这个模式的好处是节省SoC的CSI-2接口。比如SoC只有一路4-lane CSI-2但你要接两个摄像头就可以用这个模式。坏处是配置复杂而且对SoC的CSI-2接收器有要求——它必须支持虚拟通道解复用。有些低端SoC的CSI-2控制器不支持VC那就用不了这个模式。我实测下来这个模式在调试的时候最容易出问题的地方是lane映射。两路数据流合并到4-lane哪一路走lane0-1哪一路走lane2-3这个映射关系在MAX9296的寄存器里有专门的配置位。如果配反了SoC收到的图像就是错乱的可能左半边是摄像头A的数据右半边是摄像头B的数据但位置全乱了。3.4 模式四数据复制与分流模式这个模式相对小众但在某些特定场景下很有用。MAX9296可以把一路GMSL2输入的数据复制成两路CSI-2输出或者把两路输入的数据分流到不同的输出组合上。比如一路输入同时输出到两组PHY一组给SoC做实时处理另一组给另一个芯片做录制或者备份。数据复制模式下两路CSI-2输出的内容是一样的VC也相同。这个模式在需要双备份或者双处理的场景下有用比如自动驾驶域控制器里一路视频既要给感知算法又要给记录模块。分流模式则更灵活可以把两路输入的数据按需分配到两路输出上比如输入A和输入B都输出到输出1同时输入A单独输出到输出2。这个模式的配置难点在于数据通路的映射关系。MAX9296内部有一个交叉开关矩阵可以把任意输入路由到任意输出。但这个矩阵的配置不是随便来的要受到带宽和PHY能力的限制。比如你不能把两路4K视频同时路由到一组2-lane的PHY上带宽不够。4. 数据通路设计的核心考量4.1 带宽计算一切设计的基础不管选哪种PHY模式带宽计算都是第一步。GMSL2链路的带宽是固定的比如6Gbps的链路实际有效载荷大概在5Gbps左右去掉协议开销。CSI-2这边的带宽是lane速率乘以lane数。你必须保证CSI-2的总带宽不超过GMSL2链路的有效带宽否则就会丢数据。举个例子一个1080p、30fps、RAW10的摄像头每帧像素约200万每个像素10bit加上CSI-2的协议开销大概需要2.2Gbps左右的带宽。如果GMSL2链路是3Gbps那勉强够用如果是6Gbps就很宽裕。如果你要把两路这样的视频合并到一组4-lane CSI-2上那CSI-2的lane速率至少要跑到1.1Gbps以上4 lane × 1.1Gbps 4.4Gbps才能承载两路的总带宽。我一般会留20%的余量因为实际场景里还有blanking、嵌入式数据、CRC等开销。算带宽的时候不能卡着极限算否则温度一高或者时钟一抖就出问题了。4.2 Lane映射与极性配置Lane映射是数据通路设计里最容易出错的地方。MAX9295和MAX9296的CSI-2 PHY都支持lane顺序调整和极性反转。为什么需要这个因为PCB布线的时候有时候为了走线方便会把lane的顺序打乱或者把差分对的正负反过来。如果芯片不支持这些调整那就得改板子成本太高。MAX9296的寄存器里有专门的lane映射配置可以把物理lane重新映射到逻辑lane上。极性反转也是类似每个lane的正负可以独立翻转。我在实际项目里每次拿到新的PCB第一件事就是确认lane映射和极性配置然后写一个简单的测试模式让MAX9296输出彩条用SoC抓一帧看看对不对。这个步骤能省掉后面很多莫名其妙的调试时间。4.3 虚拟通道与数据类型配置虚拟通道VC在单路输出模式下可能用不到但在合并输出模式下就是必须的。MAX9296允许给每一路输入分配不同的VC这样SoC收到合并后的CSI-2流时可以通过VC来区分数据来源。VC的配置在MAX9296的寄存器里通常和输入通道绑定。数据类型DT也需要关注。不同的图像格式RAW8、RAW10、RAW12、YUV422等对应不同的DT值。MAX9296在转发数据的时候可以选择透传原始的DT也可以重新映射DT。如果SoC对DT有特定要求比如必须用RAW10那就要在MAX9296里把DT配置成对应的值。我遇到过一个问题传感器输出的是RAW12但SoC的CSI-2接收器只认RAW10结果就是图像能出来但颜色不对。后来在MAX9296里把DT从RAW12改成RAW10同时调整了数据打包方式才解决。这个坑让我意识到DT和打包方式必须和SoC端严格对齐不能想当然。4.4 时钟模式连续与非连续的选择CSI-2的时钟模式有连续和非连续两种。连续模式下时钟lane一直在跑不管有没有数据非连续模式下时钟lane只在有数据的时候才跑。这两种模式各有优劣连续模式功耗高一点但时钟稳定适合高速率非连续模式省电但时钟启停可能带来额外的抖动。MAX9296支持两种模式通过寄存器配置。我一般建议在高速率场景下用连续时钟低速率或者低功耗场景下用非连续时钟。但要注意SoC端的CSI-2接收器必须支持你选的模式否则可能收不到数据。有些SoC只支持连续时钟那就没得选。5. 实操配置流程与寄存器要点5.1 上电初始化顺序MAX9295和MAX9296的上电顺序有讲究。一般来说先给MAX9296上电再给MAX9295上电最后配置寄存器。如果顺序反了可能会出现GMSL2链路建立不起来的情况。我习惯的做法是先确保MAX9296的参考时钟稳定然后释放复位等PLL锁定再给MAX9295上电等它那边的PLL也锁定最后通过I2C配置两边的寄存器。I2C地址方面MAX9295和MAX9296都有可配置的地址引脚默认地址通常是0x80和0x907位地址。如果一条I2C总线上挂多个就要改地址。我建议在原理图阶段就把地址规划好避免后面飞线改地址。5.2 关键寄存器配置示例以下是一个典型的MAX9296配置流程用于双路独立输出模式。注意具体值要根据你的实际链路速率和lane数调整这里只是示意。# 假设I2C地址为0x90 # 1. 软复位 i2cset -y 1 0x90 0x0010 0x01 sleep 0.1 # 2. 配置GMSL2链路速率和模式 i2cset -y 1 0x90 0x0001 0x02 # 使能双路输入 # 3. 配置CSI-2 PHY0为4-lane输出 i2cset -y 1 0x90 0x0330 0x04 # lane数4 i2cset -y 1 0x90 0x0331 0x01 # 连续时钟模式 # 4. 配置CSI-2 PHY1为2-lane输出 i2cset -y 1 0x90 0x0340 0x02 # lane数2 i2cset -y 1 0x90 0x0341 0x01 # 连续时钟模式 # 5. 配置虚拟通道 i2cset -y 1 0x90 0x0332 0x00 # PHY0 VC0 i2cset -y 1 0x90 0x0342 0x01 # PHY1 VC1 # 6. 使能输出 i2cset -y 1 0x90 0x0333 0x01 i2cset -y 1 0x90 0x0343 0x01上面这些寄存器地址和值是示意性的实际使用时要对照具体型号的数据手册。我写这段的目的是展示配置的逻辑顺序先复位再配链路再配PHY再配VC最后使能。这个顺序不能乱尤其是PHY配置必须在使能之前完成。5.3 链路建立与状态检查配置完成后怎么确认链路建立成功了MAX9296有几个状态寄存器可以读比如GMSL2的锁定状态、CSI-2的PLL锁定状态、视频流的检测状态。我一般会写一个简单的脚本循环读这些状态寄存器直到所有状态都正常。# 检查GMSL2链路锁定 i2cget -y 1 0x90 0x001A # 检查CSI-2 PLL锁定 i2cget -y 1 0x90 0x0334 # 检查视频流检测 i2cget -y 1 0x90 0x01D0如果GMSL2没锁定先查同轴线或双绞线的连接再查MAX9295那边的配置。如果CSI-2 PLL没锁定查参考时钟和PHY配置。如果视频流没检测到查传感器的输出和MAX9295的输入配置。5.4 实测波形与眼图检查寄存器状态都正常但图像还是有问题的话就得上示波器了。我一般会先抓CSI-2的时钟lane和data lane看有没有信号、幅度对不对、眼图张不张开。GMSL2那边也可以用差分探头看但一般只要链路锁定GMSL2的问题不大。眼图检查主要看几个指标眼高、眼宽、抖动。如果眼图闭合可能是lane速率太高、PCB走线太长、或者终端匹配不对。我遇到过因为PCB走线阻抗不连续导致眼图很差的情况后来改了走线就好了。这个属于硬件问题但软件调试的时候如果能判断出是眼图问题就能少走很多弯路。6. 常见问题与排查技巧实录6.1 出图但花屏或颜色异常这个问题我遇到太多次了。最常见的原因是lane映射错了或者DT配置不对。排查步骤先用MAX9296的内置测试图案彩条输出如果彩条正常说明CSI-2 PHY和lane映射没问题问题在GMSL2链路或者传感器端如果彩条也花那就是PHY配置或者lane映射的问题。彩条测试是MAX9296的一个非常实用的功能通过寄存器可以使能内部测试图案生成器不依赖外部输入就能输出标准彩条。我每次调试新板子第一步就是出彩条确认CSI-2通路没问题然后再接传感器。6.2 丢帧或帧率不稳丢帧通常和带宽有关。先算一下总带宽有没有超再检查GMSL2的链路速率和CSI-2的lane速率是否匹配。如果带宽没问题那可能是时钟模式的问题。试试把非连续时钟改成连续时钟或者反过来。还有一个容易被忽略的点MAX9296的内部FIFO深度。如果两路数据流合并输出而两路的帧率略有差异FIFO可能会溢出或读空。这时候需要调整FIFO的水位线或者启用流控机制。我在一个双路合并的项目里就因为FIFO水位没调好导致每隔几十帧就丢一帧调了水位之后就稳了。6.3 I2C通信失败I2C通信失败的原因很多地址不对、上拉电阻不合适、总线电容太大、时钟速率太高。我一般先用示波器看I2C的波形确认有没有ACK。如果没有ACK先查地址如果有ACK但读写数据不对查寄存器的位定义。MAX9295和MAX9296的I2C接口支持标准和快速模式我一般用400kHz。如果总线上的设备多可以降到100kHz试试。上拉电阻一般用2.2k到4.7k具体看总线电容。6.4 GMSL2链路无法锁定GMSL2链路锁定失败先查物理连接同轴线有没有断、接头有没有松、双绞线的极性有没有反。然后查MAX9295那边的配置链路速率、预加重、均衡器设置。GMSL2的预加重和均衡器对长距离传输很关键如果线缆较长需要适当增加预加重。我遇到过因为线缆太长导致链路不锁定的情况后来在MAX9295里把预加重调高一档就锁定了。这个参数在数据手册里有推荐值但实际使用时要根据线缆长度和类型微调。6.5 常见问题速查表现象可能原因排查方法无图GMSL2未锁定线缆连接、预加重/均衡器查物理连接调预加重无图GMSL2已锁定CSI-2 PHY配置、lane映射出彩条测试查PHY寄存器花屏lane映射、DT配置彩条测试查DT和lane映射丢帧带宽不足、FIFO水位算带宽调FIFO水位颜色异常DT配置、数据打包查DT和打包方式I2C失败地址、上拉、总线电容查波形调上拉和速率7. 一些实战中的经验体会7.1 先出彩条再接传感器这个习惯帮我省了无数时间。新板子到手先不接传感器直接配置MAX9296出彩条用SoC抓一帧。如果彩条正常说明CSI-2通路、lane映射、PHY配置都没问题后面出问题就只可能在GMSL2链路或传感器端。如果彩条都不正常那就专心调CSI-2这边不用考虑传感器。这个分而治之的思路比一上来就全链路联调高效得多。7.2 寄存器配置要版本管理MAX9295和MAX9296的寄存器很多不同项目、不同传感器、不同分辨率配置都不一样。我建议把每个项目的寄存器配置写成脚本或者配置文件用Git管理起来。这样下次遇到类似项目可以直接复用不用从头翻数据手册。我自己维护了一个配置库按传感器型号和分辨率分类需要的时候直接拿效率高很多。7.3 示波器和协议分析仪是必备调CSI-2和GMSL2光靠读寄存器是不够的。示波器看眼图和信号质量协议分析仪抓CSI-2的包看VC和DT这两个工具能帮你快速定位问题。尤其是协议分析仪能看到SoC实际收到了什么数据比在SoC端打印log直观多了。7.4 温度对高速链路的影响高速链路对温度敏感。我遇到过常温下一切正常高温下就丢帧的情况。后来发现是MAX9296的PHY在高温下眼图变差调整了预加重和均衡器参数后才稳定。所以如果你的产品有温度要求一定要在高低温下都测一遍不能只在常温下验证。7.5 数据手册要反复读MAX9295和MAX9296的数据手册很厚但每次读都会有新收获。尤其是PHY模式和数据通路那几章第一遍可能看不懂但结合实际问题再读就能理解那些配置位的含义。我建议把数据手册里和PHY、数据通路相关的寄存器列表打印出来调试的时候放在手边随时对照。这个内容后续还可以这样扩展比如具体到某一款传感器的配置实例或者针对某一种SoC的CSI-2接收器做适配说明再或者把四种PHY模式的功耗和延迟做一个对比测试。这些方向我后面有机会再单独整理。
返回列表