ARTICLE DETAIL

资讯详情

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

MIPI CSI-2转双路LVDS实战:LT9211C硬件设计与调试全流程

MIPI CSI-2转双路LVDS实战:LT9211C硬件设计与调试全流程 1. 这块板子到底要干什么需求拆解与方案选型1.1 从一个真实场景说起做嵌入式视频链路的朋友大概率都遇到过这种局面主控平台只吐 MIPI CSI-2而手头的屏或者后端采集板偏偏只认 LVDS。中间不加点东西两边根本对不上话。LT9211C 就是在这种夹缝里被大量使用的芯片——它能把 MIPI CSI-2 的输入转成单路或双路 LVDS 输出而且支持的分辨率和时钟范围覆盖了从 720p 到 4K 这一大段主流需求。我这次要搭的是一块视频处理板核心任务很明确MIPI CSI-2 进双 LVDS 出。所谓双 LVDS指的是把一路高分辨率画面拆成两个 LVDS 通道并行输出每个通道负责一半的像素数据这样单通道的像素时钟压力就降下来了。比如 1920x108060Hz 这种量级如果硬塞进单路 LVDS时钟会顶到很高走线和 EMI 都很难受拆成双路之后每路的时钟直接减半布线余量和信号完整性都好做很多。这块板子适合谁参考三类人一是第一次接触 LT9211C、想快速把链路点亮的硬件工程师二是需要给现有平台补一路 LVDS 输出的嵌入式软件工程师三是做视频采集、工业显示、车载显示这类项目需要评估 MIPI 转 LVDS 方案可行性的方案工程师。不管你是哪一类下面这套从零搭建加调试的流程都能直接抄。1.2 为什么选 LT9211C 而不是别的方案市面上做 MIPI 转 LVDS 的路子其实不少常见的有几类专用桥接芯片、FPGA 软核方案、以及带 MIPI 和 LVDS 双接口的 SoC 直出。我选 LT9211C 的理由很实在集成度高芯片内部把 MIPI D-PHY 接收、像素格式转换、LVDS 发送都做进去了外围只需要供电、晶振、少量配置电阻和去耦电容BOM 很干净。配置简单通过 I2C 配置寄存器不需要写复杂的固件逻辑上电初始化一串寄存器就能跑起来。双 LVDS 支持原生支持双通道 LVDS 输出正好对上我的需求不用外挂拆分逻辑。成本可控相比 FPGA 方案芯片单价和开发周期都低一个量级。FPGA 方案当然更灵活LVDS 收发、时序调整都能自己掌控但代价是开发工作量大、功耗高、BOM 贵。对于就是把 MIPI 转成 LVDS这种确定性需求用 FPGA 属于杀鸡用牛刀。SoC 直出方案则受限于主控本身是否带 LVDS 控制器很多平台并没有所以也不通用。提示选型阶段一定要先确认输入 MIPI 的 lane 数和输出 LVDS 的通道数、分辨率、帧率是否在 LT9211C 的规格范围内。芯片不是万能的超出范围再怎么调也点不亮。1.3 整体链路框图和关键参数预估在动手画板之前我习惯先把链路和参数算清楚。这次的目标参数是这样的参数项目标值说明输入接口MIPI CSI-24 lane来自主控或摄像头模组输入分辨率1920x108060Hz主流全高清像素格式RGB88824bit 色深输出接口双路 LVDS每路负责一半像素单路 LVDS 时钟约 74.25MHz由总像素时钟拆分而来配置接口I2C用于寄存器初始化像素时钟的估算很关键。1920x108060Hz加上消隐区总像素时钟大约在 148.5MHz 这个量级。如果单路 LVDS 承载全部像素时钟就是 148.5MHz拆成双路后每路约 74.25MHz。这个数字直接决定了后面 PCB 走线的难度和是否需要加均衡。MIPI 侧的带宽也要核对4 lane、每 lane 速率按 1Gbps 估算总带宽 4Gbps承载 1080p60 的 RGB888 数据约 3Gbps 有效带宽是够的留有一定余量。如果分辨率再往上走就要重新核算 lane 速率和 LVDS 时钟必要时增加 lane 数或调整拆分策略。2. 硬件设计要点从原理图到 PCB 的坑2.1 供电与去耦别小看这几颗电容LT9211C 一般需要几路供电核心电压、IO 电压、以及 MIPI/LVDS 的模拟供电。具体电压值以数据手册为准我这里不照搬手册重点讲设计思路。核心电压的电流不大但对纹波敏感尤其是 MIPI 接收端电源噪声会直接反映到眼图上。我的做法是每路供电都放一颗 1uF 加一颗 0.1uF 的陶瓷电容紧贴引脚再在电源入口放一颗 10uF 做储能。去耦电容的接地过孔要短最好每个焊盘单独打过孔到地平面不要几个电容共用一条细地线。模拟供电部分如果条件允许用一颗低噪声 LDO 单独供别和数字电源混在一起。我踩过的坑是早期版本图省事模拟和数字共用一路 DCDC结果 LVDS 输出眼图抖动明显后来换成 LDO 单独供眼图立刻干净了。注意去耦电容的容值不是越大越好。大容值电容的等效串联电感反而会在高频段失效所以一定是大容值储能 小容值高频去耦搭配使用。2.2 MIPI 差分对布线等长、阻抗、参考平面MIPI CSI-2 是高速差分信号布线有几条铁律差分阻抗控制在 100 欧姆差分单端约 50 欧姆。这个要和 PCB 厂确认叠层用阻抗计算工具算好线宽线距。对内等长一对差分线之间的长度差要尽量小一般控制在 5mil 以内否则会引入共模噪声影响眼图。对间等长多 lane 之间也要做等长偏差控制在几十 mil 量级保证数据采样对齐。参考平面完整差分线下方要有完整的地平面不要跨分割否则回流路径断裂信号质量急剧下降。我一般会把 MIPI 走线尽量走内层上下都有地平面夹着屏蔽效果好。如果必须走表层那走线要短且两侧包地。2.3 LVDS 输出布线双路拆分后的对称性LVDS 输出这边因为是双路所以两路之间的对称性特别重要。如果两路走线长度差太多两半画面的时序就对不齐拼接时会出现错位或撕裂。我的做法是两路 LVDS 从芯片出来后就尽量保持对称走线长度差控制在 100mil 以内差分对内等长同样控制在 5mil 以内。LVDS 的差分阻抗也是 100 欧姆和 MIPI 一致叠层设计可以统一。LVDS 的差分线高值和低值本质上就是差分对两根线上的电压摆幅。LVDS 标准里差分摆幅典型值在 350mV 左右共模电压约 1.2V。这个摆幅不大所以抗干扰靠的是差分对的紧耦合和良好的参考平面而不是靠电压幅度。布线时两根线要紧紧挨着走间距保持一致不要中途分开又合拢。2.4 晶振与复位电路LT9211C 需要一个参考晶振频率按手册选。晶振要靠近芯片放置走线短而直下方挖空或铺地隔离避免被其他信号干扰。负载电容按晶振规格配别凭感觉放。复位电路我习惯加一个 RC 延时加手动复位按键保证上电时芯片能可靠复位。复位信号走线也要短远离高速信号。3. 上电调试全流程从 I2C 握手到画面点亮3.1 调试前的准备工作动手之前把工具备齐串口调试助手用来打印主控的调试日志观察初始化流程。sscom 这类工具就够用配置好波特率、数据位、停止位。I2C 调试工具可以是主控上的 i2c-tools也可以是独立的 USB 转 I2C 模块。用来读写 LT9211C 的寄存器。示波器带宽要够至少能看 LVDS 的时钟和差分信号。有条件的话用差分探头。万用表先量各路供电是否正常再谈其他。逻辑分析仪抓 I2C 时序确认寄存器写入是否正确。软件侧如果主控是 Linux 平台比如 RK 系列需要确认 I2C 控制器驱动正常设备树里挂上 LT9211C 的节点。如果是裸机或 RTOS就自己写 I2C 读写函数。3.2 第一步确认供电和时钟上电后先别急着配寄存器按顺序来用万用表量每一路供电电压确认在规格范围内纹波用示波器看控制在几十毫伏以内。量晶振是否起振频率是否准确。晶振不起振后面全是白搭。量复位引脚确认上电后能正常拉高。这一步看着简单但我见过太多人跳过直接配寄存器结果查了半天发现是供电没到位。3.3 第二步I2C 通信握手供电和时钟正常后用 I2C 工具去读 LT9211C 的芯片 ID 寄存器。能读到正确的 ID说明 I2C 链路通了。如果读不到排查顺序是I2C 地址对不对7 位地址和 8 位地址别搞混。上拉电阻有没有阻值是否合适一般 2.2K 到 4.7K。SDA/SCL 有没有接反有没有被其他器件拉死。用逻辑分析仪抓波形看是否有 ACK。我遇到过一次读不到 ID最后发现是 I2C 总线上挂了另一个器件地址冲突把那个器件先摘掉就好了。3.4 第三步寄存器初始化序列LT9211C 的初始化是一长串寄存器写入顺序不能乱。大致分几块MIPI 接收配置设置 lane 数、lane 速率、数据格式。像素格式转换配置输入输出格式比如 RGB888 进、LVDS 出。LVDS 输出配置设置双路拆分方式、通道映射、时钟极性。时钟配置配置 PLL产生 LVDS 所需的像素时钟。下面是一段示意性的初始化代码结构具体寄存器值以手册和实际调试为准// 伪代码展示初始化流程结构 void lt9211c_init(void) { // 1. 软复位 i2c_write(LT9211C_ADDR, REG_RESET, 0x01); delay_ms(10); // 2. 配置 MIPI 接收4 lane, RGB888 i2c_write(LT9211C_ADDR, REG_MIPI_LANE, 0x03); i2c_write(LT9211C_ADDR, REG_MIPI_FORMAT, 0x0A); // 3. 配置 LVDS 双路输出 i2c_write(LT9211C_ADDR, REG_LVDS_MODE, 0x02); i2c_write(LT9211C_ADDR, REG_LVDS_MAP, 0x1B); // 4. 配置 PLL 时钟 i2c_write(LT9211C_ADDR, REG_PLL_CTRL, 0x40); i2c_write(LT9211C_ADDR, REG_PLL_DIV, 0x08); // 5. 使能输出 i2c_write(LT9211C_ADDR, REG_OUTPUT_EN, 0x01); }提示初始化序列里每一步之间最好加适当延时尤其是复位和 PLL 锁定需要给芯片时间稳定。延时不够会导致偶发点不亮。3.5 第四步观察 LVDS 输出寄存器配完后用示波器量 LVDS 输出。先看时钟有没有频率对不对再看数据线有没有翻转。如果时钟有但数据不动多半是输入侧没数据进来或者格式配置不对。如果主控侧有画面输出这时候屏上应该能看到图像了。第一次点亮往往不会完美可能是花屏、偏色、或者只有一半画面。这些都属于正常接下来就是针对性排查。4. 常见问题排查与避坑经验4.1 花屏、偏色、画面撕裂怎么查这是调试中最常见的三类现象我整理成一张速查表现象可能原因排查方向全屏花屏像素格式不匹配核对输入输出格式配置偏色通道映射错误检查 LVDS 通道与 RGB 对应关系只有一半画面双路拆分配置错确认两路 LVDS 是否都使能画面撕裂两路时序不同步检查两路走线对称性和时钟相位间歇性闪烁时钟不稳或电源噪声量 PLL 输出和电源纹波花屏最常见的原因是像素格式对不上。比如输入是 RGB888输出却配成了 RGB666颜色就会错乱。偏色则多半是通道映射问题LVDS 的 R/G/B 通道和实际像素的对应关系配错了红色跑到蓝色通道上去了。画面撕裂是双路方案特有的问题。两路 LVDS 如果时序没对齐拼接处就会错位。这时候要重点检查两路的时钟相位配置和 PCB 走线对称性。4.2 I2C 配置写不进去怎么办有时候明明 I2C 能读到 ID但写寄存器没反应。几种可能寄存器有写保护有些寄存器需要先解锁才能写手册里会说明。写后需要触发部分配置写完要写一个更新寄存器才生效。时序问题写太快芯片没来得及处理加延时试试。地址页切换寄存器地址空间分页写之前要切到正确的页。我的经验是遇到写不进去先用逻辑分析仪抓一次完整的写时序确认数据真的发出去了再怀疑芯片侧。4.3 时钟相关的疑难杂症时钟问题最隐蔽。表现可能是画面偶尔闪一下、或者特定分辨率下才出问题。排查思路量 PLL 输出频率和理论值对比偏差大说明分频配置错。量 LVDS 时钟的抖动抖动大说明电源或参考晶振有问题。换不同分辨率测试看是否和像素时钟边界有关。我踩过一个坑某个分辨率下画面总是偶尔抖一下查了很久发现是 PLL 的分频比在那个频点刚好落在不稳定区换一个分频组合就稳了。所以 PLL 配置不要只算一个理论值要留备选方案。4.4 实操心得几条先通链路再调画质别一上来就追求完美画面先让链路通起来能出图再优化。善用日志把每一步配置和读回的值都打印到串口出问题时对照日志能快速定位。保留可回退版本寄存器配置改来改去一定要记录每次改动不然改乱了回不去。多量少猜能用示波器量的就别靠猜硬件调试最忌讳想当然。5. 软件侧适配Linux 平台下的对接思路5.1 设备树节点配置如果主控跑 LinuxLT9211C 通常作为一个 I2C 从设备挂在总线上。设备树里要描述它的 I2C 地址、复位引脚、供电等。大致结构如下i2c3 { status okay; lt9211c: lt9211c2d { compatible vendor,lt9211c; reg 0x2d; reset-gpios gpio1 12 GPIO_ACTIVE_LOW; power-supply vcc_1v8; status okay; }; };地址 0x2d 是示意实际以硬件设计为准。复位引脚和供电要对应原理图。5.2 驱动初始化时机驱动的 probe 函数里做初始化但要注意时机MIPI 输入侧的数据源比如摄像头或主控的显示控制器要先准备好否则 LT9211C 配好了也没数据进来。我一般会在驱动里加一个状态机等输入侧 ready 之后再触发 LT9211C 的初始化。5.3 调试手段Linux 下调试有几个好用的手段i2c-toolsi2cdetect 扫地址i2cget/i2cset 读写寄存器非常方便。debugfs如果驱动里加了 debugfs 节点可以动态读写寄存器。内核日志dmesg 看驱动加载和初始化日志。adb 无线调试在板子不方便接串口时很好用前提是网络通了。网络调试助手配合 UDP 也能做远程日志回传适合板子装在设备里不好拆的场景。6. 方案延展与后续优化方向这套 MIPI 转双 LVDS 的方案跑通之后其实还能往几个方向扩展。一是提高分辨率比如上到 4K这时候要重新核算 MIPI lane 速率和 LVDS 时钟可能要把 lane 数加到 4 以上或者调整拆分策略。二是增加多路输出如果后端需要驱动多个屏可以考虑级联或多芯片方案。三是加入动态配置能力通过 I2C 在运行时切换分辨率和格式适应不同场景。我个人在实际操作中的体会是这类桥接芯片的调试八成的坑都在硬件侧——供电、时钟、布线剩下两成才是寄存器配置。所以每次点不亮先回头量硬件比盯着寄存器手册翻要高效得多。另外把每次调试的寄存器配置和现象记录下来形成自己的配方库下次遇到类似项目能省大量时间。最后分享一个小技巧初始化序列里关键的几个寄存器读回值一定要和写入值比对很多时候问题就出在某个寄存器根本没写进去而你以为它写进去了。
返回列表