☰
NCS8801S桥接芯片实战:LVDS/RGB转eDP配置与时序调试指南
2026/10/15 7:35:34 网站建设 项目流程

简介:NCS8801S 是一颗低功耗、高性能的 RGB/LVDS 转 eDP 桥接芯片,面向从事手机、平板、笔记本等移动设备显示方案设计的硬件工程师与嵌入式开发者。它可将单/双通道 LVDS 或 18/24bit RGB 信号转换为 1/2/4-lane eDP 输出,支持 1.62/2.7Gbps 每 lane 速率,最高可驱动 2560×1600 分辨率,并内置 SSC、eDP 握手协议与视频测试图案,适合高清显示接口转换与桥接设计参考。资源包为 1 个 pdf 文件,大小约 1.37MB,即 NCS8801S 完整数据手册,涵盖特性、框图、引脚定义、电气参数与配置说明,便于快速评估芯片选型与外围电路设计。目前已有 859 人学习下载,适合需要了解 LVDS/RGB 转 eDP 方案、核对寄存器与接口时序的读者查阅。

1. 一块 7mm×7mm 的桥接芯片,怎么把老屏接口救回来

手上有一块 2560×1600 的 eDP 屏,主板却只吐出 LVDS 或者 RGB 信号,这种场面做嵌入式显示的朋友大概率遇到过。NCS8801S 就是干这个的:一颗 RGB/LVDS 转 eDP 的桥接芯片,QFN-56 封装,7mm×7mm,专门给手机、平板、笔记本这类空间紧张、又要推高分辨率屏的设备用。它支持 1/2/4 lane eDP 输出,每 lane 1.62Gbps 或 2.7Gbps,最高能顶到 WQXGA(2560×1600);输入侧单双通道 LVDS 或者 18/24bit RGB 都吃,参考时钟 19MHz 到 100MHz 随便给,典型 24MHz。功耗这块,1920×1080×24bit×60Hz 的 LVDS 模式下大约 187mW,深睡不到 1mW。适合谁?手上有老平台、想换高分 eDP 屏、又不想动主控的硬件和驱动工程师。下面按我实际调这块芯片的顺序,把配置、时序、避坑一次讲透。

2. 先搞懂它怎么转:数据通路与寄存器映射

2.1 从 LVDS/RGB 到 eDP 的信号链路

NCS8801S 内部干的事分三段:输入接收、时序重整、eDP 打包发送。LVDS 模式下,奇像素走 A 通道(LVDIO[3:0]、LVCIO),偶像素走 B 通道(LVDIE[3:0]、LVCIE),单通道时只用 A 通道,B 通道在寄存器里关掉。RGB 模式下,D[23:0] 按默认映射成 R[7:0]、G[7:0]、B[7:0],DE、HSYNC、VSYNC、PCLK 各占一脚。输入进来的像素数据先过一遍时序检测,芯片会把检测到的 Htotal、Hactive、Vtotal、Vactive 等参数写进 0xE0~0xEF 这一组只读寄存器,方便你反查输入时序对不对。

输出侧是 eDP 主通道加 AUX 通道。主通道 DPO[3:0]P/N 差分对,AUX 是 DPAUXP/N,用来跑 eDP 握手协议、读写 TCON 的 DPCD 和 EDID。芯片内置了 eDP handshake 协议,也就是说链路训练(Link Training)不用主控操心,它自己跟屏协商。寄存器分两个 Device ID:0x70 管输入格式、时序、eDP 发送参数;0x75 管模拟侧、lane 交换、LVDS 通道状态。I2C 从地址就是这两个,配置前先确认 I2CSEL 拉高、CSB 接 DVDD33、MOSI/SCK 接地,否则芯片不进 I2C 从模式。

2.2 关键寄存器分组与默认值

配置这块芯片,核心就几组寄存器,我按功能列一下,方便你对照 datasheet 查:

地址功能默认值说明
0x00输入模式0x00bit[2:0]:000 双通道 LVDS,001 单通道 LVDS,100 RGB
0x03LVDS 通道/极性0x00bit[1:0] 通道交换,bit2 VESA/JEDIA,bit3 极性翻转
0x07eDP TX 配置0x14bit[2:0] lane 数,bit4 速率,bit5 位宽,bit6 硬件训练,bit7 数据使能
0x71加扰控制0x01bit0:0 使能加扰,1 关闭
0x73输出 P/N 交换0x00每 bit 对应一个 lane 的 P/N 翻转
0x74输出位宽0x20bit5:0 为 6bit,1 为 8bit
0x80训练结果只读00 无效,01 失败,10 成功
0x84/0x85TX lane 交换0x10/0x32每个 lane 可映射到任意输出 lane

0x07 这个寄存器最常动。默认 0x14 拆开看:bit[2:0]=100 是 4 lane,bit4=1 是 RBR(1.62Gbps),bit5=0 是 24bit,bit6=0 关硬件训练,bit7=1 使能 eDP 数据。如果你屏是 2 lane、2.7Gbps,就得改成 0x4A 左右(bit[2:0]=010,bit4=0,bit5=0,bit6=1,bit7=1),具体值按你实际 lane 数和速率算。0x75 的 0x00 默认 0xB1,bit7=1 是 HBR,bit0=1 是模拟复位释放,这个别乱动,改了可能直接黑屏。

2.3 上电与 I2C 配置的最小流程

实际 bring-up 我一般按这个顺序走,每一步都能单独验证:

# 1. 供电顺序:先 1.2V core,再 2.5V/3.3V IO,最后释放 PWD # PWD 高有效,正常工作时拉低;RSTB 低有效,复位后拉高 # 2. 确认 I2C 从地址:Device ID 0x70 和 0x75 i2cdetect -y 1 # 预期看到 0x70 和 0x75 两个地址响应 # 3. 读 Device ID 确认通信正常 i2cget -y 1 0x70 0x00 # 返回 0x00 说明能读到,通信链路 OK # 4. 配置输入模式:双通道 LVDS i2cset -y 1 0x70 0x00 0x00 # 5. 配置 eDP 输出:2 lane、HBR、24bit、硬件训练开 i2cset -y 1 0x70 0x07 0x4A # 6. 使能加扰(默认就是使能,确认一下) i2cset -y 1 0x70 0x71 0x00 # 7. 读训练结果 i2cget -y 1 0x70 0x80 # 返回 0x02 表示 handshake successful

这段脚本里,i2cdetect是确认芯片有没有正常上电、I2C 有没有接对。i2cget 0x70 0x00读输入模式寄存器,返回 0x00 说明芯片活着。0x07 写 0x4A 是我按 2 lane HBR 24bit 算的,你换成 4 lane 就是 0x4C 左右,1 lane 就是 0x49。0x80 读回来 0x02 才是训练成功,如果是 0x01 说明握手失败,得回去查 lane 映射和 AUX 通道。注意 I2C 写完之后最好回读一遍确认,有些板子 I2C 上拉电阻偏大,写进去的值会飘。

3. 时序参数怎么填:从输入检测到输出匹配

3.1 输入时序寄存器 0x10~0x1F 的填法

输入时序这组寄存器,地址 0x10 到 0x1F,每个参数占两个字节,高字节在前。以 1920×1080 输入为例,典型值是这样的:

  • Htotal = Hsync + HBP + Hactive + HFP,假设 2200,高字节 0x08,低字节 0x98,写 0x10=0x08、0x11=0x98
  • Hstart = Hsync + HBP,假设 296,写 0x12=0x01、0x13=0x28
  • Hactive = 1920,写 0x14=0x07、0x15=0x80
  • Vtotal = Vsync + VBP + Vactive + VFP,假设 1125,写 0x16=0x04、0x17=0x65
  • Vstart = Vsync + VBP,假设 36,写 0x18=0x00、0x19=0x24
  • Vactive = 1080,写 0x1A=0x04、0x1B=0x38

极性控制单独在 0x1C 和 0x1E,最高位是极性,低 7 位不用管。0x1D 和 0x1F 分别是 Hsync 和 Vsync 宽度。这些值不是拍脑袋来的,是你输入源的实际时序。填错的表现通常是画面偏移、撕裂或者干脆没图。芯片其实有自动检测,0xE0~0xEF 那组只读寄存器会把检测结果吐出来,你可以先读一遍,再决定手填还是让它自适应。0x02 寄存器的 bit1 和 bit2 就是控制 RX/TX 参数自适应的,打开之后芯片会自己跟输入时序对齐,省不少事。

3.2 输出时序寄存器 0x20~0x2F 与屏匹配

输出时序这组跟输入结构一样,但填的是 eDP 屏的时序。这里有个坑:输出时序必须跟屏的 EDID 或者规格书对上,不能照抄输入。比如你输入是 1920×1080,输出屏是 2560×1600,那 0x24/0x25 的 Hactive 就得写 2560,0x2A/0x2B 的 Vactive 写 1600。输出 Htotal、Vtotal 也要按屏的 blanking 算。我一般先把屏的时序表拉出来,把 Hactive、Vactive、Htotal、Vtotal、Hsync width、Vsync width、极性这几项填进去,再读 0x80 看训练结果。

0x2C 和 0x2E 是输出极性控制,最高位决定 Hsync/Vsync 是高有效还是低有效。有些屏规格书标的是 active low,你就得把最高位置 1。这个搞反了,画面会整体偏移或者抖动。0x2D 和 0x2F 是同步宽度,填屏要求的脉宽。输出这组寄存器填完之后,最好用示波器或者 eDP 协议分析仪抓一下 AUX 通道的握手过程,确认链路训练真的过了。没有分析仪的话,就读 0x80 和 0x81/0x82,0x81 和 0x82 会告诉你每个 lane 的 CR_DONE、CHANNEL_EQ_DONE、SYMBOL_LOCKED 状态,哪个 lane 没锁住一目了然。

3.3 参考时钟与 SSC 配置

参考时钟这块,XTALIN/XTALOUT 接晶体或者单端时钟都行,频率 19MHz 到 100MHz,典型 24MHz。用晶体的话,XVDD33 供 2.5V 或 3.3V,负载电容按晶体规格配。用单端时钟就直接从 XTALIN 灌进去,XTALOUT 悬空。芯片内置 5000ppm 的 SSC 发生器,eDP 输出默认带下展频,展频频率 30kHz 到 33kHz。如果你的屏对 SSC 敏感,可以在 0x71 里关掉加扰,但一般不建议关,EMI 会变差。

参考时钟频率直接影响 eDP 的像素时钟。24MHz 晶振经过内部 PLL 倍频到 eDP 需要的速率。如果你给的是 27MHz 或者 25MHz,芯片也能跑,但 PLL 参数不一样,得确认输出速率对不对。我遇到过一块板子,晶振焊成了 26MHz,结果 eDP 链路训练一直失败,读 0x80 返回 0x01,换了 24MHz 立马就好。所以晶振频率别想当然,拿示波器量一下 XTALIN 上的实际频率。

4. 避坑与排查:调这块芯片最容易翻车的五个点

4.1 现象:I2C 读不到 0x70 或 0x75

原因:I2CSEL 没拉高,或者 CSB 没接 DVDD33,芯片没进 I2C 从模式。也有可能是 MOSI/SCK 没接地,芯片误判成 SPI 模式。另外 PWD 如果拉高,芯片处于掉电状态,I2C 也不响应。

解决:先量 I2CSEL、CSB、MOSI、SCK 四个脚的电平,I2CSEL 和 CSB 必须是高,MOSI 和 SCK 必须是低。PWD 正常工作时拉低,RSTB 复位后拉高。确认供电 1.2V 和 3.3V 都到位,再重新 i2cdetect。

4.2 现象:eDP 训练失败,0x80 返回 0x01

原因:lane 映射不对,或者输出 P/N 接反,或者 AUX 通道没通。0x84/0x85 的 lane 交换配置跟实际 PCB 走线不匹配是最常见的。有些板子画的时候 lane0 和 lane1 交叉了,但寄存器没改,训练就过不了。

解决:先读 0x81 和 0x82,看哪个 lane 没锁住。然后对照 PCB 走线,改 0x84/0x85 的 lane 映射。P/N 接反的话,改 0x73 对应 bit 翻转。AUX 通道用示波器看 DPAUXP/N 上有没有波形,没有的话查 AUX 的 AC 耦合电容(典型 100nF)和上拉。

4.3 现象:画面出来但颜色不对,偏色或者缺色

原因:RGB 位宽配置错了。0x74 的 bit5 控制 6bit 还是 8bit,默认 0x20 是 8bit。如果你屏是 6bit 但配了 8bit,或者反过来,颜色就会不对。另外 RGB 模式下 D[23:0] 的映射如果跟实际接线不一致,也会缺色。

解决:确认屏的位宽,改 0x74。RGB 模式下检查 D[23:16] 是不是 R、D[15:8] 是不是 G、D[7:0] 是不是 B,跟原理图对一遍。LVDS 模式下检查 0x03 的 VESA/JEDIA 模式位,有些屏是 JEDIA 格式,配成 VESA 就会偏色。

4.4 现象:深睡模式功耗降不下来

原因:PWD 脚没拉高,或者 0x75 的 0x22 寄存器里 RGB 输入掉电位、LVDS 通道掉电位没置起来。深睡模式要求芯片内部各通道都关掉,只留必要的偏置。

解决:进深睡前先把 PWD 拉高,然后确认 0x75 的 0x22 寄存器 bit2(RGB 掉电)、bit6(LVDS A 通道掉电)、bit7(LVDS B 通道掉电)都置 1。如果还降不下来,量一下 AVDD12 和 DVDD12 的电流,正常深睡应该小于 1mA。

4.5 现象:高分辨率下画面闪烁或者间歇黑屏

原因:eDP 速率或者 lane 数不够。2560×1600@60Hz 24bit 需要的数据率算一下:2560×1600×24×60 ≈ 5.9Gbps,2 lane HBR 是 2×2.7=5.4Gbps,不够,得 4 lane 或者 2 lane 但降刷新率。另外 TX 差分幅度和预加重没调好,信号完整性差,也会闪。

解决:先算数据率,确认 lane 数和速率够用。然后调 0x75 的 0x0E 和 0x0F(TX 幅度)以及 0x70 的预加重配置。预加重有 0dB、3.5dB、6dB 三档,长走线或者连接器多的时候加到 6dB。TX 差分峰峰值典型 400mV,可以在 0x75 里微调。

5. 进阶技巧:用 BIST 和只读寄存器快速定位问题

调这块芯片,我最后都会走一遍 BIST(Built-In Self-Test)和只读寄存器回读,这两个手段能省掉大量猜的时间。BIST 在 0x0B 寄存器,bit0 使能,bit[7:4] 选图案。0x0C、0x0D、0x0E 分别设 R、G、B 分量。比如你想让 eDP 输出纯红,就写 0x0B=0x10(使能 BIST,图案选 1),0x0C=0xFF,0x0D=0x00,0x0E=0x00。屏上应该显示纯红。如果显示不对,说明输出链路有问题,跟输入无关,可以排除输入侧。

只读寄存器 0xE0~0xEF 是输入时序检测结果,我一般在上电后先读一遍,跟实际输入源对比。比如 0xE4/0xE5 是检测到的 Hactive,如果读出来跟你的输入分辨率对不上,说明输入时序有问题,先解决输入再管输出。0x80 的训练结果和 0x81/0x82 的 lane 状态,每次改完配置都回读一遍,确认训练成功再往下走。

还有一个技巧是 lane 交换的灵活运用。0x84 和 0x85 允许你把任意输入 lane 映射到任意输出 lane,这在 PCB 走线没法改的时候特别有用。比如实际走线是 lane0 接到了屏的 lane2,你就在 0x84 里把 lane0 的映射改成 10(lane0->lane2),不用飞线。P/N 交换同理,0x73 每个 bit 控制一个 lane 的 P/N 翻转,接反了不用拆板子,改寄存器就行。

最后说个血泪经验:这块芯片的寄存器写完之后一定要回读。我遇到过 I2C 时序 margin 不够,写进去的值过一会儿就飘了,回读才发现。后来在 SCL/SDA 上加了 2.2k 上拉,问题消失。从那以后我每次配置完 NCS8801S,都强制走一遍全寄存器回读,确认值稳定了再继续。希望帮到你。

本文还有配套的精品资源,点击获取

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询