ARTICLE DETAIL

资讯详情

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

MIPI转LVDS桥接方案:LT9211与N76E003硬件设计与调试实战

MIPI转LVDS桥接方案:LT9211与N76E003硬件设计与调试实战 1. 项目缘起与方案选型为什么是LT9211加N76E0031.1 一个真实的需求场景去年接了个活儿客户手上有一块工控主板主控输出的是MIPI DSI信号但配套的显示屏只有LVDS接口而且屏是双通道8bit的分辨率1920x1080。这种主控出MIPI、屏幕吃LVDS的错配在嵌入式行业里太常见了——主控方案商为了省成本或者赶进度选了MIPI输出屏幕供应商那边现成的LVDS屏又便宜又稳定两边一凑中间就得加一颗桥接芯片。市面上做MIPI转LVDS的芯片不算少常见的有龙迅的LT9211、LT8912B还有东芝、THine的一些型号。我最终选LT9211理由很实在一是它支持MIPI DSI输入到LVDS输出的单向转换最高能跑到1920x1200这个级别够用二是封装是QFN64引脚间距0.5mm手工焊接和返修都还能接受三是它的配置接口是I2C配合一颗便宜的MCU就能完成初始化不需要额外的Flash或者复杂的上电时序控制。至于为什么配新唐的N76E003这颗51内核的MCU便宜到离谱SOP16封装1T指令周期硬件I2C和SPI都有用来给LT9211做上电初始化和模式配置绰绰有余。有些方案会用主控直接通过I2C配置LT9211但那样会占用主控的I2C资源而且主控启动阶段可能还没准备好I2C总线所以独立一颗小MCU做配置是最稳妥的做法。1.2 LT9211的核心能力拆解LT9211这颗芯片本质上是一个协议转换器内部结构可以粗略分成三块MIPI DSI接收端、LVDS发送端、以及中间的像素格式转换和时序重整逻辑。MIPI侧支持1到4条数据lane每条lane最高1Gbps时钟lane独立。LVDS侧支持单通道或双通道输出每通道4对差分数据加1对时钟像素格式支持RGB888、RGB666、RGB565等。这里有个关键点很多人一开始会搞混MIPI DSI的像素格式和LVDS的像素映射不是一一对应的。MIPI DSI传过来的可能是RGB888打包成24bit但LVDS屏可能是双通道8bit的VESA或者JEIDA映射格式。LT9211内部有寄存器可以配置这个映射关系如果配错了屏幕会显示但颜色是乱的或者干脆花屏。1.3 N76E003在方案中的角色定位N76E003在这套方案里干三件事第一上电后按照LT9211的时序要求拉高复位引脚等待芯片内部PLL锁定第二通过I2C总线把LT9211的一堆配置寄存器按顺序写进去包括输入lane数、输出通道数、像素格式、时序参数等第三在系统运行过程中监控LT9211的状态寄存器如果检测到信号丢失或者PLL失锁可以重新初始化。为什么不直接用主控的I2C因为主控的I2C总线通常挂了一堆外设地址冲突的风险不说主控在启动阶段可能还在跑BootloaderI2C驱动还没加载。独立MCU的好处是上电就能跑不依赖主控的状态而且配置逻辑可以固化在MCU的Flash里换主控方案的时候只需要改MCU固件不用动主控那边的代码。注意N76E003的I2C引脚是开漏输出必须外接4.7k到10k的上拉电阻到3.3V。我见过有人忘了加上拉结果I2C波形完全出不来查了半天以为是LT9211坏了。2. 硬件设计核心细节从原理图到PCB布局2.1 电源树设计与去耦电容配置LT9211需要三路电源1.2V核心电压、1.8V或3.3V的IO电压、以及2.5V或3.3V的MIPI和LVDS接口电压。实际项目中我一般用3.3V做主IO1.2V由一颗LDO从3.3V降下来MIPI和LVDS的接口电压也走3.3V这样电源树最简单。去耦电容的配置有讲究。1.2V核心电压的引脚旁边必须放0.1uF加1uF的组合而且要走最短路径到地。MIPI和LVDS的电源引脚各自也要有0.1uF的去耦特别是LVDS的电源因为差分信号对电源噪声很敏感。我一般会在LVDS电源引脚旁边再并一颗10uF的钽电容或者MLCC用来滤低频纹波。有个坑我踩过LT9211的散热焊盘必须接地而且要多打几个过孔到地平面。这颗芯片在跑1920x1080的时候功耗大概在300mW左右QFN封装靠焊盘散热如果焊盘接地不好芯片温度会偏高长时间跑可能不稳定。2.2 MIPI DSI接口的差分线设计要点MIPI DSI的差分线对走线要求比LVDS更严格因为速率更高。以1920x108060fps、RGB888来算像素时钟大概148.5MHzMIPI的每条lane速率在1Gbps左右。差分对的阻抗必须控制在100欧姆误差正负10%以内。走线的时候注意几点第一差分对内的两根线要等长误差控制在5mil以内第二差分对之间的间距要至少3倍线宽减少串扰第三MIPI的时钟lane和数据lane之间的长度差也要控制一般要求不超过50mil第四差分线尽量不要换层如果必须换层要在过孔附近加回流地过孔。我实测过如果MIPI差分线走得太随意示波器上看到的眼图会明显闭合LT9211的PLL可能锁不住表现就是屏幕闪烁或者间歇性黑屏。用示波器抓MIPI时钟信号的时候探头要用差分探头单端探头测出来的波形参考价值有限。2.3 LVDS输出端的匹配与端接LVDS输出这边相对MIPI要宽松一些但也不能马虎。LT9211的LVDS输出是电流型驱动需要在接收端也就是屏幕那边做100欧姆的端接。如果屏幕内部已经集成了端接电阻那就不用管如果没有就得在PCB上靠近连接器的地方放100欧姆的电阻。差分对的阻抗同样要控制在100欧姆。LVDS的差分线高值和低值在示波器上看高值大概在1.4V左右低值在1.0V左右共模电压1.2V。如果测出来高值明显偏低或者低值明显偏高说明端接有问题或者驱动能力不够。双通道LVDS的话两组差分对要分别走等长组内误差5mil组间误差可以放宽到20mil。LVDS的时钟对和数据对之间的长度差也要控制一般不超过100mil。2.4 N76E003最小系统与I2C总线布局N76E003的最小系统很简单3.3V供电、复位电路、以及I2C的上拉电阻。复位电路我用的是10k电阻加0.1uF电容的经典组合复位时间大概1ms左右足够N76E003完成上电复位。I2C总线走线要注意SDA和SCL要尽量平行走长度不要差太多上拉电阻放在靠近MCU的一端。如果总线上挂了多个从设备要确保每个设备的地址不冲突。LT9211的I2C地址是固定的具体值查数据手册一般是0x58或者0x5A取决于ADDR引脚的接法。提示N76E003的I2C硬件模块在初始化的时候时钟频率不要设太高100kHz就够了。LT9211的I2C接口支持400kHz但实际调试的时候用100kHz更稳配置寄存器就那么几十个慢一点无所谓。3. 实操过程从焊接调试到屏幕点亮3.1 焊接与上电前检查QFN64的焊接是个技术活。我一般用热风枪加焊膏的方式风枪温度设到280度左右风速调到最低档先给焊盘上锡然后把芯片放上去用镊子轻轻压住风枪从芯片上方均匀加热。看到焊锡融化后用镊子轻轻推一下芯片如果能自动回弹说明焊接到位了。焊完之后必须用放大镜检查引脚有没有连锡特别是0.5mm间距的引脚连锡的概率不低。用万用表测一下电源引脚对地的阻抗正常应该在几百欧姆以上如果测出来只有几欧姆说明有短路得重新焊。上电前还要检查一遍1.2V、3.3V的电源是否正常复位引脚的电平是否正确I2C的上拉电阻是否焊了。这些检查花不了几分钟但能避免上电烧芯片的风险。3.2 N76E003固件编写与LT9211初始化流程N76E003的固件用Keil C51写主要就是I2C的读写函数和LT9211的寄存器配置表。LT9211的初始化流程大致是这样的// 伪代码示意实际寄存器地址和值需查数据手册 void LT9211_Init(void) { // 1. 复位LT9211 LT9211_Reset_Pin 0; Delay_ms(10); LT9211_Reset_Pin 1; Delay_ms(50); // 等待内部PLL稳定 // 2. 配置MIPI输入 I2C_Write(LT9211_ADDR, 0x01, 0x04); // 4 lane MIPI I2C_Write(LT9211_ADDR, 0x02, 0x01); // RGB888输入 // 3. 配置LVDS输出 I2C_Write(LT9211_ADDR, 0x10, 0x02); // 双通道LVDS I2C_Write(LT9211_ADDR, 0x11, 0x01); // VESA映射 // 4. 配置时序参数 I2C_Write(LT9211_ADDR, 0x20, 0x94); // H active high byte I2C_Write(LT9211_ADDR, 0x21, 0x00); // H active low byte // ... 其他时序参数 // 5. 使能输出 I2C_Write(LT9211_ADDR, 0x00, 0x01); // 启动转换 }实际配置的时候时序参数要根据屏幕的规格书来算。比如1920x1080的屏H active是1920H front porch是88H sync width是44H back porch是148总H周期是2200。这些值要分别写到对应的寄存器里高低字节要拆开。3.3 屏幕点亮与波形实测第一次上电的时候屏幕大概率不会亮这很正常。我的排查顺序是这样的先用示波器测LT9211的MIPI时钟lane看有没有波形频率对不对。如果MIPI时钟都没有说明主控那边没输出或者MIPI线没接好。MIPI时钟正常之后测LVDS的时钟对看有没有差分波形。如果有LVDS时钟但屏幕不亮再测LVDS的数据对看有没有数据翻转。如果数据对没有翻转说明LT9211没有正确接收到MIPI数据可能是lane数配错了或者MIPI的时序参数不对。我遇到过一种情况MIPI时钟和数据都有LVDS时钟也有但屏幕就是黑屏。后来查出来是LVDS的映射格式配错了屏幕其实收到了信号但因为映射不对显示的内容超出了屏幕的可见区域。改成正确的映射格式之后屏幕就亮了。3.4 参数计算与寄存器配置实例以1920x108060Hz为例像素时钟的计算是这样的总H周期2200乘以总V周期1125乘以60Hz等于148.5MHz。MIPI的每条lane速率是像素时钟乘以像素位深除以lane数RGB888是24bit4条lane的话每条lane速率是148.5M乘以24除以4等于891Mbps在LT9211的1Gbps上限之内。LVDS的时钟频率是像素时钟乘以7因为LVDS是7倍频传输。单通道LVDS的话时钟是148.5M乘以7等于1.04GHz这个频率太高了单通道扛不住所以必须用双通道。双通道的话每个通道的时钟是像素时钟乘以3.5等于520MHz在LVDS的合理范围内。这些计算看着简单但实际配置的时候容易搞错。我建议把计算过程写在纸上每个参数都核对一遍特别是H和V的porch参数搞反了或者算错了屏幕就是点不亮。4. 常见问题与排查技巧实录4.1 屏幕不亮或间歇性黑屏这是最常见的问题原因可能有很多。我的排查思路是先确认MIPI信号有没有再确认LVDS信号有没有最后确认配置对不对。MIPI信号用示波器测时钟lane正常应该有几百毫伏的差分波形。如果没有检查主控的MIPI输出是否使能MIPI线有没有接反。LVDS信号测时钟对正常应该有1.2V共模电压的差分波形。如果没有检查LT9211的配置寄存器是否写进去了I2C通信是否正常。间歇性黑屏通常是PLL失锁或者信号质量不好。PLL失锁的话检查MIPI的参考时钟是否稳定LT9211的复位时序是否正确。信号质量不好的话检查差分线的阻抗和端接。4.2 颜色异常或花屏颜色异常一般是像素格式或者映射格式配错了。MIPI的输入格式要和主控的输出格式一致LVDS的输出映射要和屏幕的规格一致。如果颜色整体偏红或者偏蓝说明RGB的顺序搞错了。如果颜色是乱的说明映射格式不对。花屏的话可能是时序参数不对或者LVDS的通道数配错了。双通道的屏配成单通道或者单通道的屏配成双通道都会花屏。还有一种可能是LVDS的差分线有一对没接好导致部分数据丢失。4.3 I2C通信失败I2C通信失败的原因通常是上拉电阻没焊、地址搞错、或者时序不对。先用示波器测SDA和SCL的波形看有没有上拉。如果没有上拉波形会一直是低电平。如果有上拉但通信还是失败检查从设备地址是否正确LT9211的地址由ADDR引脚决定接高接低地址不一样。N76E003的I2C模块有个坑在发送起始条件之前要先确保总线是空闲的。如果上一次通信异常终止总线可能被拉低这时候需要手动发送几个时钟脉冲来释放总线。4.4 常见问题速查表现象可能原因排查方法解决方法屏幕完全不亮MIPI无信号示波器测MIPI时钟检查主控输出和连线屏幕完全不亮LVDS无信号示波器测LVDS时钟检查I2C配置和LT9211复位间歇性黑屏PLL失锁测MIPI参考时钟检查复位时序和电源颜色偏红/偏蓝RGB顺序错对比规格书修改映射寄存器花屏时序参数错核对H/V参数重新计算并写入花屏通道数错确认屏幕规格修改LVDS通道配置I2C失败无上拉测SDA/SCL波形加4.7k上拉电阻I2C失败地址错查数据手册修改ADDR引脚接法提示调试的时候建议把LT9211的所有配置寄存器读出来和预期值对比。很多时候问题就出在某个寄存器写错了或者没写进去。4.5 几个容易被忽略的细节第一个是LT9211的复位引脚。这颗芯片的复位是低电平有效复位脉冲宽度至少要10ms。我见过有人复位脉冲只给了1ms结果芯片没复位成功配置全乱。第二个是MIPI的lane顺序。LT9211的lane0到lane3是有固定顺序的不能随便换。如果PCB走线的时候把lane顺序搞反了要么改板要么在配置寄存器里调整lane映射。第三个是LVDS的差分对极性。LVDS的P和N如果接反了屏幕可能不亮或者显示异常。有些屏幕支持极性自动检测有些不支持。保险起见PCB走线的时候严格按照规格书来。第四个是电源的上电顺序。LT9211要求1.2V核心电压先上然后才是3.3V的IO电压。如果顺序反了芯片可能进入异常状态。我一般用一颗带使能引脚的LDO来控制1.2V的上电时序确保顺序正确。5. 调试工具与实测经验分享5.1 必备的调试工具清单调试这套方案示波器是必须的而且最好是带宽1GHz以上的因为MIPI的速率到了1Gbps低带宽的示波器测出来的波形失真严重。差分探头也是必须的单端探头测差分信号只能看个大概。I2C调试的话逻辑分析仪很好用可以抓完整的I2C时序看每个寄存器的读写值。如果没有逻辑分析仪用示波器双通道同时测SDA和SCL也能凑合看。万用表用来测电源和阻抗这个不用多说。另外建议备一个热风枪和放大镜QFN封装的返修离不开这两样。5.2 实测波形分析MIPI时钟信号在示波器上的波形正常应该是差分对高值和低值对称共模电压在200mV左右。如果波形不对称说明差分线的阻抗不匹配或者端接有问题。LVDS的差分波形高值在1.4V左右低值在1.0V左右共模电压1.2V。如果高值明显偏低说明驱动能力不够可能是LT9211的配置寄存器里驱动电流设小了。如果低值明显偏高说明端接电阻偏大或者没接。I2C的波形SDA和SCL在空闲时都是高电平起始条件是SCL高的时候SDA从高变低停止条件是SCL高的时候SDA从低变高。如果波形上看到毛刺或者振铃说明上拉电阻偏小或者走线太长。5.3 一个完整的调试记录拿最近做的一个项目来说1920x1080的双通道LVDS屏主控输出4 lane MIPI。第一次上电屏幕不亮。示波器测MIPI时钟有波形频率891MHz正常。测LVDS时钟没有波形。说明LT9211没有输出。检查I2C通信用逻辑分析仪抓波形发现N76E003发送的从设备地址是0x58但LT9211实际地址是0x5A。原来ADDR引脚接错了改过来之后重新上电LVDS时钟出来了但屏幕还是黑屏。再查配置寄存器发现LVDS的映射格式写的是JEIDA但屏幕规格书要求的是VESA。改成VESA之后屏幕亮了但颜色偏红。继续查发现MIPI的输入格式写的是RGB565但主控输出的是RGB888。改成RGB888之后颜色正常了。整个过程花了大概两个小时大部分时间都在查寄存器和对比规格书。所以我的经验是调试的时候一定要把规格书放在手边每个参数都核对一遍不要凭感觉猜。5.4 性能优化与稳定性验证屏幕点亮之后还要做稳定性验证。我一般会跑24小时的老化测试观察屏幕有没有闪烁、黑屏、花屏。同时用示波器监控LT9211的电源纹波和温度确保在合理范围内。如果发现长时间跑之后屏幕开始闪烁通常是散热问题。LT9211的散热焊盘如果接地不好芯片温度会升高导致PLL失锁。解决办法是加强散热或者在软件里加温度监控温度过高的时候降低刷新率。EMC测试也是必须的。MIPI和LVDS都是高速差分信号辐射不小。如果EMC测试不过可以在差分线上加共模电感或者在PCB上增加屏蔽。我一般会在LVDS的连接器附近加一颗共模电感效果很明显。6. 方案扩展与替代选型思考6.1 从MIPI转LVDS到其他协议转换LT9211这套方案跑通之后其实可以扩展到其他协议转换。比如MIPI转RGB、MIPI转HDMI、或者LVDS转MIPI。龙迅的芯片系列里有很多型号LT9211只是其中一颗。选型的时候主要看输入输出协议、分辨率上限、封装、以及配置接口。如果主控输出的是MIPI CSI而不是DSI那就不能直接用LT9211得选支持CSI输入的型号。CSI和DSI虽然都是MIPI但协议层不一样DSI是显示串行接口CSI是摄像头串行接口不能混用。6.2 用FPGA替代专用桥接芯片有些项目对灵活性要求高比如需要做图像处理或者多屏拼接这时候可以用FPGA来实现MIPI到LVDS的转换。FPGA的LVDS接收和发送都有现成的IP核MIPI的DSI接收也有IP核可以用。好处是灵活坏处是成本高、开发周期长、功耗大。我试过用FPGA做LVDS测试用SelectIO资源直接收发LVDS差分信号跑个几百兆没问题。但MIPI DSI的协议解析比较复杂用FPGA做的话工作量不小除非有现成的IP核。6.3 主控直接输出LVDS的方案如果主控本身支持LVDS输出那就不需要桥接芯片了。比如RK3566、RK3568这些主控有的型号直接带LVDS接口点LVDS屏很方便。选主控的时候如果知道屏幕是LVDS的优先选带LVDS输出的主控能省掉桥接芯片和配套的MCU成本和调试工作量都降不少。但现实情况是很多时候主控是客户指定的屏幕也是客户指定的中间不匹配就只能加桥接。所以这套LT9211加N76E003的方案虽然看起来有点绕但确实是很多项目里的刚需。6.4 软件层面的适配考虑Linux系统下适配MIPI转LVDS主要是在设备树里配置显示管道的参数。LT9211对主控来说是透明的主控只管输出MIPI DSILT9211负责转换成LVDS。所以设备树里配置的是MIPI DSI的输出参数包括分辨率、时序、lane数等。如果屏幕是竖屏但需要横屏显示可以在设备树里配置旋转参数或者在应用层做旋转。LT9211本身不支持旋转它只是透传像素数据。所以竖屏改横屏要么在显示控制器里做要么在GPU里做LT9211这边不用动。Android系统下适配也类似主要是配置显示相关的HAL层参数。RK3567或者RK3566这些平台Android的显示框架已经比较成熟配置好设备树之后剩下的就是调试LT9211的初始化时序。我个人在实际操作中的体会是这套方案的核心难点不在硬件设计而在调试。硬件设计只要按照规格书来差分线走好电源处理好基本不会有大问题。调试的时候要有耐心一个寄存器一个寄存器地查一个波形一个波形地测问题总能找到。最怕的是凭感觉猜猜来猜去浪费时间。另外规格书一定要看原版的网上的翻译版本经常有错特别是寄存器描述那块错一个bit可能就是天壤之别。
返回列表