[多媒体][RDK S600][相机扩展板 V1P0 第二路 LPWM 无法触发 GMSL Link B 上的 slave 相机]

  1. 省流版问题描述:我在RDK S600上通过GSML相机转接板连接了AVS115D 双目相机,理论上转接板的ABCD接口都可以用,但是两个FAKRA接口J501和J601都是只有连接到A 位时才能收到数据。有没有什么建议?
  2. 环境描述:
板卡 D-Robotics RDK S600 MCB V1p0(Board Id = 0x5131310)
扩展板 RDK S600 Camera Expansion Board V1P0(2× MAX96712 + 2× mini-FAKRA 4-in-1)
系统 RDK OS 5.1.0;已执行 update_rdkos,hobot-* 包为 5.1.1
内核 6.1.158-rt58-DR-5.1.1-2610202058-gd4b9f0-gf0aa3f(已升级并重启)
miniboot 仍为 5.1.0(升级需交互确认并烧写底层固件,已 hold)
相机 艾利光 AVS115D 双目工业相机,2560×1920@45fps YUV422,MAX96721 加串器,slave/触发模式(每帧需一个 FSYNC 上升沿,无 FSYNC 不出图)
软件路径 HBN:multimedia_samples/sample_vin/get_vin_data + 自建 vp_sensors 配置,/app/multimedia_samples 未修改
rdkos_info 见附件
  1. 预期结果与实际表现:

    -m 0 -l 0(J501 A 位) :white_check_mark: 2560×1920 NV12 @ 45.02fps
    -m 1 -l 0(J601 A 位) :white_check_mark: 正常
    -m 1 -l 1(J601 B 位) :cross_mark: pipeline 正常启动、serializer 0x42 全部 I²C 应答、寄存器与 A 位一致,但相机不输出 MIPI(0x038d/0x0390 恒 0),hbn_vnode_getframe 返回 -43
    -m 0/1 -l 2/3(C/D 位) :cross_mark: 不出图(文档确认这两个位置无 PWM 走线)
  2. 请教问题:

  • HBN 栈下,Link B(第二个 LPWM,MFP7)的触发应该怎么打开?是否需要 HBN 侧显式调用 set_pipe_ex() / enable_mfp()?get_vin_data 类示例应改哪里?

  • max96712_setup_esync() 是 D457 专用,还是也适用于第三方 slave 相机?如果通用,触发它的条件是什么(DT 属性 / soc_trig_pin / config_index bit9 / 其他)?

  • vp_sensors 的 gpio_mfp[] 在 HBN 栈里是否应该生效?为什么驱动仍不写 MFP7?

  • 板上第二路 LPWM(MFP7)设计上对应哪条链路?是否有"一个 4-in-1 口接 2 路 slave 触发相机"的参考配置(HBN / V4L2 均可)?

rdkos_info附件如下

rdkos_info_s600_avs115d.txt (22.1 KB)

先别往 get_vin_data 里加 set_pipe_ex()/enable_mfp(),这两个是 V4L2 驱动接口。HBN 要把 LPWM 输出、gpio_mfp[] 映射和加串器的 FSYNC 透传配齐;MFP7 也不是固定绑定 Link B。

附件日志显示用的是 dummystd,单独填 gpio_mfp[] 或置触发位,还需要对应驱动实现触发配置。把当前 AVS115D 的 vp_sensors 配置文件贴一下,我核对 B 路的 LPWM 使能、映射和实际选用的 sensor 库,系统信息不用再提供。

https://developer.d-robotics.cc/rdk_s_doc/Advanced_development/multimedia_development/multimedia_development/camera_bringup

判断:A 位能跑到 45fps,说明该口的 FSYNC 触发通路本身是通的;B 位 I²C 全应答、寄存器与 A 位一致却不出 MIPI,更像“第二路 LPWM(DOUT1→MFP7)没有真正打到 link1 的 FSYNC 上”——触发未使能,或 deser 未把该 trigger 转发到 link1,两者都还没定因。附件里也没有触发相关报错,最后一次会话是 deser1/link1 按正常 close 路径释放。

四个问题短答:

  1. HBN 应用侧不需要 set_pipe_ex() / enable_mfp(),get_vin_data 不用改。官方 HBN 路径是在 sensor 驱动里:format/init 阶段调 SERDES_OP(priv->dser_dev, trigger_cfg, priv->dser_dev, sen_dev, period, duty)(period=(1000000/fps)*1000 ns,duty 无特殊要求可给 10000),stream on/off 调 trigger_enable;同时 port 的 config_index 置 bit9(+512)打开同步。
  2. max96712_setup_esync():公开文档里没有这个函数,只描述了上面这对通用 SERDES 接口。它是否 D457 专用,要看你们所用 deser 库里它的调用者和它写的寄存器,不能照搬 D457 的参数。
  3. gpio_mfp[](即 deser 的 CAMERA_DES_GPIO_TRIGn 映射)只表达“SOC 的 LPWM 接在哪个 MFP”,文档明确“需 deserial 库中进行相应的支持”。只填它不会自动写 MFP7 寄存器,必须由 trigger_cfg 的实现去消费这个索引。
  4. MFP7 与链路:手册只给板上连接(S600 RX0:DOUT0→MFP5、DOUT1→MFP7;RX1:DOUT2→MFP5、DOUT3→MFP7)。MFP 是解串器引脚,落到哪条 link 由 deser 的 GPIO 配置决定,文档没有“MFP7 固定等于 Link B”这一说。多路分别触发时 trig_pin 写 [5,7],顺序对应 link(该写法出自 S100 示例页,S600 按上表换算)。

能区分原因的两步:

  • 在 sensor 库源码里 grep trigger_cfg / trigger_enable。没有调用的库(比如复用 dummystd)永远不会产生 FSYNC,此时 gpio_mfp 填什么都不生效。
  • A/B 位各跑一次,dump deser 上 MFP7 的 GPIO/输出使能寄存器做对比:B 位该 MFP 从未被写过 → 卡在 deser 库或 trig_pin 索引;写过但 sensor 仍无 MIPI → 再核 AVS115D 的 FSYNC 引脚、分频与极性设置。

配置给到后重点看三处:port_1 的 config_index 是否含 512、deserial 的 gpio_mfp/trig_pin 是否按 [5,7] 排序、vcon 的 lpwm_chn 是否覆盖 DOUT1 所在通道。另外确认 AVS115D 的 sensor 库是自写还是复用 dummystd。

依据:Camera 点亮(HBN gmsl sensor 点亮、曝光同步 sensor 驱动说明、S600 各 RX 的 LPWM→MFP 表)、多路 Camera 及与 Lidar 同步(config_index bit9、trig_pin 多值、LPWM json)、RDK S600 相机扩展板。