简介:CS5518 是一份面向硬件工程师与显示方案开发者的 MIPI DSI 转 LVDS 转换芯片技术资料,适合从事手持设备、主板、双面板显示器及汽车显示器等产品设计的研发人员查阅,可帮助解决 DSI 信号源与 LVDS 屏体之间的接口适配与选型验证问题。压缩包共 1 个 PDF 文件,约 4.92MB,内容为该芯片的规格说明书,便于整份检索与打印对照。资料围绕芯片核心特性展开:MIPI DSI 输入最多支持 4 条通道、单通道最高 1Gbps;LVDS 输出支持 18 位或 24 位像素,像素时钟范围 25MHz 至 154MHz,兼容 VESA 与 JEIDA 两种数据格式;芯片仅需单路 1.8V 供电,有利于降低物料成本并压缩板面空间。目前已吸引 178 人学习浏览,读者可据此快速确认通道数、像素位数、时钟上限与供电方案等关键指标,并在原理图设计与链路速率核算阶段少走弯路。
1. DSI 转 LVDS 这类桥接芯片:为什么新主板的屏幕接口,中间总绕不开一颗“翻译官”
第一次碰到 MIPI DSI 转 LVDS 的选型需求,直觉多半是:两边都是低压差分信号,画块转接板把线序对上不就行了。板子真做出来就会发现这条路从物理层就堵死——DSI 送的是带包头包尾、带 ECC 和 CRC 的数据包,LVDS 要的是每个像素时钟都不间断的并行像素流,中间隔的不是线序,是一整套语义。
CS5518 就是填这道缝的芯片:DSI 侧最多接 4 条 lane、每条最高 1Gbps,LVDS 侧输出 18 位或 24 位像素、像素时钟覆盖 25MHz 到 154MHz、支持 VESA 与 JEIDA 两种位序,整颗芯片只吃一路 1.8V 电源。手持设备、主板、双面板显示器、车载显示这些场景里,主控早就换成只剩 DSI 输出的 SoC,屏厂手上现成的却还是 LVDS 面板,中间这颗芯片就是绕不过去的翻译层。搞懂它,本质上是搞懂两种显示接口在协议、时域、电源三条线上的设计差异最后落在哪几个具体参数上。
2. 协议落差:DSI 的包化传输和 LVDS 的连续像素流,差在哪一层
2.1 一边是带信封的快递,一边是永不停的传送带
DSI 的数据在 lane 上不是按像素排列的裸数据,而是封装成包的。短包只有 4 个字节:1 字节数据类型(DI)、2 字节参数、1 字节 ECC。长包多出一层结构:DI、2 字节字计数(WC)、1 字节 ECC,然后是 WC 个字节的负载,最后跟 2 字节 CRC。像素数据全部走长包,比如一条 1920 像素宽、24bpp 的显示行,负载就是 1920×3 = 5760 字节。
这个结构决定了三件事。第一,接收侧必须先做包同步——从一串连续的比特里找出 SoT 同步序列,定位包头,读出 DI 判断这是哪种数据类型,再读 WC 知道后面跟多少字节。第二,包与包之间允许插 LP(低功耗)状态,lane 可以停下来,等下一批像素准备好再重新进 HS 模式。第三,包会被切分到多条 lane 上传输,切分规则是按字节轮转,不是按像素轮转。
LVDS 那边完全是另一套逻辑。它没有包的概念,也没有同步序列和纠错码。接收端(也就是屏里的 T-CON)只做一件事:每个像素时钟周期,把四对(24bpp)或三对(18bpp)差分线上此刻的比特抓下来,拼成一个像素,送进移位寄存器。它默认数据永远在那儿,从不检查“这一帧对不对”,因为协议里根本没有校验字段。
所以桥接芯片的第一项工作是语义翻译,不是电平转换:解包、校验、取出像素、丢掉包结构,再按 LVDS 的节拍重新组织成连续的像素流。这一步做不干净,后面所有时序都是空谈。
2.2 LVDS 的时钟不能停,DSI 的时钟可以
D-PHY 在 HS 模式下确实有一对专用的 DDR 时钟 lane,这点和 LVDS 的时钟对不同。真正的差别在“能不能停”。
DSI 链路在 LP 状态下,时钟 lane 和数据 lane 一起进入低功耗,差分摆幅降到接近共模,时钟停摆。SoC 完全可以在行消隐期间把链路挂起,等下一行像素准备好再唤醒。很多移动 SoC 就是这么干的,因为它要省电。
LVDS 面板不吃这一套。T-CON 上电之后,只要时钟对停止翻转超过几个毫秒,内部 PLL 就失锁,屏上表现为黑屏或者闪一下。它对时钟的唯一要求是:从开机到关机,频率稳定、占空比接近 50%、抖动足够小。
这意味着 CS5518 内部必须有一套本地时钟生成电路——外部给一个参考时钟,内部 PLL 倍频出像素时钟,再由这个像素时钟去驱动 LVDS 的 7:1 串行化。DSI 侧的时钟只是用来采样输入的,和 LVDS 输出时钟不是同一个源,两者靠内部缓冲做速率解耦。这也是为什么这类芯片一定要有行缓冲:DSI 可以突发式地把一整行像素在很短时间内推完,LVDS 必须把这行像素均匀地铺满整个行周期。
2.3 带宽账:4 条 lane、每条 1Gbps,实际能喂多宽的屏
规格书上写的“4 lane × 1Gbps”是物理层原始速率,能不能撑住一块屏,要算两笔账。
先算 DSI 侧的有效带宽。长包的开销是固定的:包头 4 字节(DI + WC + ECC)、包尾 2 字节 CRC,一共 6 字节。如果一行像素打成一个包,1920×3 = 5760 字节负载,开销占比 6/5760 ≈ 0.1%,基本可以忽略。所以 4 条 lane 的有效吞吐接近 4Gbps 减去 PHY 层的少量同步开销,保守按 3.9Gbps 估。
再算 LVDS 侧的需求。像素时钟 f_px 乘上每像素位数,就是 LVDS 侧的数据率:
| 分辨率(60Hz 典型时序) | 像素时钟 | 24bpp 需求 | 18bpp 需求 | 是否落在 154MHz 内 |
|---|---|---|---|---|
| 800×480 | 33.3 MHz | 0.80 Gbps | 0.60 Gbps | 是 |
| 1024×600 | 51.2 MHz | 1.23 Gbps | 0.92 Gbps | 是 |
| 1280×800 | 71.0 MHz | 1.70 Gbps | 1.28 Gbps | 是 |
| 1366×768 | 85.5 MHz | 2.05 Gbps | 1.54 Gbps | 是 |
| 1600×900 | 108.0 MHz | 2.59 Gbps | 1.94 Gbps | 是 |
| 1920×1080 | 148.5 MHz | 3.56 Gbps | 2.67 Gbps | 是,但接近上限 |
| 1920×1200 | 193.5 MHz | 4.64 Gbps | 3.48 Gbps | 否,超像素时钟上限 |
从这张表能反推出两件事。第一,154MHz × 24bpp = 3.696Gbps,和 4Gbps 的物理上限只差 7.6%,说明 1080p60 加 24 位色就是这颗芯片设计时的目标场景,余量刻意留得很窄。第二,如果按 4Gbps 除以 24bpp 反算,理论上限是 166.7MHz,规格书却只标到 154MHz——这 7.6% 的差就是留给包开销、PLL 抖动、温度漂移和 LP 切换间隙的。把屏参顶到 166MHz 去跑,板子温度一上来就容易出问题。
顺带一提,如果只需要 18bpp,理论上限能推到 222MHz,但芯片照样卡在 154MHz。这说明 154MHz 不是带宽决定的,是内部 PLL 和 LVDS 串行化电路的频率上限决定的,属于器件本身的硬边界。
提示:选型时不要拿 4Gbps 去除以 bpp 算理论分辨率,直接用 154MHz 像素时钟和屏厂给的典型时序对,对不上就得换方案或者降帧率。
3. CS5518 的数据通路:从 lane 上的比特到 LVDS 的四对线,中间要拆装几次
3.1 接收端:lane 对齐与字节分发
DSI 的负载不是按“第 0 条 lane 传第 0 个像素”这种方式分发的,而是按字节轮转。假设开了 4 条 lane,负载字节 B0、B1、B2、B3 分别上 lane0 到 lane3,B4 回到 lane0,依此类推:
拍号 lane0 lane1 lane2 lane3 1 B0 B1 B2 B3 2 B4 B5 B6 B7 3 B8 B9 B10 B11 ... ... ... ... ...接收侧必须做完全相反的逆操作:把四条 lane 上同一拍收到的字节按 lane 号拼回 B0、B1、B2、B3 的顺序。这里有两个容易翻车的点。
第一个是 lane 数必须和发送侧完全一致。如果 SoC 配置成 2 lane 发送,而桥接芯片初始化成 4 lane 接收,拼出来的字节流顺序全乱,屏上就是一片花。这类问题在调试初期很常见,因为两边是两套独立的驱动代码,谁也不会主动去校验对方的 lane 数。
第二个是 lane 间偏斜。1Gbps 下每个 UI 是 1ns,在常见 PCB 材料上大约对应十几厘米的走线长度。虽然 D-PHY 协议对 lane 间偏斜有一定容差,但实际布线时同一组内的四条 lane 长度差还是应该尽量压到 5mm 以内,否则接收侧的采样窗口会被吃掉一大块,表现为偶发误码和画面闪烁——这类问题用示波器看波形往往一切正常,只有长时间跑测试图样才能复现,属于典型的玄学故障。
3.2 包解析与像素重组
拿到对齐后的字节流,下一步是按 DI 字段判断数据类型,再按对应格式切像素。DSI 里和像素相关的常见数据类型有这么几种:
| DI (hex) | 含义 | 每像素字节数 | 备注 |
|---|---|---|---|
| 0x3E | RGB888 打包 | 3 | 24bpp,最常用 |
| 0x2E | RGB666 松散打包 | 3 | 每字节只用低 6 位,高 2 位浪费 |
| 0x1E | RGB666 打包 | 2.25 | 4 个像素压进 9 字节 |
| 0x0E | RGB565 打包 | 2 | 16bpp |
重组逻辑用伪代码表示大致是这样:
# 伪代码:把 DSI 长包负载还原成像素三元组 def unpack_payload(dt, payload): if dt == 0x3E: # RGB888,3 字节/像素 for i in range(0, len(payload) - 2, 3): yield payload[i], payload[i+1], payload[i+2] elif dt == 0x2E: # RGB666 松散打包,每字节只取低 6 位 for i in range(0, len(payload) - 2, 3): yield payload[i] & 0x3F, payload[i+1] & 0x3F, payload[i+2] & 0x3F elif dt == 0x1E: # RGB666 打包,9 字节装 4 个像素 for i in range(0, len(payload) - 8, 9): # 每个像素 18 位,按位从 9 字节的连续比特流里切出来 bits = int.from_bytes(payload[i:i+9], 'little') for p in range(4): v = (bits >> (p * 18)) & 0x3FFFF yield (v >> 12) & 0x3F, (v >> 6) & 0x3F, v & 0x3F elif dt == 0x0E: # RGB565,2 字节/像素 for i in range(0, len(payload) - 1, 2): v = payload[i] | (payload[i+1] << 8) yield (v >> 11) & 0x1F, (v >> 5) & 0x3F, v & 0x1F这段代码的关键在第二和第三个分支。0x2E 的“松散打包”看着省事,其实是用 3 个字节只装 18 位有效数据,带宽利用率只有 75%,很多 SoC 默认就用这种格式,结果白白浪费了 25% 的 DSI 带宽,让本来能上 1080p 的方案上不去。0x1E 的打包格式才是真正省带宽的,但它要求收发两端对“比特怎么排”有完全一致的理解,位序错一位就是整体偏色。
桥接芯片在这里要做的判断是:不管上游用哪种格式,最终都要归一化成 LVDS 侧能接受的位置。如果上游是 0x0E(RGB565),而屏要的是 24bpp,中间就必须做位扩展——低位补零还是做抖动,不同实现选择不同,直接影响画面的灰阶过渡是否平滑。
3.3 两级格式映射:18/24bpp 与 VESA/JEIDA
归一化之后的像素,要往 LVDS 的物理线上摆,这里是两级映射。
第一级是位宽。18bpp 只需要三对数据线,每对每周期送 6 位;24bpp 需要四对数据线,每对每周期送 7 位。
| 位宽 | 数据对数 | 每对每周期位数 | 单周期总位数 | 额外控制位 |
|---|---|---|---|---|
| 18bpp | 3 | 6 | 18 | 无 |
| 24bpp | 4 | 7 | 28 | DE + 保留位 |
24bpp 下四对线一个周期一共能送 28 位,实际只用了 24 位像素加 1 位 DE(数据有效),剩下 3 位是保留位。这个“多出来的空间”就是 LVDS 能兼容 18bpp 面板的物理基础:18bpp 面板只用三对线,第四对不接,芯片侧自动关掉第四路的输出。
第二级映射是 VESA 和 JEIDA 的位序差异。两者对 R、G、B 各条线上的位分配不同,选错了最典型的现象是整体偏色——本该是纯红的画面显示成偏橙,或者灰阶过渡出现明显的台阶。这种故障很容易被误判成“屏坏了”或者“排线接触不良”,实际只是配置寄存器里两个比特写反了。
3.4 发送端:LVDS 成帧与持续时钟
最后一步是把像素流串行化推到四对(或三对)差分线上。每个像素时钟周期,芯片内部把当前像素的各个位按映射表摆到 7 个位置上,再以 7 倍像素时钟的速率串行移出,DDR 双边沿采样。
这里有个设计细节值得注意:如果 DSI 侧这一拍没有新数据(比如正在等 SoC 发下一行),LVDS 侧不能停。芯片必须把上一拍的数据再发一遍,同时把 DE 拉低,让 T-CON 知道这段不是有效像素。这就是前面说的行缓冲的实际用途——缓冲深度决定了这颗芯片能吸收多大的 DSI 突发抖动。缓冲太浅,SoC 稍微晚到一点就欠载,屏上会闪一下;缓冲太深,成本和延迟都上去了。
4. 时域控制:25–154MHz 这个范围不是在描述能力,是在描述约束
4.1 像素时钟怎么来的,为什么两端要“平均匹配”
CS5518 的时钟树大致是:外部参考时钟(通常来自主控给的晶振或者 SoC 输出的时钟)进 PLL,倍频到内部 VCO 频率,再分频出像素时钟。像素时钟乘上 bpp 就是 LVDS 侧的数据率,同时也决定了 7:1 串行化电路的移位时钟。
DSI 侧的数据率是 SoC 决定的,跟这个 PLL 没有直接关系。两边的匹配是一种“平均意义上的匹配”:只要 DSI 侧每秒送来的像素数不超过 LVDS 侧每秒能吐出的像素数,行缓冲就不会溢出。瞬时速率完全可以不一样——SoC 可能在一行的前 20% 时间里把整行像素突发完,剩下 80% 时间链路空闲,桥接芯片靠缓冲把这段“洪峰”摊平。
这也解释了为什么这类芯片对 DSI 侧的 burst 模式特别敏感。有些 SoC 驱动为了省电,把包发得很碎,一个长包只装几十个像素,包开销占比一下从 0.1% 涨到 10% 以上,有效带宽掉一大截,本来算着够的带宽就不够了。
4.2 25MHz 这个下限为什么存在
规格书标的范围是 25MHz 到 154MHz,下限不是随便写的。
PLL 的 VCO 有一个最佳工作区间,像素时钟太低时分频比拉得很大,输出时钟的抖动和占空比失真都会变差。LVDS 接收侧的 T-CON 对时钟占空比相当敏感,偏离 50% 太多会直接导致采样错误。25MHz 大致是这个 PLL 架构还能保证时钟质量的下限。
这个限制的实际影响是:特别老的小尺寸屏接不了。比如 320×240@60Hz 的像素时钟只有 6.3MHz,远低于下限。这类场景要么降帧率凑到 25MHz 以上(画面会明显卡顿),要么换别的方案。反过来,640×480@60Hz 是 25.2MHz,刚好卡在下限上面一点点,属于能用但要留意的边界情况。
4.3 154MHz 这个上限又是怎么来的
前面算过,4Gbps 除以 24bpp 得到 166.7MHz,规格书只标 154MHz,中间这 7.6% 的差值去哪儿了?
一部分给了包开销。虽然整行长包的开销只有 0.1%,但实际驱动经常把一行拆成多个包发,每个包都要重新走一遍 SoT、包头、CRC、EoT,开销会成倍上升。另一部分给了 LP 切换——每次从 LP 转 HS 都要一小段稳定时间,这段时间是不传数据的。还有一部分是给 PLL 抖动和工艺角留的余量:芯片在常温下标称能跑 154MHz,到了高温或者低压角,实际能跑的频率会往下掉。
所以 154MHz 不是“芯片在理想条件下能跑多快”,而是“在所有规定工况下都能稳定工作的频率”。拿示波器在实验室常温下测出能跑到 160MHz,不代表量产板子在夏天车里也能跑。
4.4 单 1.8V 供电不只是省一颗 LDO
整颗芯片只用一路 1.8V,核心和 IO 共用。对板级设计来说,这意味着省掉了一路 3.3V 或者 2.5V 的 LDO、相应的输入输出电容、以及一片 PCB 面积——在手持设备和车载模组这种空间按平方毫米算的场景里,这是实打实的成本。
代价落在电气上。LVDS 的差分摆幅典型值是 350mV,共模电平在 1.2V 左右。用 1.8V 单电源去生成 1.2V 共模和 350mV 摆幅,内部必须有专门的偏置电路,而且对电源纹波非常敏感。1.8V 轨上几十毫伏的纹波,会直接调制到 LVDS 的差分波形上,表现为眼图闭合、误码率上升。
板级上的应对办法不复杂但必须做到位:去耦电容尽量贴近芯片的电源引脚,1.8V 走线要短而宽,最好单独从电源层拉一小片铜皮。如果和主控的大电流数字电路共用一路 1.8V,中间要加磁珠或者 LC 滤波做隔离,否则主控一跑重负载,屏上就开始闪。
注意:上电时序也要按规格书来。1.8V 建立之后要给足复位时间,再做寄存器配置,配置完了才能让 LVDS 出时钟。顺序错了,轻则首次上电黑屏、复位一次才好,重则 T-CON 进异常状态需要断电重启。
5. 避坑与排查:桥接链路调试里最常见的五类翻车
5.1 有图像但颜色整体不对
现象:能出图,分辨率也对,但颜色明显偏——纯红显示成偏橙,或者灰阶过渡出现断层,看起来像被量化过。
原因:绝大多数是 VESA/JEIDA 位序选错,其次是 18bpp 和 24bpp 不匹配。如果屏是 24bpp 面板而芯片配成 18bpp,高位会缺失,灰阶直接从 256 级掉到 64 级,过渡带出现明显台阶。反过来如果是 18bpp 面板配成 24bpp,最低几位被丢弃,暗部细节会丢。
解决:先确认面板规格书上写的是 VESA 还是 JEIDA、是 6bit 还是 8bit,再对照芯片的配置寄存器逐位核对。调试时用纯色图样(全红、全绿、全蓝、64 级灰阶)比用真实图像更容易看出问题——灰阶图能一眼看出量化台阶在哪儿。
5.2 图像错位、斜切或者撕裂
现象:画面能看到内容,但整体斜着错开一截,或者上下半屏对不齐,严重时像被水平切了一刀再拼错。
原因:lane 数不匹配或者字节分发没对齐。SoC 侧按 2 lane 发,芯片侧按 4 lane 收,拼出来的字节顺序全乱,像素边界就错位了。另一种情况是 lane 间偏斜太大,某条 lane 的采样点漂到了相邻 UI 里去了。
解决:先对齐两边的 lane 配置,这是最容易查也最容易漏的。lane 数一致之后还有问题,就查 PCB 走线——同一组内四条 lane 的长度差、参考层是否连续、有没有跨分割。用测试图样里的竖条纹图能放大这个问题,条纹边缘会出现锯齿或者错位。
5.3 背光亮但屏幕全黑
现象:背光已经点亮,屏是均匀的黑,没有任何图像,也没有花屏或者闪烁。
原因:三种可能。一是 LVDS 时钟没起来,T-CON 的 PLL 根本没锁上;二是时序参数(HFP、HBP、HSW、VFP、VBP)没配或者配错,T-CON 收到了数据但判定为无效帧;三是上电时序不对,配置还没写完 T-CON 就开始了。
解决:先用示波器量 LVDS 时钟对有没有翻转、频率对不对。有翻转但还是黑,就抓一帧完整时序看 DE 的占空比是否合理——DE 高电平的时间占比应该接近有效像素数除以总像素数。都没问题的话,回头查上电和复位时序,确保配置在 T-CON 开始工作之前完成。
5.4 高分辨率下偶发闪黑
现象:低分辨率下一切正常,切到 1080p 之后每隔几秒到几十秒闪一下黑,时间很短,有时候伴随一行花屏。
原因:带宽或者缓冲余量不够。前面算过,1080p60 加 24bpp 需要 3.56Gbps,而物理上限是 4Gbps,余量只有 11%。如果 SoC 侧把一行拆成很多小包发,开销一涨就顶到上限;或者行缓冲深度不够,吸收不了突发抖动,就会欠载。
解决:先看 SoC 侧的包长配置,尽量让一个长包装满一整行像素,减少包数量。如果驱动改不了,就降 bpp(24 改 18)或者降帧率(60 改 50),把需求压到带宽的 80% 以下。还有一个容易忽略的点是温度——高温下 PLL 抖动变大,原本勉强够的余量就没了,所以老化测试要在高温下跑。
5.5 靠近模组时触摸失灵或者画面受干扰
现象:手指靠近屏排线或者芯片附近时,触摸坐标跳变,或者画面出现细密的横纹。
原因:LVDS 的差分对在 1.8V 单电源下摆幅本来就小,如果走线阻抗控制不好或者屏蔽不到位,很容易向外辐射,干扰旁边的触摸感应线。反过来触摸的扫描信号也可能耦合进 LVDS 对,形成互相干扰。
解决:LVDS 差分对严格按 100Ω 差分阻抗走,等长、紧耦合、参考层完整。排线尽量远离触摸感应区,做不到就用屏蔽排线并把屏蔽层单点接地。芯片的 1.8V 去耦再检查一遍,电源噪声会直接放大辐射。
6. 设计取舍:单电源、4 lane、154MHz 这条线是怎么画出来的
把前面几章的参数放一起看,会发现 CS5518 的设计边界画得相当克制:4 条 lane、每条 1Gbps,刚好够 1080p60 加 24bpp 还留 7.6% 余量;像素时钟上限 154MHz,刚好覆盖到 1080p 但够不到 1200p;单 1.8V 供电,省了板级空间但把电源完整性的压力全推给了 PCB 设计。
这不是能力不够,是取舍。再往上走一档,比如支持 1920×1200@60(需要 193.5MHz),PLL 和串行化电路就要换更快的工艺节点,功耗和成本跟着涨,而 1200p 在手持和车载场景里本来就不是主流需求。反过来往下砍,砍到 2 lane 就撑不住 1080p,砍掉 18bpp 支持就接不了大量存量工业屏。154MHz 这个点,正好卡在“覆盖绝大多数现有 LVDS 面板”和“成本还能被接受”之间。
单 1.8V 的选择同理。多一路电源对芯片内部来说更轻松,LVDS 驱动可以直接从 3.3V 生成共模,摆幅余量大、抗干扰好。但板级要多一颗 LDO、多几颗电容、多占一片面积,在模组尺寸受限的场景里这几平方毫米很要命。所以设计上选择把难度留在芯片内部,把便利留给板级——代价是使用者必须把电源和地去耦做扎实,这一条在规格书里往往只有一句话,实际却是调试期最常见的翻车点。
验证这套取舍是否成立,我的习惯是分三步走。第一步,不接屏,直接用示波器在 LVDS 输出端量眼图,确认摆幅、共模、抖动都在范围内,这一步排除掉芯片本身和电源的问题。第二步,接屏跑测试图样——纯色、灰阶、竖条纹、棋盘格,这四种图样能覆盖掉绝大多数格式和时序类故障,比拿真实画面调试效率高得多。第三步,跑长时间高温老化,至少连续 24 小时,专门盯 5.4 节那种偶发闪黑。
从那以后我每次接手一条新的 DSI 链路,都强制先把这四张测试图样跑一遍再谈功能,因为格式和时序的坑一旦混进应用层调试里,排查成本会翻好几倍。这份规格书里那些看着枯燥的参数表和时序图,本质上就是把上面这些取舍固定下来的结果,对着它一条条核,比对着现象猜要快得多。希望帮到你。
本文还有配套的精品资源,点击获取