根据你的补充信息,问题更加清晰了。这是一个典型的 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/0x08A4 的 0xE4 值需要仔细核对。根据 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"
关键问题确认
请补充以下信息,方便进一步定位:
- MAX96712 的完整初始化序列(特别是上电时序和 Lane 配置部分)
- S600 的 DTS 中 MIPI Host 节点配置
dmesg | grep -i mipi的完整输出- 使用的 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 配置参考代码。