写在前面

MAX96745 是 ADI(原 Maxim)的 eDP/DisplayPort 转 GMSL2 车规显示串行器,官方 datasheet 不公开(需 NDA)。本文档基于 Rockchip Linux 内核与 U-Boot 开源驱动(GPL-2.0)逆向整理,寄存器信息为芯片接口技术事实,非 ADI 官方文档;如需商用授权或官方规格,请联系 Analog Devices 申请。

来源声明:本文基于以下开源驱动整理,遵循 GPL-2.0 许可,转载需保留本声明与来源链接:

  • U-Boot:neggles/u-boot-quartz64 → drivers/i2c/muxes/max96745.c
  • Linux 内核(kernel-5.10-rockchip):drivers/mfd/max96745.c、drivers/pinctrl/pinctrl-max96745.c、include/linux/mfd/max96745.h

1. 芯片是什么

MAX96745 把 SoC 的 eDP / DisplayPort 视频信号串行化成 GMSL2 链路,通过一根同轴电缆(FAKRA 连接器)或 STP 双绞线传输到远端显示器,同时通过同一条线反向隧道 I²C / UART / GPIO 控制信号,并支持 Power-over-Coax(PoC)。

项目内容
厂商Analog Devices(原 Maxim Integrated)
类型eDP/DP → GMSL2 串行器(Serializer)
输出双通道 GMSL2(链路 A / 链路 B)
车规型号示例MAX96745GTN/V+T(AEC-Q100,TQFN)
评估板MAX96745-AAG-EVK#
同系列MAX96755 / MAX96755F(同类 eDP→GMSL2)
寄存器寻址16 位地址 / 8 位数据,最大寄存器 0x8000
设备树 compatiblemaxim,max96745 / maxim,max96745-pinctrl / maxim,max96745-bridge

典型应用:车载信息娱乐显示、仪表盘、后排娱乐屏、工业显示网关——凡是"SoC 的 eDP 输出要拉一根长线到屏幕"的场景。

2. 架构总览

MAX96745 系统架构SoC 主控eDP / DisplayPort视频输出I²C / UARTGPIO 控制MAX96745eDP/DP RX(训练/车道/速率)视频处理 + FRC 帧率转换GMSL2 串行化(链路 A / B)Remote CC(I²C/UART 隧道)GPIO 隧道(MFP0~25)线故障监测(LF)16 位寄存器 · 0x0000~0x8000链路 A同轴 / STP远端显示器 1链路 B同轴 / STP远端显示器 2视频 + 双向控制信号共缆传输,支持 PoC 远端供电
图 1 MAX96745 系统架构:eDP 输入,双通道 GMSL2 输出,控制信号反向隧道。

3. 特性详解

3.1 eDP/DisplayPort 接收端

从寄存器布局可以确认这是一颗显示方向的串行器(对比摄像头方向的 MAX96717 是 CSI-2 输入):

寄存器位名称说明
0x641A7:4DPRX_TRAIN_STATEDP RX 链路训练状态(LT 阶段)
0x70000LINK_ENABLEDP 链路使能
0x70707:0MAX_LANE_COUNTDP lane 数量
0x70747:0MAX_LINK_RATEDP 链路速率档位
0x01015:0BPP输入每像素位数

DP RX 的 lane 数和链路速率决定了能传输的最大分辨率/刷新率组合(典型 4-lane HBR2/HBR3,具体以 ADI 官方规格为准)。

3.2 双通道 GMSL2 输出(链路 A / B)

两颗远端显示器可以各挂一条链路,或做镜像/复制输出。链路 A/B 的寄存器完全对称:

功能链路 A链路 B
链路使能0x0028(LINK_EN)0x0032(LINK_EN)
链路复位0x0029(RESET_LINK / RESET_ONESHOT)0x0033(同左)
链路锁定状态0x002A(LINK_LOCKED)0x0034(同左)
远程控制通道开关0x0076(DIS_REM_CC)0x0086(DIS_REM_CC)
视频发送激活0x0107 bit6(VID_TX_ACTIVE_A)0x0107 bit7(VID_TX_ACTIVE_B)
视频状态0x0102(PCLKDET/DRIFT_ERR/OVERFLOW/FIFO_WARN)0x0108(同左)
线故障状态0x0026(LF_0/LF_1)0x0027(LF_2/LF_3)

链路使能后必须轮询 LINK_LOCKED,U-Boot 驱动里未锁定直接返回 -ENODEV——这是最常见的"串行器不工作"排查点。

3.3 视频发送与状态监测

  • 0x0100:VID_TX_EN(发送使能)+ VID_LINK_SEL(选择输出到哪条链路)
  • 0x0102/0x0108:实时状态——PCLKDET(像素时钟检测)、DRIFT_ERR(时钟漂移)、OVERFLOW(FIFO 溢出)、FIFO_WARN
  • 0x0107:VID_TX_ACTIVE,驱动用它在 extcon 里上报"视频输出已激活"(EXTCON_JACK_VIDEO_OUT)

3.4 FRC 帧率转换

0x0750~0x0752 是一组帧率转换寄存器(FRCEN、FRCGAIN、FRCSDEN、FRCDATAWIDTH、FRCASYNCEN、FRCHSPOL/FRCVSPOL、FRCDCMODE 等)。显示串行器常用它做帧率/时序适配(例如 60Hz 输入转 120Hz 输出给高刷屏),配置时要同步确认输入 BPP 与输出时序的匹配。

3.5 GPIO 隧道(MFP0 ~ MFP25)

这是 GMSL 串行器最有价值的功能之一:把本地 GPIO 通过链路隧道到远端,反过来远端 GPIO 也能读回来。

  • 26 个多功能引脚 MFP0~MFP25
  • 每引脚 4 个寄存器(间隔 8 字节):
    GPIO_A_REG(gpio) = 0x0200 + gpio × 8   (方向/输出配置)
    GPIO_B_REG(gpio) = 0x0201 + gpio × 8   (TX 映射 ID/上下拉)
    GPIO_C_REG(gpio) = 0x0202 + gpio × 8   (RX 映射 ID/边沿速率)
    GPIO_D_REG(gpio) = 0x0203 + gpio × 8   (A/B 链路收发使能)
    
  • 每个引脚可配:GPIO_TX_A_x / GPIO_TX_B_x(发向链路 A/B 的远端引脚)、GPIO_RX_A_x / GPIO_RX_B_x(从链路 A/B 的远端引脚接收)、GPIO(本地直连)、I2C、UART(MFP3/MFP7)
  • GPIO TX/RX ID 范围 0~31,用于告诉远端"这个 GPIO 对应远端第几号脚"

Linux pinctrl 驱动把这些封装成 pin function(如 GPIO_TX_A_5),设备树里直接指定 function 即可,不用手写寄存器。

3.6 I²C / UART 隧道

  • 芯片本身是 I²C MUX:本地 I²C 总线通过 Remote CC 通道访问链路远端器件
  • 两个通道对应两条链路:通道 0 走链路 A(0x0076 DIS_REM_CC 控制)、通道 1 走链路 B(0x0086)
  • 设备树里用 i2c-mux-idle-disconnect 属性控制空闲时是否断开
  • UART 复用 MFP3/MFP7

3.7 线故障监测(Line Fault Monitor)

驱动实现了完整的线缆故障诊断(sysfs 接口 line_fault_monitor):

  • 使能:0x0005 的 PU_LF0~PU_LF3(对应 LMN0~3 引脚)
  • 状态:0x0026(LF_0/LF_1)、0x0027(LF_2/LF_3)
状态编码含义
0b000对电源短路
0b001对地短路
0b010正常
0b011线路开路
0b1XX线间短路

这对车载线束排查非常实用——不用万用表就能知道哪根线断了还是短路了。

3.8 复位、电源与功耗管理

  • 0x0010:RESET_ALL(bit7)、SLEEP(bit3)
  • 电源引脚:enable-gpio(高有效,上电后需 200ms)、pwdnb-gpio(低有效,30ms)
  • 驱动用 regmap 缓存(REGCACHE_RBTREE)支持 suspend/resume,休眠时缓存寄存器、唤醒后一次性同步

4. 引脚定义(驱动确认)

说明:MAX96745 的物理封装引脚(TQFN 具体引脚号、电源/地/功能矩阵)属于 ADI datasheet 内容,官方不公开。以下为从开源驱动逆向确认的逻辑/功能引脚,可指导软件配置;硬件设计请向 ADI 申请官方文档。

4.1 多功能引脚 MFP0 ~ MFP25(26 个)

pinctrl 驱动确认,每个 MFP 引脚可配置为以下功能之一:

功能方向说明
GPIO本地本地普通 GPIO(输入 / 输出 / 上下拉)
GPIO_TX_A_x本地 → 链路 A把本地 GPIO 状态隧道发送到链路 A 远端 x 号脚
GPIO_TX_B_x本地 → 链路 B同上,发往链路 B
GPIO_RX_A_x链路 A → 本地读取链路 A 远端 x 号脚状态
GPIO_RX_B_x链路 B → 本地读取链路 B 远端 x 号脚状态
I2C本地复用为 I2C(仅 MFP3 / MFP7)
UART本地复用为 UART(仅 MFP3 / MFP7)
  • x = 0~31(GPIO 隧道远端映射 ID,寄存器 GPIO_TX_ID / GPIO_RX_ID)
  • 每个引脚 4 个配置寄存器(0x0200 + gpio×8 起),方向 / 隧道映射 / 上下拉独立可配

引脚清单(26 个多功能引脚):

引脚可用功能
MFP0 ~ MFP2GPIO / GPIO_TX_A_x / GPIO_TX_B_x / GPIO_RX_A_x / GPIO_RX_B_x
MFP3上述功能 + I2C + UART
MFP4 ~ MFP6GPIO / GPIO_TX_A_x / GPIO_TX_B_x / GPIO_RX_A_x / GPIO_RX_B_x
MFP7上述功能 + I2C + UART
MFP8 ~ MFP25GPIO / GPIO_TX_A_x / GPIO_TX_B_x / GPIO_RX_A_x / GPIO_RX_B_x

4.2 线故障监测引脚 LMN0 ~ LMN3(4 个)

从 0x0005 的 PU_LF0~PU_LF3 与 0x0026 / 0x0027 的 LF_0~LF_3 推断:

引脚使能位状态位监测对象
LMN0PU_LF0LF_0链路通道 0
LMN1PU_LF1LF_1链路通道 1
LMN2PU_LF2LF_2链路通道 2
LMN3PU_LF3LF_3链路通道 3

4.3 控制与电源引脚

从设备树属性确认:

引脚设备树属性极性 / 时序说明
EN(使能)enable-gpios高有效,200ms芯片上电使能
PWDNBpwdnb-gpios低有效,30ms掉电 / 复位控制(低 = 关闭)

4.4 接口引脚(接口级,推断)

以下为接口级引脚(具体封装引脚号需官方文档):

接口说明依据
eDP / DP 输入多 lane(lane 数可配)+ DP AUX0x7070 MAX_LANE_COUNT、0x641A 训练状态
GMSL2 输出 ASIO+/SIO-(或同轴单端)链路 A 寄存器组
GMSL2 输出 BSIO+/SIO-(或同轴单端)链路 B 寄存器组
本地 I2CSCL / SDA(16 位寄存器配置总线)i2c 驱动
电源核心供电 + PoC(Power-over-Coax)enable / pwdnb 时序 + PoC 支持

物理封装(TQFN)的完整引脚图与功能矩阵请向 ADI 申请官方 datasheet(NDA)。

5. 寄存器速查总表

4.1 系统与复位

地址位名称说明
0x00053:0PU_LF3~PU_LF0线故障监测使能(每 bit 对应 LMN0~3)
0x00107RESET_ALL全复位
0x00103SLEEP睡眠
0x00133LOCKED链路锁定标志
0x00132ERROR链路错误标志
0x00707:0I2C_FAST_MODEI2C 快速模式配置(驱动写 0x16)

4.2 链路 A / B

地址位名称说明
0x00262:0 / 6:4LF_0 / LF_1链路 A 侧通道 0/1 线故障
0x00272:0 / 6:4LF_2 / LF_3链路 B 侧通道 2/3 线故障
0x0028 / 0x00327LINK_EN链路 A / B 使能
0x0029 / 0x00330RESET_LINK链路 A / B 复位
0x0029 / 0x00331RESET_ONESHOT链路 A / B 一次性复位
0x002A / 0x00340LINK_LOCKED链路 A / B 锁定状态
0x0076 / 0x00867DIS_REM_CC禁用链路 A / B 远程控制通道

4.3 视频

地址位名称说明
0x01002:1VID_LINK_SEL视频输出链路选择
0x01000VID_TX_EN视频发送使能
0x01015:0BPP每像素位数
0x01027PCLKDET_A链路 A 像素时钟检测
0x01026DRIFT_ERR_A链路 A 时钟漂移错误
0x01025OVERFLOW_A链路 A FIFO 溢出
0x01024FIFO_WARN_A链路 A FIFO 警告
0x01022LIM_HEART心跳限制
0x01077:6VID_TX_ACTIVE_B / _A链路 B / A 视频发送激活
0x01087:4PCLKDET_B / DRIFT_ERR_B / OVERFLOW_B / FIFO_WARN_B链路 B 视频状态

4.4 GPIO / MFP(gpio = 0~25)

寄存器组位名称说明
A(0x0200+gpio×8)7RES_CFG电阻配置
A5TX_COM_EN发送公共端使能
A4 / 3GPIO_OUT / GPIO_IN输出 / 输入
A0GPIO_OUT_DIS输出禁用
B(0x0201+gpio×8)7:6PULL_UPDN_SEL上下拉选择
B5OUT_TYPEC输出类型
B4:0GPIO_TX_IDGPIO TX 映射 ID(0~31)
C(0x0202+gpio×8)7OVR_RES_CFG电阻配置覆盖
C6:5IO_EDGE_RATEIO 边沿速率
C4:0GPIO_RX_IDGPIO RX 映射 ID(0~31)
D(0x0203+gpio×8)5GPIO_IO_RX_ENIO RX 使能
D4GPIO_OUT_LGC输出逻辑
D3 / 2GPIO_RX_EN_B / GPIO_TX_EN_B链路 B 收 / 发使能
D1 / 0GPIO_RX_EN_A / GPIO_TX_EN_A链路 A 收 / 发使能

4.5 FRC 帧率转换

地址位名称说明
0x07507:6FRCZEROPAD零填充
0x07505FRCZPEN零填充使能
0x07504FRCSDGAIN增益(简化)
0x07503FRCSDENFRC 使能(简化)
0x07502:1FRCGAINFRC 增益
0x07500FRCENFRC 使能
0x07513FRCDATAWIDTH数据宽度
0x07512FRCASYNCEN异步模式
0x07511 / 0FRCHSPOL / FRCVSPOLHS / VS 极性
0x07521:0FRCDCMODEDC 模式

4.6 DP 接收

地址位名称说明
0x641A7:4DPRX_TRAIN_STATEDP 链路训练状态
0x70000LINK_ENABLEDP 链路使能
0x70707:0MAX_LANE_COUNTlane 数量
0x70747:0MAX_LINK_RATE链路速率

6. 初始化流程(由驱动推导)

1. 上电:enable GPIO = 1 → 等待 200ms → pwdnb GPIO = 0 → 等待 30ms
2. 全复位:0x0010 写 RESET_ALL=1 → 等待 100ms
3. I2C 快速模式:0x0070 = 0x16
4. (可选)线故障监测:0x0005 置位 PU_LFx
5. 链路使能:0x0028(A)/ 0x0032(B)写 LINK_EN=1
6. 等待锁定:轮询 0x002A(A)/ 0x0034(B)LINK_LOCKED=1
   → 超时未锁定说明链路物理层有问题(线序/供电/对端未上电)
7. 视频发送:0x0100 写 VID_TX_EN=1 + VID_LINK_SEL 选择链路
8. GPIO 隧道:按需配置 MFP 的 0x0200~0x0203
   (Linux 下直接用 pinctrl 的 function,如 GPIO_TX_A_5)
9. I2C 隧道:通过 0x0076/0x0086 的 DIS_REM_CC 切换通道访问远端器件

7. 设备树配置示例

以下设备树基于驱动代码推断(I2C 地址和 GPIO 编号按实际硬件调整):

&i2c4 {
    max96745: max96745@48 {            /* I2C 地址按硬件实际修改 */
        compatible = "maxim,max96745";
        reg = <0x48>;
        enable-gpios = <&gpio2 5 GPIO_ACTIVE_HIGH>;   /* 上电使能 */
        pwdnb-gpios  = <&gpio2 6 GPIO_ACTIVE_LOW>;    /* 低有效 */
        i2c-mux-idle-disconnect;                       /* 空闲断开 MUX */
        line-fault-monitor = <0>;                      /* 使能 LMN0 监测 */

        #address-cells = <1>;
        #size-cells = <0>;

        /* 链路 A 远端器件(通过 Remote CC 隧道访问) */
        link_a_dev: link_a@50 {
            reg = <0x50>;                              /* 远端器件 I2C 地址 */
        };

        /* 链路 B 远端器件 */
        link_b_dev: link_b@51 {
            reg = <0x51>;
        };
    };
};

注:以上 I2C 地址 0x48 为常见默认值,需以实际硬件/ADI 确认为准;GPIO 编号按你的板卡原理图修改。

8. 与同系列芯片对比

芯片方向输入输出用途
MAX96745串行器eDP / DisplayPort双 GMSL2车载/工业显示长线传输
MAX96755 / F串行器eDPGMSL2同类显示串行器
MAX96717串行器MIPI CSI-2GMSL2摄像头信号上行车
MAX96789串行器多路GMSL2摄像头聚合(寄存器手册已另文整理)
MAX96724解串器4× GMSL2/1CSI-2摄像头信号聚合接收

选型要点:显示方向选 MAX96745/96755,摄像头方向选 MAX96717/96789;需要多路输入聚合选解串器(MAX96724 等)。

9. 参考资料

驱动源码

来源仓库文件
U-Bootneggles/u-boot-quartz64drivers/i2c/muxes/max96745.c
Linux MFDkernel-5.10-rockchipdrivers/mfd/max96745.c
Linux Pinctrl同上drivers/pinctrl/pinctrl-max96745.c
Linux 头文件同上include/linux/mfd/max96745.h

官方资料

  • ADI 官方产品页与 datasheet 不公开(需 NDA),可通过 ADI 官网联系 FAE 申请
  • ADI 官方 GMSL 开源入口:https://github.com/analogdevicesinc/gmsl
  • ADI GMSL2 硬件设计与验证指南(公开 PDF):Public GMSL2 Hardware Design and Validation Guide

本文档由开源驱动逆向整理,寄存器信息为芯片接口技术事实,仅供工程参考,不构成 ADI 官方规格承诺。