RDK S600 平台 v4l2 架构的serdes相机 mipi 探测lane数和实际配置lane数不匹配问题

根据你的补充信息,问题更加清晰了。这是一个典型的 MIPI Lane Mapping 错位 问题,而不是简单的 Lane 数量配置问题。

核心问题分析

从日志 clk=0 d0=1 d1=0 d2=1 d3=0 可以看到:

  • 只有 D0 和 D2 有信号,D1 和 D3 无信号
  • 这不是"只通了2 Lane",而是 Lane 映射错位PHY 校准失败
  • phy_cal=0x0 表示 PHY 校准未通过,这是关键

排查步骤(按优先级)

1. 检查 MAX96712 Lane Assignment 配置

你提供的寄存器配置中,0x08A3/0x08A40xE4 值需要仔细核对。根据 MAX96712 Datasheet:

// 当前配置
{ 0x08A3, 0xE4 }, // Map data lanes for PHY 1
{ 0x08A4, 0xE4 }, // Map data lanes for PHY 0

问题点0xE4 的位定义需要确认是否正确映射了 4 Lane。

建议操作

# 1. 回读并打印这些关键寄存器
i2cget -y <bus> <deser_addr> 0x08A0
i2cget -y <bus> <deser_addr> 0x08A3
i2cget -y <bus> <deser_addr> 0x08A4
i2cget -y <bus> <deser_addr> 0x090A
i2cget -y <bus> <deser_addr> 0x094A
i2cget -y <bus> <deser_addr> 0x098A
i2cget -y <bus> <deser_addr> 0x09CA

# 2. 尝试修改 Lane Mapping 为默认值
# 参考 MAX96712 Datasheet 的 Lane Assignment 章节
# 通常 4 Lane 默认映射是:0x00 或 0x15 等,需要查表确认

2. 检查 S600 MIPI Host 的 Lane 配置

S600 的 MIPI Host 可能需要显式配置 Lane Mapping。查看 DTS 中是否有类似配置:

&hobot_mipi_host1 {  // 根据日志是 RX1
    status = "okay";
    lane-num = <4>;
    lane-map = <0 1 2 3>;  // 确认是否有此配置,或类似配置
    phy-cal-enable = <1>;  // PHY 校准使能
};

排查命令

# 查看当前 mipi_host1 的配置
cat /sys/class/vps/mipi_host1/param/*

# 查看 debug 信息
cat /sys/class/vps/mipi_host1/debug

3. PHY 校准失败问题 (phy_cal=0x0)

日志中 phy_cal=0x0 表示 PHY 校准未通过,这可能是:

  • 时序问题:MAX96712 上电时序与 S600 MIPI Host 初始化时序不匹配
  • 阻抗/信号质量问题:虽然使用官方套件,但可能存在接触不良

建议操作

# 1. 尝试禁用 PHY 校准(仅调试用)
# 查看是否有相关 sysfs 节点
ls /sys/class/vps/mipi_host1/param/ | grep -i cal

# 2. 调整上电时序
# 在驱动中增加 MAX96712 上电后的延迟
msleep(100);  // 增加 100ms 延迟再初始化 MIPI Host

4. 尝试不同的 Lane 配置组合

既然配置 4 Lane 检测到 D0/D2,配置 2 Lane 检测到 1 Lane,说明 Lane 映射有偏移。

尝试以下配置组合

// 方案 A: 强制配置为 2 Lane (使用 D0/D2)
{ 0x08A0, 0x02 }, // 2x2 mode
{ 0x08A3, 0x00 }, // PHY 1 mapping
{ 0x08A4, 0x00 }, // PHY 0 mapping
{ 0x090A, 0x40 }, // 2 lanes

// 方案 B: 调整 Lane Mapping
{ 0x08A0, 0x04 }, // 2x4 mode
{ 0x08A3, 0x00 }, // 尝试不同映射值
{ 0x08A4, 0x00 },
{ 0x090A, 0xC0 }, // 4 lanes

5. 检查 GMSL 链路状态

确认 GMSL 链路是否真的 Lock,以及带宽协商结果:

# 读取 MAX96712 链路状态寄存器
i2cget -y <bus> <deser_addr> 0x00  # Link Status
i2cget -y <bus> <deser_addr> 0x01  # Lock Status

# 查看 dmesg 中的 GMSL 链路信息
dmesg | grep -i "max96712\|gmsl\|link"

关键问题确认

请补充以下信息,方便进一步定位:

  1. MAX96712 的完整初始化序列(特别是上电时序和 Lane 配置部分)
  2. S600 的 DTS 中 MIPI Host 节点配置
  3. dmesg | grep -i mipi 的完整输出
  4. 使用的 S600 固件版本cat /etc/version 或类似命令)

临时解决方案

如果急需验证数据链路是否通畅,可以尝试:

# 1. 禁用 MIPI 检查(仅调试)
echo 1 > /sys/class/vps/mipi_host1/param/nocheck

# 2. 强制跳过 PHY 校准(如果支持)
# 需要查看驱动源码确认是否有此选项

# 3. 使用 get_vin_data 测试是否能出图
./get_vin_data -c 1 -w 1920 -h 1080 -f YUV422

社区类似案例

x5 平台点亮 sensor,mipi 报错 中,用户遇到类似问题,最终发现是 Lane Mapping 配置与硬件不匹配,调整 0x08A3/0x08A4 寄存器后解决。

建议将你的排查过程和寄存器配置更新到帖子中,方便 FAE 或社区大佬进一步协助。如果问题持续,建议联系地瓜 FAE 获取 S600 平台的 MIPI Host 配置参考代码。