ARTICLE DETAIL

资讯详情

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

HDMI转MIPI桥接芯片MS1861实战:从选型到点亮LCD屏

HDMI转MIPI桥接芯片MS1861实战:从选型到点亮LCD屏 1. 从一块点不亮的屏说起MS1861到底解决了什么问题手里有一块闲置的LCD屏驱动板却比屏还贵这大概是很多硬件玩家都遇到过的尴尬。尤其是那些从旧设备上拆下来的MIPI屏分辨率不低、尺寸不大但偏偏接口是MIPI DSI而手头只有HDMI信号源。这时候MS1861这颗芯片就进入了视野——它是一颗HDMI转MIPI的桥接芯片能把标准的HDMI信号转换成MIPI DSI输出直接驱动LCD屏幕。我第一次接触MS1861是在一个副屏项目上。当时需要把一块5寸的MIPI屏接到电脑上做状态监控副屏试过几款方案要么是驱动板体积太大要么是分辨率支持不够灵活。MS1861的方案吸引我的地方在于芯片本身集成度很高外围电路不算复杂而且支持的分辨率范围比较宽从常见的800x480到1920x1080都能覆盖。更重要的是它不需要额外的MCU去配置上电后通过I2C或者引脚配置就能工作对于不想写固件的人来说省了不少事。这颗芯片的核心价值在于“桥接”二字。HDMI输入侧它兼容HDMI 1.4标准支持TMDS信号解码MIPI输出侧它支持MIPI DSI协议最多4条数据通道时钟频率可以配置。中间的处理环节包括色彩空间转换、时序生成、分辨率缩放等。说白了它就是一个翻译官把HDMI说的“话”翻译成MIPI屏能听懂的“话”。适合谁来参考这篇内容如果你是有一定硬件基础的爱好者能看懂原理图、会画简单的PCB、焊过QFN封装的芯片那这篇内容基本可以照着做。如果你是完全的新手建议先补一下HDMI接口定义和MIPI协议的基础知识否则后面调时序的时候会比较痛苦。另外做嵌入式Linux开发的工程师也可以参考因为MS1861的配置涉及到I2C通信和时序参数的计算这些和Linux下的DRM框架是有对应关系的。注意MS1861是一颗需要仔细配置的芯片不是插上就能用的那种。它的灵活性带来了配置的复杂性这一点要有心理准备。2. 方案选型与整体设计思路拆解2.1 为什么选MS1861而不是其他桥接方案市面上HDMI转MIPI的方案不止MS1861一种常见的还有龙迅的LT系列、东芝的TC358系列等。我在选型的时候对比了几个维度分辨率支持、配置难度、外围电路复杂度、供货情况和价格。LT系列的优势是生态成熟资料多但部分型号需要外挂MCU做配置而且价格偏高。TC358系列性能不错但封装往往更大对手工焊接不太友好。MS1861的QFN封装相对好焊配置方式也灵活可以通过引脚电阻配置常用分辨率也可以用I2C动态配置。价格方面小批量采购大概在十几到二十几块钱一颗对于个人项目来说可以接受。另一个关键因素是MIPI输出的灵活性。MS1861支持MIPI DSI的多种时序配置包括水平/垂直前后沿、同步脉冲宽度等这些参数对于驱动非标准分辨率的LCD屏非常重要。我手头那块屏是1280x720的IPS屏时序参数比较特殊用固定配置的桥接芯片根本点不亮MS1861的可配置性在这里救了命。2.2 整体信号链路设计整个方案从HDMI源开始经过HDMI接口、MS1861、MIPI输出、LCD屏最后是背光驱动。信号链路上有几个关键节点需要特别注意。HDMI输入部分标准的HDMI接口有19个引脚其中TMDS数据有4对差分线3对数据1对时钟还有DDC通道I2C、HPD热插拔检测、5V电源等。MS1861内部集成了TMDS接收器所以HDMI侧只需要做基本的ESD保护和阻抗匹配就行。这里要注意的是HDMI的差分线阻抗要求是100欧姆差分走线的时候要控制好。MS1861到LCD屏之间的MIPI部分是设计的重点。MIPI DSI的物理层是D-PHY差分线阻抗也是100欧姆但速率可能更高。如果LCD屏的分辨率是1920x1080MIPI时钟可能在400MHz以上这时候走线长度和匹配就非常关键了。我一般会把MIPI走线控制在5厘米以内并且尽量等长。电源部分MS1861需要1.2V核心电压、3.3V IO电压和1.8V MIPI电压。这三个电压的上电时序有要求一般是1.2V先上然后3.3V最后1.8V。如果时序不对芯片可能无法正常初始化。我试过用简单的LDO分别供电但后来发现用一颗多路输出的PMIC更省事上电时序也更容易控制。2.3 配置方式的取舍MS1861有两种配置方式引脚配置和I2C配置。引脚配置是通过在上电时检测特定引脚的电平组合来决定工作模式适合固定分辨率的应用。I2C配置则是在上电后通过I2C总线写入寄存器可以动态改变分辨率和时序参数。我一开始用的是引脚配置因为简单不需要额外的MCU。但后来发现引脚配置只能支持几种预设的分辨率而我那块屏的时序参数不在预设列表里。于是转向了I2C配置用一颗STM32F0作为配置控制器上电后通过I2C写入MS1861的寄存器。这样做的好处是灵活性极高任何分辨率只要算出时序参数就能配置。代价是多了一颗MCU和相应的固件开发工作。如果你只是驱动常见的1024x600或者1280x800屏幕引脚配置可能就够了。但如果你用的是比较冷门的屏幕或者需要动态切换分辨率I2C配置是更好的选择。3. 核心细节解析与实操要点3.1 HDMI接口电路设计的关键细节HDMI接口电路看起来简单但有几个坑我踩过。首先是TMDS差分线的ESD保护很多人会忽略这一点结果插拔几次HDMI线之后芯片就挂了。我推荐用专门的HDMI ESD保护器件比如IP4234CZ6它集成了四对差分线的保护体积小寄生电容低对信号完整性影响很小。其次是DDC通道的处理。DDC是HDMI源和接收端之间交换EDID信息的I2C通道。MS1861内部有EDID RAM可以通过I2C预写入EDID数据。但DDC线的电平是5V的而MS1861的IO是3.3V所以需要电平转换。我试过用简单的电阻分压但在某些HDMI源上会出现识别不稳定的情况。后来改用专用的电平转换芯片问题就解决了。还有HPD热插拔检测信号。这个信号是接收端告诉源端“我已经准备好了”的信号。MS1861有专门的HPD输出引脚但需要注意它的驱动能力。我遇到过HPD信号被拉低导致源端不输出信号的情况后来在HPD线上加了一个缓冲器才解决。提示HDMI接口的5V电源引脚不要直接接到MS1861的电源上中间要加一个限流电阻和滤波电容。这个5V是源端提供的电流能力有限而且可能有噪声。3.2 MIPI DSI输出侧的时序计算MIPI DSI的时序参数是驱动LCD屏的核心。这些参数包括水平同步脉冲宽度HSPW、水平后沿HBP、水平前沿HFP、垂直同步脉冲宽度VSPW、垂直后沿VBP、垂直前沿VFP以及像素时钟频率。以我手头那块1280x720的屏为例数据手册给出的典型时序是HSPW20HBP20HFP20VSPW4VBP8VFP8。像素时钟是74.25MHz。这些参数需要写入MS1861的寄存器。计算MIPI时钟频率的时候要注意MIPI DSI的时钟是像素时钟乘以一个系数这个系数取决于色彩深度和通道数。对于RGB88824位色4通道MIPI时钟频率的计算公式是MIPI时钟 像素时钟 × 24 / 4 / 2。代入74.25MHz得到MIPI时钟约为222.75MHz。这个频率在MIPI D-PHY的范围内但走线还是要小心。如果色彩深度是RGB56516位色公式变成MIPI时钟 像素时钟 × 16 / 4 / 2结果约为148.5MHz。频率低了走线要求也宽松一些。我建议在配置之前先用示波器测量一下MIPI时钟信号的实际波形。如果波形过冲或者振铃严重说明走线或者端接有问题。MIPI D-PHY的差分线通常需要在接收端加端接电阻但有些LCD屏内部已经集成了不需要外加。这个要仔细看屏的规格书。3.3 PCB叠层与阻抗控制PCB设计是MS1861方案中最容易出问题的环节。我第一版PCB就是因为阻抗没控制好导致MIPI信号质量很差屏幕显示有噪点。对于HDMI和MIPI的差分线建议使用4层板。叠层结构可以是顶层信号、内层地、内层电源、底层信号。这样可以让差分线参考完整的地平面阻抗更容易控制。如果成本允许6层板更好可以把HDMI和MIPI分别走在不同的信号层减少串扰。差分线的阻抗控制HDMI要求100欧姆差分MIPI也要求100欧姆差分。在4层板中如果介质厚度是0.2mm线宽0.15mm线间距0.2mm大致可以得到100欧姆的差分阻抗。但具体数值要用阻抗计算工具算一下因为还和铜厚、介电常数有关。走线的时候差分对要严格等长误差控制在5mil以内。过孔要尽量少如果必须换层要在过孔附近加回流地过孔。MIPI的走线长度尽量短我一般控制在5厘米以内。如果实在要走长就要考虑加Redriver或者Retimer但那样成本就上去了。注意HDMI的差分线对之间要保持足够的间距至少是线宽的3倍以上减少串扰。MIPI的差分线对之间也要保持间距尤其是时钟线和数据线之间。3.4 电源设计与上电时序MS1861的电源设计有几个要点。首先是电压值核心电压1.2VIO电压3.3VMIPI电压1.8V。这三个电压的容差一般是±5%。核心电压的电流需求大概在200mA左右IO和MIPI的电流需求较小各几十毫安。上电时序方面数据手册要求1.2V先上然后3.3V最后1.8V。每路之间的延迟建议在1ms以上。如果时序不对芯片可能无法正常初始化表现为I2C通信失败或者MIPI无输出。我用过两种方案一种是三颗独立的LDO通过RC延时电路控制上电顺序另一种是一颗多路输出的PMIC比如TPS650330它内部有上电时序控制。前者成本低但占板面积大后者成本高但更可靠。对于个人项目我推荐用PMIC省心。电源的滤波也很重要。每路电源都要加去耦电容一般是100nF和10uF的组合。1.2V核心电压的滤波电容要尽量靠近芯片的电源引脚减少寄生电感。MIPI的1.8V电源如果噪声大会导致MIPI信号抖动增加所以也要好好滤波。4. 实操过程与核心环节实现4.1 硬件焊接与初步检查MS1861是QFN封装引脚间距0.5mm手工焊接有一定难度。我的做法是先用助焊剂涂在焊盘上然后把芯片放上去用热风枪在芯片上方加热温度设定在280度左右风量调小。看到焊锡融化后用镊子轻轻推一下芯片让它自动对齐。冷却后用放大镜检查引脚是否有虚焊或者连锡。焊接完成后不要急着上电。先用万用表测量各路电源对地的电阻确认没有短路。然后测量I2C总线的上拉电阻是否正常。我遇到过I2C上拉电阻没焊好导致配置失败的情况查了半天才发现是电阻虚焊。上电的时候建议用可调电源先设定电流限制在200mA左右。如果电流异常大说明有短路要立即断电检查。正常上电后测量各路电压是否正常然后用示波器看一下晶振是否起振。MS1861需要外部晶振通常是27MHz或者24MHz具体看配置。4.2 I2C配置流程与寄存器写入如果使用I2C配置需要先了解MS1861的寄存器映射。芯片的I2C地址通常是0x4C或者0x4D具体看引脚配置。寄存器分为几个区域系统控制、HDMI接收、MIPI输出、时序参数等。配置流程一般是先复位芯片然后配置HDMI输入参数比如色彩空间、分辨率接着配置MIPI输出参数通道数、色彩深度最后写入时序参数。每一步都要读回寄存器确认写入成功。我用STM32F0写了一个简单的配置程序通过I2C写入寄存器。代码的核心是一个写寄存器的函数void MS1861_WriteReg(uint8_t reg, uint8_t val) { I2C_Start(); I2C_SendByte(MS1861_ADDR 1); I2C_WaitAck(); I2C_SendByte(reg); I2C_WaitAck(); I2C_SendByte(val); I2C_WaitAck(); I2C_Stop(); }时序参数的写入需要按照数据手册的格式把参数值转换成寄存器值。比如HSPW20可能需要写入寄存器0x20值为20。但有些参数需要减1或者有偏移这个要仔细看手册。配置完成后可以通过读取芯片的状态寄存器来确认是否正常工作。如果HDMI输入检测到了信号状态寄存器的相应位会置1。如果MIPI输出正常也会有状态指示。4.3 屏幕点亮与显示调试配置完成后接上HDMI源和LCD屏应该就能看到画面了。但第一次往往不会这么顺利。我遇到过的现象包括屏幕全黑、屏幕白屏、画面闪烁、颜色不对、画面偏移等。屏幕全黑可能是背光没开也可能是MIPI没有输出。先检查背光电路确保背光使能信号有效背光电流正常。然后测量MIPI时钟和数据线看是否有信号。如果没有信号检查MS1861的配置是否正确特别是MIPI输出的使能位。屏幕白屏通常是MIPI有信号但时序不对。这时候要检查时序参数是否和屏幕规格书一致。我遇到过HSPW设大了导致画面偏移的情况把参数改小就正常了。画面闪烁可能是MIPI时钟不稳定或者电源噪声大。用示波器测量MIPI时钟的抖动如果抖动超过规格要检查电源滤波和走线。颜色不对可能是色彩深度配置错误。比如屏幕是RGB888但MS1861配置成了RGB565颜色就会失真。这时候要改配置。提示调试的时候可以先用一个已知能正常工作的HDMI源比如电脑或者树莓派排除源端的问题。然后逐步检查MS1861的配置和硬件连接。4.4 背光驱动电路的设计LCD屏的背光通常是LED串需要恒流驱动。背光驱动电路的设计要考虑LED的正向电压、电流和调光方式。我手头那块屏的背光是6颗LED串联每颗正向电压约3V总电压约18V电流要求20mA。我用了一颗升压恒流驱动芯片比如TPS61165它支持PWM调光和模拟调光。PWM调光的频率要足够高一般建议在1kHz以上避免人眼看到闪烁。背光使能信号可以从MS1861的GPIO输出或者由MCU控制。我一般用MCU控制这样可以做亮度调节。亮度调节可以通过PWM占空比来实现占空比越高越亮。背光电路的布局要注意升压电路的开关节点噪声大要远离MIPI和HDMI的差分线。电感要选屏蔽型的减少辐射。5. 常见问题与排查技巧实录5.1 HDMI无输出或识别不稳定这是最常见的问题之一。现象是接上HDMI源后MS1861检测不到信号或者时好时坏。排查思路先检查HDMI接口的5V电源是否正常这个电压是源端提供的如果源端没有输出5VMS1861就不会工作。然后检查HPD信号如果HPD被拉低源端会认为接收端没准备好不输出信号。接着检查DDC通道如果EDID读取失败源端可能不输出信号或者输出错误的分辨率。我遇到过HPD信号被ESD保护器件漏电流拉低的情况换了一个漏电流更小的器件就好了。还遇到过DDC电平转换芯片供电不足导致EDID读取失败的情况把供电改到3.3V就正常了。5.2 MIPI屏幕显示异常MIPI显示异常的表现很多包括花屏、闪屏、颜色异常、画面偏移等。花屏通常是MIPI信号完整性有问题。检查差分线的阻抗是否控制好走线是否等长端接电阻是否正确。如果走线太长考虑降低MIPI时钟频率试试。闪屏可能是时钟不稳定或者电源噪声大。用示波器测量MIPI时钟的抖动如果抖动大检查电源滤波和晶振质量。颜色异常检查色彩深度配置确保MS1861和屏幕的配置一致。画面偏移检查时序参数特别是HSPW、HBP、HFP这些水平参数以及VSPW、VBP、VFP这些垂直参数。5.3 I2C通信失败I2C通信失败的表现是配置写入后读回不对或者芯片无响应。排查思路先检查I2C总线的上拉电阻一般是4.7kΩ到10kΩ。然后检查I2C地址是否正确MS1861的地址可能因引脚配置不同而不同。接着用示波器看I2C的波形确认时序是否正常。如果波形上升沿太慢可能是上拉电阻太大或者总线电容太大。我遇到过I2C地址搞错的情况数据手册上写的是0x4C但实际芯片因为引脚配置是0x4D查了好久才发现。5.4 常见问题速查表问题现象可能原因排查方法解决方案HDMI无输出5V电源缺失测量HDMI接口5V检查源端或加外部供电HDMI识别不稳定HPD信号异常测量HPD电平更换ESD器件或加缓冲器屏幕全黑背光未开启测量背光使能和电流检查背光电路屏幕白屏MIPI时序错误核对时序参数修改寄存器配置画面闪烁时钟不稳定示波器测抖动改善电源滤波颜色异常色彩深度错误核对配置修改色彩深度设置I2C通信失败地址错误确认I2C地址修改地址I2C通信失败上拉电阻问题测量总线波形调整上拉电阻5.5 独家避坑技巧第一个技巧在PCB上预留MIPI测试点。MIPI的差分线很难直接测量如果在设计时预留了测试点调试的时候会方便很多。测试点要尽量小减少对信号完整性的影响。第二个技巧MS1861的散热焊盘一定要焊好。这颗芯片工作时会发热如果散热焊盘虚焊芯片可能会过热导致工作不稳定。焊接的时候要在散热焊盘上涂足够的锡膏。第三个技巧配置寄存器的时候先写一个已知能工作的配置然后逐步修改。不要一次性把所有参数都改掉否则出了问题很难定位。第四个技巧如果MIPI屏幕的规格书没有给出完整的时序参数可以参考类似分辨率的屏幕参数然后微调。一般HSPW和VSPW可以取小一点HBP和VBP取大一点这样兼容性更好。第五个技巧HDMI的差分线如果走线较长可以考虑加共模扼流圈减少共模噪声。但要注意选择寄生电容小的型号否则会影响信号完整性。6. 从点亮到稳定运行我的调试体会MS1861这颗芯片说难不难说简单也不简单。它的灵活性是最大的优点也是最大的挑战。我前后做了三版PCB才把MIPI信号质量做到满意第一版是阻抗没控制好第二版是电源噪声大第三版才算是比较稳定。如果你刚开始做这个方案我的建议是先不要追求小体积把板子画大一点走线宽松一点调试的时候方便。等第一版能稳定工作了再考虑优化体积。另外示波器是必备的没有示波器调MIPI信号基本是靠猜。还有一点MS1861的配置寄存器比较多建议做一个配置表把每个寄存器的值和含义都列出来调试的时候方便对照。我用Excel做了一个配置表每次改参数都在表里改然后生成配置数组省了很多事。最后分享一个小经验如果屏幕显示正常但偶尔闪一下大概率是电源的问题。可以在MIPI的1.8V电源上并联一个22uF的钽电容试试很多时候能解决问题。这个是我踩了好几次坑才总结出来的。
返回列表