【多媒体】【摄像头】RDK S100调试红外摄像头dump数据报错

RDK S100 开发板serdes那路接红外摄像头,模组初始化成功之后,使用get_vin_data 应用dump数据报错,错误信息如下:
08-26 23:23:53.728 I/ ( 3255): [51.974434][camera_diag_gpio]:[gpio_polling_thread][94] gpio polling thread starting!
08-26 23:23:53.728 I/ ( 3255): [51.974461][camera_diag_mon]:[mon_sub_list_thread][526] Local mon_type1 sub thread enter…
08-26 23:23:53.728 I/ ( 3255): [51.974506][camera_diag_gpioe]:[gpioe_epoll_thread][203] gpioe polling thread starting!
08-26 23:23:53.728 I/ ( 3255): [51.974522][camera_diag_gpioe]:[diag_gpioe_init][354] sub_thid 0xffffb46ef120, thread_id 0xffffb4eff120
08-26 23:23:53.728 I/ ( 3255): [51.974525][camera_diag_mon]:[mon_sub_list_thread][526] Local mon_type2 sub thread enter…
08-26 23:23:53.728 I/ ( 3255): [51.974541][camera_diag_gpioe]:[diag_gpioe_init][355] done
08-26 23:23:53.728 I/ ( 3255): [51.974621][camera_diag_gpio]:[gpio_polling_thread][94] gpio polling thread starting!
08-26 23:23:53.728 I/ ( 3255): [51.974659][camera_diag_mon]:[mon_sub_list_thread][526] Remote mon_type1 sub thread enter…
08-26 23:23:53.728 I/ ( 3255): [51.974697][camera_diag_gpioe]:[gpioe_epoll_thread][203] gpioe polling thread starting!
08-26 23:23:53.728 I/ ( 3255): [51.974716][camera_diag_gpioe]:[diag_gpioe_init][354] sub_thid 0xffffb26af120, thread_id 0xffffb2ebf120
08-26 23:23:53.728 I/ ( 3255): [51.974720][camera_diag_mon]:[mon_sub_list_thread][526] Remote mon_type2 sub thread enter…
08-26 23:23:53.728 I/ ( 3255): [51.974728][camera_diag_gpioe]:[diag_gpioe_init][355] done
08-26 23:23:53.728 I/ ( 3255): [51.974735][camera_diag]:[cam_diag_init][716] cam_diag_init done
08-26 23:23:53.728 I/ ( 3255): [51.974792][max_serial]:max_serial_init sensor0 kp612w serial_init begain
08-26 23:23:53.728 I/ ( 3255): [51.974800][max_serial]:max_serial_init deserial4 max96712 poc_map = 0x1320, poc_mask = 0x1
08-26 23:23:53.728 I/ ( 3255): [51.974804][max_serial]:poc_reset deserial4 max96712 poc_reset 0x1 begain
08-26 23:23:53.728 I/ ( 3255): [51.974812][max96712]:[max96712_get_deserial_link_info][131]deserial4 max96712 config link num is 4
08-26 23:23:53.729 I/ ( 3255): [51.975056][max_serial]:poc_reset desreial4 max96712 poc power down 0x1, set val: 0x1e
08-26 23:23:53.829 I/ ( 3255): [52.075489][max_serial]:poc_reset desreial4 max96712 poc power up 0x1, set val: 0x1f
08-26 23:23:53.929 I/ ( 3255): [52.175552][max_serial]:max_serial_init sensor0 kp612w poc reset 0x1 done
08-26 23:23:53.929 I/ ( 3255): [52.175568][max_serial]:i2c_addr_map sensor0 kp612w i2c map begain
08-26 23:23:53.929 I/ ( 3255): [52.175579][max_serial]:quad_serial_i2c_addr_map sensor0 kp612w serial i2c map 0x42 begin
08-26 23:23:53.929 I/ ( 3255): [52.175583][max_serial]:quad_serial_i2c_addr_map serial_addr=42, sensor_addr=3e, eeprom_addr=52,
08-26 23:23:53.929 I/ ( 3255): [52.175598][max96712]:[max96712_get_deserial_link_info][131]deserial4 max96712 config link num is 4
08-26 23:23:53.929 I/ ( 3255): [52.175777][max96712]:[max96712_link_enable][365]deserial4 max96712 link reg 0x6 = 0xff mask 0x1 val = 0xff
08-26 23:23:53.929 I/ ( 3255): [52.175785][max96712]:[max96712_link_enable][367]fangli add test
08-26 23:23:54.101 I/ ( 3255): [52.347401][max96712]:[max96712_link_lock_check][335]deserial4 max96712 link 0x1 locked, lock time is 0ms
08-26 23:23:54.102 I/ ( 3255): [52.347904][max_serial]:serial_pipeline_init max9295_pipeline_init datatype = 4 ser_model = 2
08-26 23:23:54.113 I/ ( 3255): [52.359043][max_serial]:max_serial_init sensor0 kp612w rst_mfp is 0
08-26 23:23:54.214 I/ ( 3255): [52.460426][sensor_lib]:[camera_sensor_devop_func][1510] thread sen0:kp612w work
08-26 23:23:54.216 I/ ( 3255): [52.462479][sensor_lib]:[camera_sensor_init][1838] sensor0 kp612w init real done
08-26 23:23:54.216 I/ ( 3255): [52.462517][sensor_lib]:[camera_sensor_get_iparam][2504] sensor0 kp612w 640x516@30.0ps state 1-SUCCESS
08-26 23:23:54.216 I/ ( 3255): [52.462543][deserial_lib]:[camera_deserial_csi_attr_parse][617] deserial4 max96712 csi attr rx parse: dphy 4lane 8000Mbps 0x1e
08-26 23:23:54.317 I/ ( 3255): [52.563797][hbn_vpf_interface.c]:[hbn_vnode_set_inter_attr][1532]vin4 ctx0 vnode done.
08-26 23:23:54.317 I/ ( 3255): [52.563808][camera_vpf]:[camera_vpf_vin_attach_deserial][1536] attach deserial4:0 camera0 to vin 0x8765 done
08-26 23:23:54.318 I/ ( 3255): [52.563816][deserial_if]:[hbn_deserial_attach_to_vin][362] deserial4 max96712 link 0 attached to vin 0x8765 as vin done
08-26 23:23:54.318 I/ ( 3255): [52.564430][camera_reg]:[camera_reg_i2c_bit_write8][230] write8 3@0x29: 0x08a0=0x84
08-26 23:23:54.318 I/ ( 3255): [52.564449][deserial_lib]:[camera_deserial_stream_on][1460] deserial4 max96712 lib stream on done 0.562ms
08-26 23:23:54.318 I/ ( 3255): [52.564503][sensor_lib]:[camera_sensor_start][2017] sensor0 kp612w start done 0.001ms
[ 55.569906] [E|MIPI|hobot_mipi_host_ops.c+3930]:[RX4]: hs reception check error 0x10000
[ 55.569912] [E|MIPI|hobot_mipi_host_ops.c+3985]:[RX4]: hs reception state error
[ 55.569914] [E|MIPI|hobot_mipi_host_ops.c+4570]:[RX4]: start error: -1
[ 55.569917] [E|VIN|hobot_vin_node_ops.c+1287]: vin_node_start mipi start fail
[ 55.875360] [E|SEN|hobot_sensor_ops.c+1269]:[SENSOR0]: sensor_evk_do: doing wait evk failed -512

红外摄像头模组信息如下:
serial型号–MAX9295A
serial_addr—0x40(七位地址)
sensor_addr—0x3c
分配率:640x516
datatype:uyuv 422-8bit
fps:30HZ

link lock、video lock、video pipeline lock,pclk detect都成功;

0x8d0 检测到相机数据,但是dump 数据报错;
image

您好,需要确保板卡的镜像为最新版本,最好将完整的报错信息保存到.txt附上

1、logcat 的log和dmesg log都上传到附件中了
log.txt (13.3 KB)
dmesg.txt (1.1 MB)
2、镜像版本为4.0.4

好的,收到您的问题,可以尝试将 MIPI Lane 改为2试一下

1、本地使能nocheck之后,
echo 1 > /sys/class/vps/mipi_host4/param/nocheck
可以往下执行,但是仍然dump 数据报错
log1.txt (13.9 KB)
2、另外,是否有快捷的配置,直接将mipi 4lan 改成2lan?因为平台默认就是4lan

同步本地mipi 4lane改成2lane之后,验证也是同样的报错,dump数据报错
log2.txt (14.5 KB)

应该还需要确保 MAX96712 的寄存器配置也同步修改,让它只用 2 条 Lane 输出。后面也可以尝试改到1 lane。猜测是 每条 Lane 上的数据包过短

地瓜专家,您好,就是有一个疑问,我在前面已经将mipi改成2lane


但是后面打印的结果还是显示4lane 8000Mbps,同时检测寄存器状态也是对的,我理解这个值是从mipi_cfg中获取到的


这个代码本地验证修改之后编译,并不会生效,是否这部分代码是闭源了?

目前地瓜的代码框架,无法配置成1lane,改成1lane之后通讯的直接报错了


log_1lane.txt (18.2 KB)

好的,我这块会把问题记录一下,向内部进行反馈

理论上96712与RX默认4lane状态不需要改变,有点怀疑sensor没有出流?有条件可以用示波器量一下sensor与9295之间的mipi信号线吗,看sensor是否有出流

1、因为模组是内部自带isp的,且与模组厂确认不需要配置触发信号,上电之后即可正常工作,输出数据;
2、模组一体的,无法拆开测量9295与sensor的mipi信号;
3、读取96712的0x8d0寄存器,也是有数据变化的,同时测量96712的mipi data信号,也是有波形变化的

你好,这边反馈的问题已经收到。建议的排查方向:

  1. 可以先不更改 mipi lane 数。一般 GMSL 给到 SOC 是 4 lane,能够满足大部分使用场景。
  2. 检查sensor 驱动 sensor_emode 配置,确保对应关系:
    a. max9295 → S0
    b. YUV → D4
    c. 加串器与 sensor 之间的 mipi lane 数 X → NX
    d. 加串器与 sensor 之间是 DVP 接口 → I1, 是 MIPI 接口,不需要设置 I
  3. 测量 max96712 与 RDK SOC 之间的 mipi 信号,包括 data lane 和 clk lane,需要符合 mipi 协议。测量结果也可以附上。

刘工,红外摄像头模组已经寄给您了,麻烦帮忙更新一下调试状态

模组调试状态,请联系对应的 FAE 或者地瓜工作人员,这里的帖子只讨论技术相关的内容。

刘工,就是有一个疑问,相机默认是3Gbps模式,解串器默认也是设计的3Gbps模式,初始化时不跑poc reset这段代码,就可以link lock成功,但是如果执行poc reset,就无法link lock,这个是什么原因?

log如下:

大佬,你这个sensor驱动的编译环境是按照《RDK S100构建系统开发指南》中的Readme.md文档中说明来搭建的吗?

感谢您的提问!关于传感器驱动的编译环境,确实建议您按照《RDK S100构建系统开发指南》中的 Readme.md 文档来搭建。该文档详细说明了构建环境的依赖、工具链配置以及编译步骤,确保您能正确编译和调试相关驱动代码。

如果您在搭建过程中遇到任何问题(例如依赖缺失、编译错误等),可以提供具体的错误信息,我会尽力协助您解决!

另外,从之前的讨论来看,当前问题的核心可能与 MIPI Lane 配置、MAX96712 寄存器设置或 sensor 驱动初始化流程有关。如果需要进一步排查,可以尝试以下方向:

  1. 确认寄存器配置:确保 MAX96712 的寄存器值(如 lane 数、时钟频率等)与实际硬件需求一致。
  2. 检查 POC Reset 流程:POC Reset 可能会影响 link lock,尝试禁用此功能或调整其参数。
  3. 验证数据流路径:通过 dmesg 或 logcat 确认数据是否成功从 sensor 传输到解串器,再到达 SOC。
  4. 联系 FAE 或技术支持:如果问题复杂且涉及闭源代码或硬件限制,建议直接联系地瓜团队获取更深入的支持。

希望以上信息对您有所帮助!如果有更多细节或新问题,请随时补充。祝您调试顺利! :hammer_and_wrench:

大佬,请问你驱动就是参考ar0820std这个移植的吗?然后跑的是哪个测试应用程序,配置程序是怎么弄的?

感谢您的提问!关于驱动移植和测试配置,以下是详细说明:


1. 驱动是否参考 ar0820std?

目前您提到的“ar0820std”是一个常见的摄像头传感器驱动示例(如OV5640/AR0820等),但RDK S100 的红外摄像头驱动(如 kp612w)通常是基于平台自定义的 sensor 驱动架构,并非直接移植 ar0820std。

  • 如果您看到类似 sensor_libcamera_sensor_devop_func 等函数名,说明这是平台封装的通用 sensor 驱动框架。
  • 具体是否参考了 ar0820std,需查看源码中的 Makefiledriver.c 文件中是否有 #include "ar0820std.h" 或类似引用。如果没有,则是独立开发的。

:white_check_mark: 建议操作
在驱动目录下搜索关键词 ar0820sensor_ar0820,确认是否存在相关代码。若无,则说明当前驱动是为特定 sensor(如 kp612w)定制的。


2. 跑的是哪个测试应用程序?

通常用于调试摄像头的测试程序包括:

  • get_vin_data:您提到的 dump 数据命令,用于从 VIN(Video Input Node)读取原始图像数据。
  • camera_diag 工具:用于诊断摄像头初始化状态、link lock、GPIO 状态等。
  • v4l2-ctl / v4l2-compliance:Linux V4L2 框架下的工具,可检查设备节点状态。
  • 自定义应用:如 camera_apptest_camera.c,可能由 FAE 提供或平台预置。

:pushpin: 如何确认当前运行的应用?
在终端执行:

ps | grep camera

或查看 /proc/<pid>/cmdline,确认正在运行的进程名称。


3. 配置程序是怎么弄的?

摄像头配置主要通过以下方式完成:

a. 设备树(Device Tree)

  • arch/arm64/boot/dts/xxx.dts 中定义摄像头接口、时钟、复位引脚等。
  • 示例:
    camera@0 {
        compatible = "vendor,kp612w";
        reg = <0>;
        pinctrl-names = "default";
        pinctrl-0 = <&cam_pinctl>;
        status = "okay";
    };
    

b. 寄存器配置(MAX96712)

  • 通过 I2C 写入寄存器(如 0x8d00x8e0)控制 lane 数、时钟频率、data type。
  • 可使用 i2c-tools 工具手动读写:
    i2cget -y 1 0x3c 0x8d0
    i2cset -y 1 0x3c 0x8d0 0x01
    

c. 内核参数 / sysfs 接口

  • 通过 /sys/class/vps/mipi_host4/param/ 调整 MIPI 参数(如 nochecklane_num)。
  • 示例:
    echo 1 > /sys/class/vps/mipi_host4/param/nocheck
    echo 2 > /sys/class/vps/mipi_host4/param/lane_num
    

d. 启动脚本 / init.d

  • /etc/init.d/rc.local 中添加启动命令,确保摄像头模块加载和初始化顺序正确。

4. 关键排查点(结合您的问题)

根据您之前的 log 和讨论,重点检查以下几点:

:white_check_mark: MIPI Lane 配置

  • 尽管您修改了 lane_num,但 log 显示仍为 4 lane 8000Mbps,说明配置未生效。
  • 原因可能是闭源驱动或固件限制,部分平台会硬编码 lane 数,需联系 FAE 获取支持。
  • 可尝试在 camera_deserial_lib.c 中强制设置 mipi_to->rx_attr.lane = 2;(见您提供的代码截图),并重新编译驱动。

:white_check_mark: POC Reset 影响

  • POC Reset 会导致 link lock 失败,尤其在高速模式下。
  • 您提到“不跑 POC Reset 就能成功”,说明该流程可能与硬件兼容性有关。
  • 建议:
    • hobot_mipi_host_ops.c 中注释掉 POC Reset 相关代码。
    • 或在 deserializer_info_t 结构体中设置 poc_mask = 0x0,跳过 reset。

:white_check_mark: 数据流验证

  • 使用 dmesg | grep max96712 查看解串器状态。
  • cat /sys/class/vps/mipi_host4/debug 查看实时数据包统计。
  • 如果 0x8d0 寄存器有变化但 dump 报错,说明数据已到达 SOC,但解析失败 → 可能是格式不匹配(如 UYUV 422 vs YUV 420)。

5. 下一步建议

  1. 优先确认寄存器值
    执行 i2cget -y 1 0x3c 0x8d0,确保返回值符合预期(如 0x01 表示启用 2 lane)。

  2. 禁用 POC Reset 测试
    修改驱动代码,将 poc_reset 函数替换为 return 0;,观察是否能正常 dump 数据。

  3. 联系地瓜技术支持
    因涉及闭源驱动和硬件限制,官方 FAE 可提供:

    • 预编译的驱动镜像
    • 配置工具(如 GUI 或 CLI)
    • 硬件信号分析报告
  4. 参考文档

    • 《RDK S100 构建系统开发指南》
    • 《MAX96712 数据手册》
    • 《Hobot Camera Driver Architecture》(如有)

如果您能提供以下信息,我可以进一步帮您定位问题:

  • 当前使用的 驱动版本号(如 camera_driver_vX.X.X
  • dmesg 中关于 max96712 的完整日志片段
  • i2cget 读取 0x8d0 的具体值
  • 是否有 示波器测量的 MIPI 信号波形图

祝您调试顺利!如果有任何新进展或错误日志,请随时补充 :blush: :hammer_and_wrench: