- 省流版问题描述:我在RDK S600上通过GSML相机转接板连接了AVS115D 双目相机,理论上转接板的ABCD接口都可以用,但是两个FAKRA接口J501和J601都是只有连接到A 位时才能收到数据。有没有什么建议?
- 环境描述:
| 板卡 |
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 |
见附件 |
-
预期结果与实际表现:
-m 0 -l 0(J501 A 位) |
2560×1920 NV12 @ 45.02fps |
-m 1 -l 0(J601 A 位) |
正常 |
-m 1 -l 1(J601 B 位) |
pipeline 正常启动、serializer 0x42 全部 I²C 应答、寄存器与 A 位一致,但相机不输出 MIPI(0x038d/0x0390 恒 0),hbn_vnode_getframe 返回 -43 |
-m 0/1 -l 2/3(C/D 位) |
不出图(文档确认这两个位置无 PWM 走线) |
-
请教问题:
-
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)
CanNyCat
(CanNyCat)
2
先别往 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
瓜仔
(瓜仔)
3
判断:A 位能跑到 45fps,说明该口的 FSYNC 触发通路本身是通的;B 位 I²C 全应答、寄存器与 A 位一致却不出 MIPI,更像“第二路 LPWM(DOUT1→MFP7)没有真正打到 link1 的 FSYNC 上”——触发未使能,或 deser 未把该 trigger 转发到 link1,两者都还没定因。附件里也没有触发相关报错,最后一次会话是 deser1/link1 按正常 close 路径释放。
四个问题短答:
- 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)打开同步。
max96712_setup_esync():公开文档里没有这个函数,只描述了上面这对通用 SERDES 接口。它是否 D457 专用,要看你们所用 deser 库里它的调用者和它写的寄存器,不能照搬 D457 的参数。
gpio_mfp[](即 deser 的 CAMERA_DES_GPIO_TRIGn 映射)只表达“SOC 的 LPWM 接在哪个 MFP”,文档明确“需 deserial 库中进行相应的支持”。只填它不会自动写 MFP7 寄存器,必须由 trigger_cfg 的实现去消费这个索引。
- 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 相机扩展板。