ARTICLE DETAIL

资讯详情

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

RGB转MIPI桥接芯片LT8918调试实战:从硬件排查到寄存器配置

RGB转MIPI桥接芯片LT8918调试实战:从硬件排查到寄存器配置 RGB转MIPI这个需求在嵌入式显示开发里出现的频率比很多人想象的要高。手头有一块RK3568或者全志的板子CPU端输出的是RGB888并行信号但手上拿到的屏却是MIPI DSI接口的这时候要么换屏要么加一颗桥接芯片。换屏成本高、周期长加桥接芯片才是更务实的做法。LT8918就是在这个场景下进入视野的——它能把RGB并行信号转成MIPI DSI输出单通道最高能跑到1.5Gbps每lane覆盖1080P甚至更高的分辨率需求。但问题在于LT8918的调试并不像datasheet看起来那么简单。硬件上I2C地址、复位时序、时钟走线都有讲究软件上寄存器配置顺序错了就直接黑屏而且黑屏之后你很难判断到底是硬件没焊好还是寄存器写错了。我前后调过三块不同方案的LT8918板子踩过的坑从I2C不通到画面偏移、从时钟抖动到色彩异常基本把能遇到的问题都经历了一遍。这篇文章就把整个流程拆开从硬件检查到寄存器配置再到实测验证一步步说清楚。1. 先搞清楚LT8918到底在系统里扮演什么角色1.1 RGB与MIPI DSI的本质差异RGB接口是并行总线除了像素时钟PCLK之外还有HSYNC、VSYNC、DE以及24根数据线RGB888各8位。它的特点是时序直接、控制简单但线多、抗干扰能力弱、传输距离短。MIPI DSI则是高速串行差分接口用一对时钟lane加一到四对数据lane就能传输视频流线少、速率高、适合移动设备。LT8918做的事情本质上是一个协议翻译器。它接收RGB接口的并行像素数据按照MIPI DSI的协议打包成数据包再通过高速差分对发送出去。对CPU来说它看到的还是一块普通的RGB屏对MIPI屏来说它收到的是标准的DSI信号。中间这个转换过程完全由LT8918内部完成不需要CPU端做任何协议适配。这里有一个容易混淆的点LT8918输出的是MIPI DSI信号不是CSI。DSI是显示接口CSI是摄像头接口两者虽然物理层相似但协议层完全不同。买屏的时候一定要确认是DSI接口的屏否则接上去不会有任何显示。1.2 什么场景下值得用LT8918不是所有RGB转MIPI的需求都适合用LT8918。如果你的分辨率在1280x800以下其实可以考虑一些更便宜的方案比如用FPGA做简单的协议转换或者直接选一颗带MIPI输出的主控。LT8918的优势区间在1080P及以上尤其是需要单通道MIPI且对成本敏感的场景。具体来说以下几种情况用LT8918比较合适主控只有RGB输出但屏是MIPI DSI接口需要把现有的RGB方案快速升级到MIPI屏而不想换主控产品对BOM成本敏感不想用FPGA方案。反过来说如果主控本身就有MIPI DSI输出那完全没必要加这颗芯片。还有一点值得注意LT8918需要外部提供参考时钟通常是24MHz或27MHz的晶振。这个时钟的精度直接影响MIPI输出的抖动性能后面会详细说。1.3 典型系统框图与信号流向一个完整的LT8918应用系统包含以下几个部分主控端输出RGB888信号加时序控制信号到LT8918的RGB输入端口LT8918的I2C接口连接到主控的I2C总线用于寄存器配置LT8918的MIPI DSI输出连接到MIPI屏的输入连接器此外还有复位信号、参考时钟、电源等辅助信号。信号流向很清晰RGB并行数据进入经过内部FIFO缓冲和协议打包从MIPI差分对输出。但实际调试时每一个环节都可能出问题。RGB端的时序参数配错了LT8918可能采不到正确的数据I2C没通寄存器写不进去MIPI端的lane映射反了屏就完全不亮。2. 硬件调试阶段那些让你怀疑人生的细节2.1 上电前的静态检查清单在给板子通电之前有几项检查必须做否则很可能一上电就烧芯片或者根本找不到问题。首先是电源检查LT8918通常需要1.2V核心电压、1.8V或3.3V的IO电压以及MIPI PHY的1.2V供电。用万用表量一下每个电源引脚对地的阻抗确认没有短路。特别要注意1.2V核心电压和1.2V PHY电压是否是分开的LDO供电如果是合在一起的要确认LDO的电流能力足够。然后是I2C地址确认。LT8918的I2C地址由硬件引脚决定通常是0x48或0x497位地址。查一下原理图上ADDR引脚的上拉或下拉电阻确认实际地址。我遇到过一块板子原理图上标的是0x48但实际焊接时ADDR引脚虚焊导致地址变成了0x49I2C怎么都扫不到设备。复位引脚也要检查。LT8918的RESET_N是低电平复位确认上电时这个引脚有从低到高的跳变。有些设计直接用RC电路做复位如果电容值选得太大复位时间不够芯片可能没完成初始化就开始接收I2C命令了。2.2 I2C通信不上时的排查链路I2C不通是最常见的问题排查起来也有固定的套路。第一步用示波器看SCL和SDA线上有没有波形。如果完全没有波形说明主控端的I2C控制器没工作或者引脚复用没配对。如果SCL有波形但SDA一直是高电平说明从设备没有应答可能是地址不对或者芯片没上电。第二步确认上拉电阻。I2C总线的上拉电阻通常在2.2K到10K之间具体值取决于总线电容和速率。如果上拉电阻太大上升沿会变缓高速通信时可能采不到数据。我一般用4.7K大部分场景都能覆盖。第三步用I2C扫描工具确认设备地址。Linux下可以用i2cdetect裸机环境可以自己写一个简单的扫描程序。如果扫到了地址但读写寄存器失败那可能是寄存器地址位宽的问题。LT8918的寄存器地址是16位的需要先发高字节再发低字节有些I2C控制器默认只发8位地址需要特别配置。注意LT8918的I2C写操作格式是设备地址写标志、寄存器地址高字节、寄存器地址低字节、数据。读操作需要先写寄存器地址再发重复起始条件加读标志。这个格式如果搞错了读出来的数据全是0xFF。2.3 参考时钟与复位时序的实测波形分析参考时钟是LT8918工作的基础。我用示波器测过好几块板子的24MHz晶振大部分都没问题但有一块板子的晶振起振时间特别长上电后要等将近10ms才稳定。如果复位信号在晶振稳定之前就释放了芯片内部状态机可能进入异常状态。复位时序的要求是参考时钟稳定后RESET_N至少保持低电平1ms然后拉高。拉高之后要等至少10ms才能开始I2C配置。这个时间窗口在datasheet里有写但很多人会忽略。我一般会在代码里加一个20ms的延时确保芯片完全就绪。另外MIPI输出端的差分对走线也要注意。虽然是硬件设计阶段的事情但调试时如果发现MIPI信号质量差可以检查一下差分对的等长和阻抗。差分对内两根线的长度差控制在5mil以内差分阻抗100欧姆。如果走线不满足这些条件高速率下眼图会闭合。3. 寄存器配置顺序比内容更重要3.1 LT8918寄存器空间概览LT8918的寄存器空间分为几个区域全局控制寄存器、RGB输入配置寄存器、MIPI输出配置寄存器、时钟管理寄存器、以及一些状态指示寄存器。每个区域都有特定的配置顺序要求不能随意打乱。全局控制寄存器主要负责软复位、电源管理、中断使能等。RGB输入配置寄存器设置输入时序参数包括HSYNC/VSYNC极性、DE模式、像素时钟边沿等。MIPI输出配置寄存器设置lane数量、速率、视频模式参数。时钟管理寄存器配置内部PLL决定MIPI的比特时钟。这里有一个关键点LT8918内部有一个PLL它把参考时钟倍频到MIPI需要的比特时钟。比如参考时钟24MHzMIPI速率要跑到1Gbps每lane那PLL就要输出500MHz的时钟DDR模式下1Gbps对应500MHz。PLL的配置参数需要根据参考时钟频率和目标速率来计算不能随便填。3.2 上电初始化序列的逐步拆解上电后的初始化序列我一般分成四步。第一步是软复位往全局控制寄存器的复位位写1再写0让芯片回到已知状态。第二步配置时钟管理寄存器设置PLL参数然后等待PLL锁定。PLL锁定状态可以从状态寄存器里读出来一定要等到锁定后再继续。第三步配置RGB输入参数。这里需要根据实际输入的时序来填包括H总周期、H有效像素、H前肩、H后肩、V总周期、V有效行数、V前肩、V后肩。这些参数如果填错了轻则画面偏移重则完全黑屏。我一般会先用一个标准参数比如1080P60把链路跑通再改成实际需要的分辨率。第四步配置MIPI输出参数。设置lane数量1到4 lane、视频模式burst mode还是non-burst mode、以及MIPI的时序参数。non-burst mode对时序要求更严格但兼容性更好burst mode对时序容忍度高但有些屏不支持。提示每次修改分辨率或时钟参数后建议先做一次软复位再重新配置避免残留状态影响新配置。3.3 关键寄存器参数的计算方法PLL参数的计算是寄存器配置里最需要动脑子的部分。LT8918的PLL结构通常是参考时钟先分频到一个比较频率比如1MHz然后倍频到目标频率再分频输出。具体公式在datasheet里有但实际计算时要注意取整误差。举个例子参考时钟24MHz目标MIPI比特时钟500MHz。假设PLL的比较频率选1MHz那么参考分频比是24。倍频比是500输出分频比是1。所以寄存器里要填参考分频24-123倍频500-1499输出分频1-10。这些值填进去之后实际输出频率是24/24*500/1500MHz正好。但如果参考时钟是27MHz比较频率还是1MHz参考分频比就是27倍频比还是500输出分频比是1。实际输出是27/27*500/1500MHz。看起来一样但27不能被1整除吗可以27/271没问题。但如果参考时钟是25MHz比较频率选1MHz参考分频比是25倍频比500输出500MHz也没问题。问题出在参考时钟不是整数MHz的时候比如24.576MHz。这时候比较频率就不能选1MHz了得选一个能整除的值比如1.024MHz24.576/241.024。然后倍频比要重新算500/1.024488.28125不是整数。这时候就要调整比较频率或者接受一定的频率误差。MIPI协议对时钟精度的要求是正负300ppm以内所以误差不能太大。3.4 常见配置错误与现象对照表错误类型典型现象排查方法PLL未锁定完全黑屏无MIPI输出读状态寄存器确认PLL锁定位RGB时序参数错误画面偏移、滚动、部分黑屏用示波器测HSYNC/VSYNC频率lane映射错误画面花屏、颜色异常交换lane顺序或调整极性MIPI速率不匹配屏闪、间歇性黑屏确认屏支持的速率范围I2C地址错误寄存器读写失败用i2cdetect扫描确认地址复位时序不足随机性工作异常延长复位低电平时间这张表是我在实际调试中总结出来的大部分问题都能对应到表中的某一项。遇到问题时先查表能省不少时间。4. 从黑屏到点亮的完整调试实录4.1 第一块板子I2C完全不通第一块板子是我自己画的测试板LT8918加一个24MHz晶振I2C上拉到3.3V。上电后用i2cdetect扫描什么都没扫到。示波器看SCL和SDASCL有波形SDA一直高。这说明主控在发地址但从设备没应答。先查电源量了1.2V和3.3V都正常。再查I2C地址原理图上ADDR引脚是下拉到地的对应地址0x48。但用示波器看SDA线发现地址发出去之后SDA没有任何拉低的动作。怀疑芯片没工作量了一下晶振引脚发现晶振根本没起振。晶振不起振的原因通常是负载电容不匹配。我用的晶振规格书要求12pF负载电容但板子上焊的是22pF。换了两颗12pF的电容之后晶振正常起振I2C也能扫到0x48了。这个坑让我意识到晶振的负载电容一定要按规格书来不能凭经验随便选。4.2 第二块板子I2C通了但黑屏第二块板子是客户送的现成方案I2C能扫到设备寄存器读写也正常但屏就是不亮。用示波器测MIPI输出发现时钟lane有信号但数据lane完全没有波形。先读状态寄存器确认PLL锁定位是1说明时钟没问题。再读MIPI输出配置寄存器发现lane数量配置的是4 lane但实际硬件只接了1 lane。把lane数量改成1之后数据lane有波形了但屏还是黑屏。继续查RGB输入配置发现HSYNC和VSYNC的极性配反了。这块板子的RGB输入是低电平有效的HSYNC和VSYNC但寄存器里配的是高电平有效。改过来之后屏终于亮了但画面有轻微偏移。再调H前肩和后肩参数画面就完全正常了。这个案例说明I2C通了只是第一步寄存器配置的每一个参数都要和实际硬件匹配。特别是lane数量和时序极性是最容易出错的地方。4.3 第三块板子画面闪烁与时钟抖动第三块板子用的是27MHz晶振分辨率1920x1200MIPI速率跑到1.2Gbps每lane。点亮之后画面能显示但每隔几秒会闪一下像是时钟抖动导致的。用示波器测MIPI时钟lane的差分波形发现眼图还可以但抖动比较大。测参考时钟发现27MHz晶振的频偏有点大实测在27.003MHz左右偏差约110ppm。虽然还在MIPI允许的300ppm以内但加上PLL的倍频噪声总抖动就超标了。换了一颗精度更高的晶振正负20ppm画面闪烁的问题就解决了。这个经验告诉我高速MIPI应用对参考时钟的精度要求比想象中高不能随便用一颗普通晶振。另外MIPI差分对的走线也很关键。第三块板子的差分对走线没有做等长两根线差了将近20mil。虽然低速时看不出问题但速率上去之后 skew会导致眼图闭合。重新layout之后把差分对等长控制在5mil以内信号质量明显改善。4.4 调试工具与仪器的实战用法调试LT8918有几样工具是必备的。首先是示波器带宽至少500MHz最好1GHz以上否则测不了MIPI的高速信号。差分探头也很重要普通单端探头测差分信号会引入很大噪声。其次是I2C调试工具。Linux下i2c-tools很好用i2cdetect扫地址i2cget/i2cset读写寄存器。裸机环境可以自己写一个简单的I2C驱动或者用逻辑分析仪抓I2C波形。逻辑分析仪在调试I2C时特别有用能看到完整的读写时序确认地址和数据是否正确。我用的是一款8通道的逻辑分析仪采样率100MHz抓I2C绰绰有余。最后是MIPI协议分析仪这个设备比较贵一般小团队不会买。但如果没有协议分析仪可以用示波器看差分波形确认有没有数据活动。虽然看不到协议层的内容但至少能判断lane有没有在工作。5. 分辨率与时钟参数的匹配逻辑5.1 从像素时钟到MIPI比特时钟的推导MIPI的比特时钟和RGB的像素时钟之间有固定的换算关系。以RGB888为例每个像素需要24位数据。MIPI DSI在传输时会把像素数据打包每个lane传输的比特数取决于lane数量和像素格式。假设分辨率1920x108060Hz像素时钟是148.5MHz。RGB888每个像素24位总数据率是148.5M*243.564Gbps。如果用4 lane MIPI传输每lane的速率是3.564G/4891Mbps。但MIPI DSI协议有开销实际需要的速率要比这个高一些通常留20%的余量所以每lane配到1Gbps左右比较稳妥。如果用2 lane每lane就要跑到1.782Gbps加上开销可能超过2Gbps。LT8918单lane最高支持1.5Gbps所以2 lane跑1080P60是跑不动的必须用4 lane。这个计算在选型阶段就要做否则硬件设计完了才发现带宽不够。5.2 不同分辨率下的参数配置实例以几个常见分辨率为例列出RGB时序参数和MIPI配置的对应关系。分辨率像素时钟H总周期H有效H前肩H后肩V总周期V有效V前肩V后肩MIPI laneMIPI速率1280x80071.0MHz14401280401208238003202500Mbps1920x1080148.5MHz22001920881921125108044141Gbps1920x1200154.0MHz20801920481121235120033241.2Gbps这些参数不是固定的不同屏的时序要求可能略有差异。配置时要以屏的datasheet为准表中的值可以作为参考起点。5.3 带宽不足时的现象与调整策略带宽不足的典型现象是画面间歇性黑屏、闪烁、或者局部花屏。用示波器测MIPI数据lane会发现数据活动断断续续不是连续的。调整策略有几个方向增加lane数量、降低分辨率、降低刷新率、或者减少像素格式的位宽比如从RGB888降到RGB666。增加lane数量是最直接的但受限于LT8918的最大lane数和屏的支持能力。降低分辨率或刷新率会影响显示效果通常是最后的选择。还有一个容易被忽略的点MIPI的burst mode和non-burst mode对带宽的利用效率不同。burst mode允许在行消隐期间传输数据带宽利用率更高但对屏的缓冲要求也更高。如果屏支持burst mode优先用burst mode。6. 那些datasheet不会告诉你的实战经验6.1 寄存器配置的保存与复用调通一个配置之后一定要把完整的寄存器序列保存下来。我一般会写一个脚本把所有寄存器的值读出来存成文本文件下次用的时候直接加载。这样即使换了一块板子只要硬件设计一样配置就能直接复用。但要注意不同批次的LT8918芯片可能有细微差异特别是PLL的锁定时间。所以复用配置时PLL锁定后的等待时间要留足余量不要卡着datasheet的最小值。另外如果主控端有非易失存储可以把配置参数存在里面上电时自动加载。这样产品出厂后就不需要人工配置了。6.2 温度与电压变化对MIPI信号的影响LT8918在高温下PLL的抖动会增大这是我在老化测试中发现的。常温下跑得好好的配置到了70度环境温度下画面开始出现偶发闪烁。后来把PLL的带宽参数调大了一些增加了抗抖动能力问题就缓解了。电压变化也有影响。1.2V核心电压如果偏低PLL可能失锁偏高则功耗增大。建议用精度1%以内的LDO并且在PCB上把去耦电容放足。6.3 从调试到量产的检查要点调试通过只是第一步量产时还要注意几点。首先是I2C地址的一致性不同批次的板子ADDR引脚焊接可能有差异产线测试时要确认地址正确。其次是晶振的一致性不同供应商的晶振频偏可能不同要确保都在MIPI允许范围内。还有一点是MIPI连接器的接触可靠性。量产时如果连接器接触不良会出现偶发性黑屏这种问题很难排查。建议在产线增加一个MIPI信号质量检测工位用示波器或者专用的MIPI测试仪确认信号质量。最后固件里的寄存器配置要有版本管理。每次修改都要记录改了什么、为什么改、验证结果如何。这样出了问题可以快速回退也方便团队协作。6.4 常见问题快速排查流程遇到问题时按以下顺序排查先确认电源和参考时钟正常再确认I2C通信正常然后读状态寄存器确认PLL锁定接着检查RGB输入时序参数最后检查MIPI输出配置。这个顺序是从底层到上层能最快定位问题所在的环节。如果MIPI输出有信号但屏不亮重点查lane映射和视频模式配置。如果画面异常但能显示重点查时序参数和色彩格式。如果间歇性出问题重点查时钟精度和电源稳定性。这套流程是我调了三块板子之后总结出来的基本上覆盖了90%以上的问题场景。剩下的10%可能是芯片本身损坏或者PCB设计缺陷那就需要换芯片或者重新layout了。
返回列表