2398147_zh-CN

cancel
Showing results for 
Show  only  | Search instead for 
Did you mean: 

2398147_zh-CN

2398147_zh-CN

IMX95 Aquila ISP 使用情况

你好,


我购买了一套 Aquila IMX95 评估套件 2,包含两个 ov5640 传感器( https://www.toradex.com/cart )。

我有传感器的驱动程序。主板固件已正确刷写,ISP模块已激活:

root@imx95-1:~# lsmod | grep -i isp
neoisp 69632 0

摄像头显示在 libcamera 中:

root@imx95-1:~# libcamera
-sh: libcamera: command not found
root@imx95-1:~# cam -l
[17:17:31.010001558] [2747] INFO Camera camera_manager.cpp:327 libcamera v0.4.0+dirty (2026-06-03T11:26:44UTC)
[17:17:31.044088474] [2748] WARN CameraSensor camera_sensor_legacy.cpp:354 'ov5640 4-003c': Recommended V4L2 control 0x009a0922 not supported
[17:17:31.044159391] [2748] WARN CameraSensor camera_sensor_legacy.cpp:426 'ov5640 4-003c': The sensor kernel driver needs to be fixed
[17:17:31.044178224] [2748] WARN CameraSensor camera_sensor_legacy.cpp:428 'ov5640 4-003c': See Documentation/sensor_driver_requirements.rst in the libcamera sources for more information
[17:17:31.044882558] [2748] WARN CameraSensor camera_sensor_legacy.cpp:594 'ov5640 4-003c': Failed to retrieve the camera location
[17:17:31.044918891] [2748] WARN CameraSensor camera_sensor_legacy.cpp:616 'ov5640 4-003c': Rotation control not available, default to 0 degrees
[17:17:31.045722599] [2748] WARN CameraSensor camera_sensor_legacy.cpp:354 'ov5640 3-003c': Recommended V4L2 control 0x009a0922 not supported
[17:17:31.045762974] [2748] WARN CameraSensor camera_sensor_legacy.cpp:426 'ov5640 3-003c': The sensor kernel driver needs to be fixed
[17:17:31.045783849] [2748] WARN CameraSensor camera_sensor_legacy.cpp:428 'ov5640 3-003c': See Documentation/sensor_driver_requirements.rst in the libcamera sources for more information
[17:17:31.046362016] [2748] WARN CameraSensor camera_sensor_legacy.cpp:594 'ov5640 3-003c': Failed to retrieve the camera location
[17:17:31.046388308] [2748] WARN CameraSensor camera_sensor_legacy.cpp:616 'ov5640 3-003c': Rotation control not available, default to 0 degrees
[17:17:31.048068724] [2748] WARN V4L2 v4l2_pixelformat.cpp:346 Unsupported V4L2 pixel format AR30
[17:17:31.048640224] [2748] WARN V4L2 v4l2_pixelformat.cpp:346 Unsupported V4L2 pixel format AR30
[17:17:31.048904099] [2748] WARN V4L2 v4l2_pixelformat.cpp:346 Unsupported V4L2 pixel format AR30
[17:17:31.049145974] [2748] WARN V4L2 v4l2_pixelformat.cpp:346 Unsupported V4L2 pixel format AR30
[17:17:31.049451724] [2748] WARN V4L2 v4l2_pixelformat.cpp:346 Unsupported V4L2 pixel format AR30
[17:17:31.049694683] [2748] WARN V4L2 v4l2_pixelformat.cpp:346 Unsupported V4L2 pixel format AR30
[17:17:31.049937141] [2748] WARN V4L2 v4l2_pixelformat.cpp:346 Unsupported V4L2 pixel format AR30
[17:17:31.050184266] [2748] WARN V4L2 v4l2_pixelformat.cpp:346 Unsupported V4L2 pixel format AR30
[17:17:31.050477516] [2748] WARN V4L2 v4l2_pixelformat.cpp:346 Unsupported V4L2 pixel format AR30
[17:17:31.050720433] [2748] WARN V4L2 v4l2_pixelformat.cpp:346 Unsupported V4L2 pixel format AR30
[17:17:31.050962433] [2748] WARN V4L2 v4l2_pixelformat.cpp:346 Unsupported V4L2 pixel format AR30
[17:17:31.051201724] [2748] WARN V4L2 v4l2_pixelformat.cpp:346 Unsupported V4L2 pixel format AR30
[17:17:31.051441724] [2748] WARN V4L2 v4l2_pixelformat.cpp:346 Unsupported V4L2 pixel format AR30
[17:17:31.051683308] [2748] WARN V4L2 v4l2_pixelformat.cpp:346 Unsupported V4L2 pixel format AR30
[17:17:31.051925308] [2748] WARN V4L2 v4l2_pixelformat.cpp:346 Unsupported V4L2 pixel format AR30
[17:17:31.052259141] [2748] WARN V4L2 v4l2_pixelformat.cpp:346 Unsupported V4L2 pixel format AR30
[17:17:31.052510099] [2748] WARN V4L2 v4l2_pixelformat.cpp:346 Unsupported V4L2 pixel format AR30
[17:17:31.061185308] [2748] WARN V4L2 v4l2_pixelformat.cpp:346 Unsupported V4L2 pixel format AR30
[17:17:31.061469974] [2748] WARN V4L2 v4l2_pixelformat.cpp:346 Unsupported V4L2 pixel format AR30
[17:17:31.061736058] [2748] WARN V4L2 v4l2_pixelformat.cpp:346 Unsupported V4L2 pixel format AR30
[17:17:31.061988683] [2748] WARN V4L2 v4l2_pixelformat.cpp:346 Unsupported V4L2 pixel format AR30
[17:17:31.062242933] [2748] WARN V4L2 v4l2_pixelformat.cpp:346 Unsupported V4L2 pixel format AR30
[17:17:31.062489474] [2748] WARN V4L2 v4l2_pixelformat.cpp:346 Unsupported V4L2 pixel format AR30
[17:17:31.062733266] [2748] WARN V4L2 v4l2_pixelformat.cpp:346 Unsupported V4L2 pixel format AR30
[17:17:31.062980349] [2748] WARN V4L2 v4l2_pixelformat.cpp:346 Unsupported V4L2 pixel format AR30
[17:17:31.063228266] [2748] WARN V4L2 v4l2_pixelformat.cpp:346 Unsupported V4L2 pixel format AR30
[17:17:31.063470391] [2748] WARN V4L2 v4l2_pixelformat.cpp:346 Unsupported V4L2 pixel format AR30
[17:17:31.063712849] [2748] WARN V4L2 v4l2_pixelformat.cpp:346 Unsupported V4L2 pixel format AR30
[17:17:31.063953933] [2748] WARN V4L2 v4l2_pixelformat.cpp:346 Unsupported V4L2 pixel format AR30
[17:17:31.064216891] [2748] WARN V4L2 v4l2_pixelformat.cpp:346 Unsupported V4L2 pixel format AR30
[17:17:31.064463349] [2748] WARN V4L2 v4l2_pixelformat.cpp:346 Unsupported V4L2 pixel format AR30
[17:17:31.064706683] [2748] WARN V4L2 v4l2_pixelformat.cpp:346 Unsupported V4L2 pixel format AR30
[17:17:31.064958766] [2748] WARN V4L2 v4l2_pixelformat.cpp:346 Unsupported V4L2 pixel format AR30
[17:17:31.065200974] [2748] WARN V4L2 v4l2_pixelformat.cpp:346 Unsupported V4L2 pixel format AR30
Available cameras:
1: 'ov5640' (/base/soc/bus@42000000/i2c@42540000/camera@3c)
2: 'ov5640' (/base/soc/bus@42000000/i2c@426e0000/camera@3c)

为了检查 mipis 是否正常,我启动了一个 gstreamer 流水线,并成功地在两个摄像头上都获得了稳定的 30fps 流。我还成功地使用 v4l2-ctl 拍摄了快照。


现在,我想用我的摄像头测试一下 Aquila 的 ISP,看看它的表现如何。

请参阅https://www.nxp.com/docs/en/user-guide/UG10215.pdf我添加了环境变量:

root@imx95-1:~# export LIBCAMERA_PIPELINES_MATCH_LIST='nxp/neo'

但是这样做之后,libcamera 就检测不到摄像头了,我不知道为什么:

root@imx95-1:~# cam -l
[17:36:38.947430563] [2788] INFO Camera camera_manager.cpp:327 libcamera v0.4.0+dirty (2026-06-03T11:26:44UTC)
Available cameras:
root@imx95-1:~#

感谢你的回复 !


此致敬礼,

Re: IMX95 Aquila ISP usage

查看您的日志后,我认为该问题与 MIPI 接口或 OV5640 驱动程序本身无关。

事实是:

  • libcamera 检测到了两台 OV5640 摄像头。
  • GStreamer 可以以 30 fps 的帧率进行流媒体传输。
  • v4l2-ctl 可以捕获图像

这表明传感器驱动程序、I2C 通信、 CSI-2 链接和媒体拓扑结构均运行正常。

关键在于 NXP Neo ISP 流水线需要原始的拜耳传感器输入。

OV5640 是一款 SoC 图像传感器,具有自己的内部图像处理流程,在 NXP 电路板支持包 中,它通常以 YUV 输出模式(例如 YUV422)使用,而不是作为 RAW Bayer 传感器使用。在这种配置下,可以通过标准的 V4L2/libcamera 流水线使用摄像头,但它不符合 Neo ISP 流水线的要求。

这就能解释为什么了:

  • `cam -l` 默认会显示两台 OV5640 摄像头。
  • 设置后

export LIBCAMERA_PIPELINES_MATCH_LIST='nxp/neo'

已检测不到任何摄像头

摄像头仍然存在于系统中,但 NEO 流水线处理程序找不到兼容的摄像头拓扑结构,因此没有向 libcamera 公开任何摄像头。

为了验证传感器的实际输出格式,请提供以下输出:

```bash
media-ctl -p
v4l2-ctl --list-formats-ext
我们特别感兴趣的是,该传感器是否支持任何 RAW Bayer 格式,例如:
SBGGR8
SBGGR10
SRGGB10
RG10
BA10
如果只有 YUV 格式(例如 YUYV/UYVY)可用,则表示相机未在 RAW 模式下运行,无法通过 Neo ISP 处理流程进行处理。
虽然 OV5640 硬件能够输出 RAW Bayer 格式图像,但 BSP 相机驱动程序通常不会启用 RAW 支持,NXP Neo ISP 堆栈也依赖于传感器特定的调整数据。即使启用了 RAW 输出,由于缺少专用的 OV5640 调谐配置文件,可能会阻止 ISP 的正常操作(AE/AWB/图像质量调谐)。
如果您的目标是评估 Neo ISP 框架本身,那么使用已知可与 NXP ISP 协议栈配合使用的传感器可能会更容易。常见候选人包括:

OS08A20
OX03C10
OX05B1S
AR0521
AR1335(可能需要额外调校)

能否分享一下上述命令的输出结果?这将使我们能够确认当前的 OV5640 配置是否向系统暴露了 RAW Bayer 格式。
此致,

Re: IMX95 Aquila ISP usage

谢谢回复。

我做了一些额外的检查:

  • 您是对的,OV5640 最初运行在UYVY 模式下,但我手动将一个传感器切换到了RAW Bayer (SRGGB8)
  • media-ctl -p 现在显示:
 
root@imx95-1:~# media-ctl -p
Media controller API version 6.12.55

Media device information
------------------------
driver          mxc-isi
model           FSL Capture Media Device
serial          
bus info        platform:4ad50000.isi
hw revision     0x0
driver version  6.12.55

Device topology
- entity 1: crossbar (13 pads, 11 links, 8 routes)
            type V4L2 subdev subtype Unknown flags 0
            device node name /dev/v4l-subdev0
	routes:
		2/0 -> 5/0 [ACTIVE]
		3/0 -> 6/0 [ACTIVE]
		2/0 -> 7/0 [ACTIVE]
		3/0 -> 8/0 [ACTIVE]
		2/0 -> 9/0 [ACTIVE]
		3/0 -> 10/0 [ACTIVE]
		2/0 -> 11/0 [ACTIVE]
		3/0 -> 12/0 [ACTIVE]
	pad0: SINK,MUST_CONNECT
	pad1: SINK,MUST_CONNECT
	pad2: SINK,MUST_CONNECT
		[stream:0 fmt:SRGGB8_1X8/1920x1080 field:none]
		<- "4ac10000.syscon:formatter@20":1 [ENABLED,IMMUTABLE]
	pad3: SINK,MUST_CONNECT
		[stream:0 fmt:UYVY8_1X16/1920x1080 field:none]
		<- "4ac10000.syscon:formatter@120":1 [ENABLED,IMMUTABLE]
	pad4: SINK,MUST_CONNECT
		<- "mxc_isi.output":0 [ENABLED,IMMUTABLE]
	pad5: SOURCE
		[stream:0 fmt:SRGGB8_1X8/1920x1080 field:none]
		-> "mxc_isi.0":0 [ENABLED,IMMUTABLE]
	pad6: SOURCE
		[stream:0 fmt:UYVY8_1X16/1920x1080 field:none]
		-> "mxc_isi.1":0 [ENABLED,IMMUTABLE]
	pad7: SOURCE
		[stream:0 fmt:SRGGB8_1X8/1920x1080 field:none]
		-> "mxc_isi.2":0 [ENABLED,IMMUTABLE]
	pad8: SOURCE
		[stream:0 fmt:UYVY8_1X16/1920x1080 field:none]
		-> "mxc_isi.3":0 [ENABLED,IMMUTABLE]
	pad9: SOURCE
		[stream:0 fmt:SRGGB8_1X8/1920x1080 field:none]
		-> "mxc_isi.4":0 [ENABLED,IMMUTABLE]
	pad10: SOURCE
		[stream:0 fmt:UYVY8_1X16/1920x1080 field:none]
		-> "mxc_isi.5":0 [ENABLED,IMMUTABLE]
	pad11: SOURCE
		[stream:0 fmt:SRGGB8_1X8/1920x1080 field:none]
		-> "mxc_isi.6":0 [ENABLED,IMMUTABLE]
	pad12: SOURCE
		[stream:0 fmt:UYVY8_1X16/1920x1080 field:none]
		-> "mxc_isi.7":0 [ENABLED,IMMUTABLE]

- entity 15: mxc_isi.0 (2 pads, 2 links, 0 routes)
             type V4L2 subdev subtype Unknown flags 0
             device node name /dev/v4l-subdev1
	pad0: SINK
		[stream:0 fmt:UYVY8_1X16/1920x1080 field:none
		 compose.bounds:(0,0)/1920x1080
		 compose:(0,0)/1920x1080]
		<- "crossbar":5 [ENABLED,IMMUTABLE]
	pad1: SOURCE
		[stream:0 fmt:YUV8_1X24/1920x1080 field:none
		 crop.bounds:(0,0)/1920x1080
		 crop:(0,0)/1920x1080]
		-> "mxc_isi.0.capture":0 [ENABLED,IMMUTABLE]

- entity 18: mxc_isi.0.capture (1 pad, 1 link)
             type Node subtype V4L flags 0
             device node name /dev/video2
	pad0: SINK
		<- "mxc_isi.0":1 [ENABLED,IMMUTABLE]

- entity 26: mxc_isi.1 (2 pads, 2 links, 0 routes)
             type V4L2 subdev subtype Unknown flags 0
             device node name /dev/v4l-subdev2
	pad0: SINK
		[stream:0 fmt:UYVY8_1X16/1920x1080 field:none
		 compose.bounds:(0,0)/1920x1080
		 compose:(0,0)/1920x1080]
		<- "crossbar":6 [ENABLED,IMMUTABLE]
	pad1: SOURCE
		[stream:0 fmt:YUV8_1X24/1920x1080 field:none
		 crop.bounds:(0,0)/1920x1080
		 crop:(0,0)/1920x1080]
		-> "mxc_isi.1.capture":0 [ENABLED,IMMUTABLE]

- entity 29: mxc_isi.1.capture (1 pad, 1 link)
             type Node subtype V4L flags 0
             device node name /dev/video3
	pad0: SINK
		<- "mxc_isi.1":1 [ENABLED,IMMUTABLE]

- entity 37: mxc_isi.2 (2 pads, 2 links, 0 routes)
             type V4L2 subdev subtype Unknown flags 0
             device node name /dev/v4l-subdev3
	pad0: SINK
		[stream:0 fmt:UYVY8_1X16/1920x1080 field:none colorspace:jpeg xfer:srgb ycbcr:601 quantization:full-range
		 compose.bounds:(0,0)/1920x1080
		 compose:(0,0)/1920x1080]
		<- "crossbar":7 [ENABLED,IMMUTABLE]
	pad1: SOURCE
		[stream:0 fmt:YUV8_1X24/1920x1080 field:none colorspace:jpeg xfer:srgb ycbcr:601 quantization:full-range
		 crop.bounds:(0,0)/1920x1080
		 crop:(0,0)/1920x1080]
		-> "mxc_isi.2.capture":0 [ENABLED,IMMUTABLE]

- entity 40: mxc_isi.2.capture (1 pad, 1 link)
             type Node subtype V4L flags 0
             device node name /dev/video4
	pad0: SINK
		<- "mxc_isi.2":1 [ENABLED,IMMUTABLE]

- entity 48: mxc_isi.3 (2 pads, 2 links, 0 routes)
             type V4L2 subdev subtype Unknown flags 0
             device node name /dev/v4l-subdev4
	pad0: SINK
		[stream:0 fmt:UYVY8_1X16/1920x1080 field:none colorspace:jpeg xfer:srgb ycbcr:601 quantization:full-range
		 compose.bounds:(0,0)/1920x1080
		 compose:(0,0)/1920x1080]
		<- "crossbar":8 [ENABLED,IMMUTABLE]
	pad1: SOURCE
		[stream:0 fmt:YUV8_1X24/1920x1080 field:none colorspace:jpeg xfer:srgb ycbcr:601 quantization:full-range
		 crop.bounds:(0,0)/1920x1080
		 crop:(0,0)/1920x1080]
		-> "mxc_isi.3.capture":0 [ENABLED,IMMUTABLE]

- entity 51: mxc_isi.3.capture (1 pad, 1 link)
             type Node subtype V4L flags 0
             device node name /dev/video5
	pad0: SINK
		<- "mxc_isi.3":1 [ENABLED,IMMUTABLE]

- entity 59: mxc_isi.4 (2 pads, 2 links, 0 routes)
             type V4L2 subdev subtype Unknown flags 0
             device node name /dev/v4l-subdev5
	pad0: SINK
		[stream:0 fmt:UYVY8_1X16/1920x1080 field:none colorspace:jpeg xfer:srgb ycbcr:601 quantization:full-range
		 compose.bounds:(0,0)/1920x1080
		 compose:(0,0)/1920x1080]
		<- "crossbar":9 [ENABLED,IMMUTABLE]
	pad1: SOURCE
		[stream:0 fmt:YUV8_1X24/1920x1080 field:none colorspace:jpeg xfer:srgb ycbcr:601 quantization:full-range
		 crop.bounds:(0,0)/1920x1080
		 crop:(0,0)/1920x1080]
		-> "mxc_isi.4.capture":0 [ENABLED,IMMUTABLE]

- entity 62: mxc_isi.4.capture (1 pad, 1 link)
             type Node subtype V4L flags 0
             device node name /dev/video6
	pad0: SINK
		<- "mxc_isi.4":1 [ENABLED,IMMUTABLE]

- entity 70: mxc_isi.5 (2 pads, 2 links, 0 routes)
             type V4L2 subdev subtype Unknown flags 0
             device node name /dev/v4l-subdev6
	pad0: SINK
		[stream:0 fmt:UYVY8_1X16/1920x1080 field:none colorspace:jpeg xfer:srgb ycbcr:601 quantization:full-range
		 compose.bounds:(0,0)/1920x1080
		 compose:(0,0)/1920x1080]
		<- "crossbar":10 [ENABLED,IMMUTABLE]
	pad1: SOURCE
		[stream:0 fmt:YUV8_1X24/1920x1080 field:none colorspace:jpeg xfer:srgb ycbcr:601 quantization:full-range
		 crop.bounds:(0,0)/1920x1080
		 crop:(0,0)/1920x1080]
		-> "mxc_isi.5.capture":0 [ENABLED,IMMUTABLE]

- entity 73: mxc_isi.5.capture (1 pad, 1 link)
             type Node subtype V4L flags 0
             device node name /dev/video7
	pad0: SINK
		<- "mxc_isi.5":1 [ENABLED,IMMUTABLE]

- entity 81: mxc_isi.6 (2 pads, 2 links, 0 routes)
             type V4L2 subdev subtype Unknown flags 0
             device node name /dev/v4l-subdev7
	pad0: SINK
		[stream:0 fmt:UYVY8_1X16/1920x1080 field:none colorspace:jpeg xfer:srgb ycbcr:601 quantization:full-range
		 compose.bounds:(0,0)/1920x1080
		 compose:(0,0)/1920x1080]
		<- "crossbar":11 [ENABLED,IMMUTABLE]
	pad1: SOURCE
		[stream:0 fmt:YUV8_1X24/1920x1080 field:none colorspace:jpeg xfer:srgb ycbcr:601 quantization:full-range
		 crop.bounds:(0,0)/1920x1080
		 crop:(0,0)/1920x1080]
		-> "mxc_isi.6.capture":0 [ENABLED,IMMUTABLE]

- entity 84: mxc_isi.6.capture (1 pad, 1 link)
             type Node subtype V4L flags 0
             device node name /dev/video8
	pad0: SINK
		<- "mxc_isi.6":1 [ENABLED,IMMUTABLE]

- entity 92: mxc_isi.7 (2 pads, 2 links, 0 routes)
             type V4L2 subdev subtype Unknown flags 0
             device node name /dev/v4l-subdev8
	pad0: SINK
		[stream:0 fmt:UYVY8_1X16/1920x1080 field:none colorspace:jpeg xfer:srgb ycbcr:601 quantization:full-range
		 compose.bounds:(0,0)/1920x1080
		 compose:(0,0)/1920x1080]
		<- "crossbar":12 [ENABLED,IMMUTABLE]
	pad1: SOURCE
		[stream:0 fmt:YUV8_1X24/1920x1080 field:none colorspace:jpeg xfer:srgb ycbcr:601 quantization:full-range
		 crop.bounds:(0,0)/1920x1080
		 crop:(0,0)/1920x1080]
		-> "mxc_isi.7.capture":0 [ENABLED,IMMUTABLE]

- entity 95: mxc_isi.7.capture (1 pad, 1 link)
             type Node subtype V4L flags 0
             device node name /dev/video9
	pad0: SINK
		<- "mxc_isi.7":1 [ENABLED,IMMUTABLE]

- entity 103: mxc_isi.output (1 pad, 1 link)
              type Node subtype V4L flags 0
	pad0: SOURCE
		-> "crossbar":4 [ENABLED,IMMUTABLE]

- entity 110: 4ac10000.syscon:formatter@120 (2 pads, 2 links, 1 route)
              type V4L2 subdev subtype Unknown flags 0
              device node name /dev/v4l-subdev9
	routes:
		0/0 -> 1/0 [ACTIVE]
	pad0: SINK
		[stream:0 fmt:UYVY8_1X16/1920x1080 field:none]
		<- "csidev-4ad40000.csi":1 [ENABLED,IMMUTABLE]
	pad1: SOURCE
		[stream:0 fmt:UYVY8_1X16/1920x1080 field:none]
		-> "crossbar":3 [ENABLED,IMMUTABLE]

- entity 115: 4ac10000.syscon:formatter@20 (2 pads, 2 links, 1 route)
              type V4L2 subdev subtype Unknown flags 0
              device node name /dev/v4l-subdev10
	routes:
		0/0 -> 1/0 [ACTIVE]
	pad0: SINK
		[stream:0 fmt:SRGGB8_1X8/1920x1080]
		<- "csidev-4ad30000.csi":1 [ENABLED,IMMUTABLE]
	pad1: SOURCE
		[stream:0 fmt:SRGGB8_1X8/1920x1080]
		-> "crossbar":2 [ENABLED,IMMUTABLE]

- entity 120: csidev-4ad30000.csi (2 pads, 2 links, 1 route)
              type V4L2 subdev subtype Unknown flags 0
              device node name /dev/v4l-subdev11
	routes:
		0/0 -> 1/0 [ACTIVE]
	pad0: SINK
		[stream:0 fmt:SRGGB8_1X8/1920x1080 colorspace:srgb xfer:srgb ycbcr:601 quantization:full-range]
		<- "ov5640 4-003c":0 [ENABLED]
	pad1: SOURCE
		[stream:0 fmt:SRGGB8_1X8/1920x1080 colorspace:srgb xfer:srgb ycbcr:601 quantization:full-range]
		-> "4ac10000.syscon:formatter@20":0 [ENABLED,IMMUTABLE]

- entity 125: csidev-4ad40000.csi (2 pads, 2 links, 1 route)
              type V4L2 subdev subtype Unknown flags 0
              device node name /dev/v4l-subdev12
	routes:
		0/0 -> 1/0 [ACTIVE]
	pad0: SINK
		[stream:0 fmt:UYVY8_1X16/1920x1080 field:none]
		<- "ov5640 3-003c":0 [ENABLED]
	pad1: SOURCE
		[stream:0 fmt:UYVY8_1X16/1920x1080 field:none]
		-> "4ac10000.syscon:formatter@120":0 [ENABLED,IMMUTABLE]

- entity 130: ov5640 4-003c (1 pad, 1 link, 0 routes)
              type V4L2 subdev subtype Sensor flags 0
              device node name /dev/v4l-subdev13
	pad0: SOURCE
		[stream:0 fmt:SRGGB8_1X8/1920x1080@1/30 colorspace:srgb xfer:srgb ycbcr:601 quantization:full-range
		 crop.bounds:(0,0)/2624x1964
		 crop:(336,434)/1952x1088]
		-> "csidev-4ad30000.csi":0 [ENABLED]

- entity 134: ov5640 3-003c (1 pad, 1 link, 0 routes)
              type V4L2 subdev subtype Sensor flags 0
              device node name /dev/v4l-subdev14
	pad0: SOURCE
		[stream:0 fmt:UYVY8_1X16/1920x1080@1/30 field:none colorspace:srgb xfer:srgb ycbcr:601 quantization:full-range
		 crop.bounds:(0,0)/2624x1964
		 crop:(336,434)/1952x1088]
		-> "csidev-4ad40000.csi":0 [ENABLED]

(第二个OV5640仍保持UYVY模式,用于对比)

所以 :
  • OV5640 -> SRGGB8
  • CSI -> SRGGB8
  • 格式化程序 -> SRGGB8
  • 横杆 -> SRGGB8

=> RAW Bayer 成功通过传感器、CSI 和格式化器进行传输。


neoisp内核模块已加载:

root@imx95-1:~# modprobe neoisp
root@imx95-1:~# lsmod | grep -i isp
neoisp                 69632  0

运行中的设备树中存在 ISP 节点:

 
/sys/firmware/devicetree/base/soc/isp@4ae00000
 

=> 但是,我只看到一个媒体设备(/dev/media0)暴露了 CSI/Formatter/ISI 管道。媒体图中没有出现新独立党派实体。我在媒体图中没有看到任何 neoisp 实体,我不知道这是否正常。

=> cam -l (libcamera) 仍然返回没有可用的摄像头。


目前看来,RAW Bayer 路径似乎可以正常工作,但我无法确定 Neo ISP 在哪个环节成为活动流程的一部分。

 
如何验证该流是否确实由 Neo ISP 处理,而不是仅仅遵循 CSI -> 格式化程序 -> ISI 路径?
 
另外,请参阅https://www.nxp.com/docs/en/user-guide/UG10215.pdf对于这种配置,目前还是推荐的指南吗?或者有没有针对 i.MX95 上 OV5640 + Neo ISP 的更具体的参考资料?
 
 
 
此致敬礼,
Re: IMX95 Aquila ISP usage

我目前怀疑以下情况之一正在发生:

  1. OV5640 很可能运行在 YUV 模式而不是 RAW Bayer 模式
  2. 摄像头 DT 叠加层不是 ISP 启用版本
  3. 根文件系统中缺少 Neo IPA/校准组件
  4. Neo 管道看到的媒体拓扑结构与预期的 i.MX95 ISP 图不匹配。

media-ctl -p 的输出通常会指出哪个才是真正的问题所在。

Re: IMX95 Aquila ISP usage

您好!


以下是输出结果:

root@imx95-1:~# v4l2-ctl --list-formats-ext -d /dev/video2
ioctl: VIDIOC_ENUM_FMT
	Type: Video Capture Multiplanar


	[0]: 'YUYV' (YUYV 4:2:2, csc-colorspace, csc-ycbcr, csc-quantization, csc-xfer-func)
		Size: Stepwise 1x1 - 4096x8191 with step 1/1
	[1]: 'YUVA' (32-bit YUVA 8-8-8-8, csc-colorspace, csc-ycbcr, csc-quantization, csc-xfer-func)
		Size: Stepwise 1x1 - 4096x8191 with step 1/1
	[2]: 'NV12' (Y/UV 4:2:0, csc-colorspace, csc-ycbcr, csc-quantization, csc-xfer-func)
		Size: Stepwise 2x2 - 4096x8190 with step 2/2
	[3]: 'NM12' (Y/UV 4:2:0 (N-C), csc-colorspace, csc-ycbcr, csc-quantization, csc-xfer-func)
		Size: Stepwise 2x2 - 4096x8190 with step 2/2
	[4]: 'NV16' (Y/UV 4:2:2, csc-colorspace, csc-ycbcr, csc-quantization, csc-xfer-func)
		Size: Stepwise 2x1 - 4096x8191 with step 2/1
	[5]: 'NM16' (Y/UV 4:2:2 (N-C), csc-colorspace, csc-ycbcr, csc-quantization, csc-xfer-func)
		Size: Stepwise 2x1 - 4096x8191 with step 2/1
	[6]: 'YM24' (Planar YUV 4:4:4 (N-C), csc-colorspace, csc-ycbcr, csc-quantization, csc-xfer-func)
		Size: Stepwise 1x1 - 4096x8191 with step 1/1
	[7]: 'RGBP' (16-bit RGB 5-6-5, csc-colorspace, csc-ycbcr, csc-quantization, csc-xfer-func)
		Size: Stepwise 1x1 - 4096x8191 with step 1/1
	[8]: 'RGB3' (24-bit RGB 8-8-8, csc-colorspace, csc-ycbcr, csc-quantization, csc-xfer-func)
		Size: Stepwise 1x1 - 4096x8191 with step 1/1
	[9]: 'BGR3' (24-bit BGR 8-8-8, csc-colorspace, csc-ycbcr, csc-quantization, csc-xfer-func)
		Size: Stepwise 1x1 - 4096x8191 with step 1/1
	[10]: 'XR24' (32-bit BGRX 8-8-8-8, csc-colorspace, csc-ycbcr, csc-quantization, csc-xfer-func)
		Size: Stepwise 1x1 - 4096x8191 with step 1/1
	[11]: 'AR24' (32-bit BGRA 8-8-8-8, csc-colorspace, csc-ycbcr, csc-quantization, csc-xfer-func)
		Size: Stepwise 1x1 - 4096x8191 with step 1/1
	[12]: 'RA24' (32-bit ABGR 8-8-8-8, csc-colorspace, csc-ycbcr, csc-quantization, csc-xfer-func)
		Size: Stepwise 1x1 - 4096x8191 with step 1/1
	[13]: 'AB24' (32-bit RGBA 8-8-8-8, csc-colorspace, csc-ycbcr, csc-quantization, csc-xfer-func)
		Size: Stepwise 1x1 - 4096x8191 with step 1/1
	[14]: 'RX24' (32-bit XBGR 8-8-8-8, csc-colorspace, csc-ycbcr, csc-quantization, csc-xfer-func)
		Size: Stepwise 1x1 - 4096x8191 with step 1/1
	[15]: 'XB24' (32-bit RGBX 8-8-8-8, csc-colorspace, csc-ycbcr, csc-quantization, csc-xfer-func)
		Size: Stepwise 1x1 - 4096x8191 with step 1/1
	[16]: 'AR30' (32-bit ARGB 2-10-10-10, csc-colorspace, csc-ycbcr, csc-quantization, csc-xfer-func)
		Size: Stepwise 1x1 - 4096x8191 with step 1/1
	[17]: 'GREY' (8-bit Greyscale, csc-colorspace, csc-ycbcr, csc-quantization, csc-xfer-func)
		Size: Stepwise 1x1 - 4096x8191 with step 1/1
	[18]: 'Y10 ' (10-bit Greyscale, csc-colorspace, csc-ycbcr, csc-quantization, csc-xfer-func)
		Size: Stepwise 1x1 - 4096x8191 with step 1/1
	[19]: 'Y12 ' (12-bit Greyscale, csc-colorspace, csc-ycbcr, csc-quantization, csc-xfer-func)
		Size: Stepwise 1x1 - 4096x8191 with step 1/1
	[20]: 'Y14 ' (14-bit Greyscale, csc-colorspace, csc-ycbcr, csc-quantization, csc-xfer-func)
		Size: Stepwise 1x1 - 4096x8191 with step 1/1
	[21]: 'BA81' (8-bit Bayer BGBG/GRGR, csc-colorspace, csc-ycbcr, csc-quantization, csc-xfer-func)
		Size: Stepwise 1x1 - 4096x8191 with step 1/1
	[22]: 'GBRG' (8-bit Bayer GBGB/RGRG, csc-colorspace, csc-ycbcr, csc-quantization, csc-xfer-func)
		Size: Stepwise 1x1 - 4096x8191 with step 1/1
	[23]: 'GRBG' (8-bit Bayer GRGR/BGBG, csc-colorspace, csc-ycbcr, csc-quantization, csc-xfer-func)
		Size: Stepwise 1x1 - 4096x8191 with step 1/1
	[24]: 'RGGB' (8-bit Bayer RGRG/GBGB, csc-colorspace, csc-ycbcr, csc-quantization, csc-xfer-func)
		Size: Stepwise 1x1 - 4096x8191 with step 1/1
	[25]: 'BG10' (10-bit Bayer BGBG/GRGR, csc-colorspace, csc-ycbcr, csc-quantization, csc-xfer-func)
		Size: Stepwise 1x1 - 4096x8191 with step 1/1
	[26]: 'GB10' (10-bit Bayer GBGB/RGRG, csc-colorspace, csc-ycbcr, csc-quantization, csc-xfer-func)
		Size: Stepwise 1x1 - 4096x8191 with step 1/1
	[27]: 'BA10' (10-bit Bayer GRGR/BGBG, csc-colorspace, csc-ycbcr, csc-quantization, csc-xfer-func)
		Size: Stepwise 1x1 - 4096x8191 with step 1/1
	[28]: 'RG10' (10-bit Bayer RGRG/GBGB, csc-colorspace, csc-ycbcr, csc-quantization, csc-xfer-func)
		Size: Stepwise 1x1 - 4096x8191 with step 1/1
	[29]: 'BG12' (12-bit Bayer BGBG/GRGR, csc-colorspace, csc-ycbcr, csc-quantization, csc-xfer-func)
		Size: Stepwise 1x1 - 4096x8191 with step 1/1
	[30]: 'GB12' (12-bit Bayer GBGB/RGRG, csc-colorspace, csc-ycbcr, csc-quantization, csc-xfer-func)
		Size: Stepwise 1x1 - 4096x8191 with step 1/1
	[31]: 'BA12' (12-bit Bayer GRGR/BGBG, csc-colorspace, csc-ycbcr, csc-quantization, csc-xfer-func)
		Size: Stepwise 1x1 - 4096x8191 with step 1/1
	[32]: 'RG12' (12-bit Bayer RGRG/GBGB, csc-colorspace, csc-ycbcr, csc-quantization, csc-xfer-func)
		Size: Stepwise 1x1 - 4096x8191 with step 1/1
	[33]: 'BG14' (14-bit Bayer BGBG/GRGR, csc-colorspace, csc-ycbcr, csc-quantization, csc-xfer-func)
		Size: Stepwise 1x1 - 4096x8191 with step 1/1
	[34]: 'GB14' (14-bit Bayer GBGB/RGRG, csc-colorspace, csc-ycbcr, csc-quantization, csc-xfer-func)
		Size: Stepwise 1x1 - 4096x8191 with step 1/1
	[35]: 'GR14' (14-bit Bayer GRGR/BGBG, csc-colorspace, csc-ycbcr, csc-quantization, csc-xfer-func)
		Size: Stepwise 1x1 - 4096x8191 with step 1/1
	[36]: 'RG14' (14-bit Bayer RGRG/GBGB, csc-colorspace, csc-ycbcr, csc-quantization, csc-xfer-func)
		Size: Stepwise 1x1 - 4096x8191 with step 1/1
	[37]: 'BYR2' (16-bit Bayer BGBG/GRGR, csc-colorspace, csc-ycbcr, csc-quantization, csc-xfer-func)
		Size: Stepwise 1x1 - 4096x8191 with step 1/1
	[38]: 'GB16' (16-bit Bayer GBGB/RGRG, csc-colorspace, csc-ycbcr, csc-quantization, csc-xfer-func)
		Size: Stepwise 1x1 - 4096x8191 with step 1/1
	[39]: 'GR16' (16-bit Bayer GRGR/BGBG, csc-colorspace, csc-ycbcr, csc-quantization, csc-xfer-func)
		Size: Stepwise 1x1 - 4096x8191 with step 1/1
	[40]: 'RG16' (16-bit Bayer RGRG/GBGB, csc-colorspace, csc-ycbcr, csc-quantization, csc-xfer-func)
		Size: Stepwise 1x1 - 4096x8191 with step 1/1
	[41]: 'MJPG' (Motion-JPEG, compressed, csc-colorspace, csc-ycbcr, csc-quantization, csc-xfer-func)
		Size: Stepwise 1x1 - 4096x8191 with step 1/1

如果我理解正确的话,相机可以拍摄原始拜耳格式照片,我也将其配置为拍摄原始拜耳格式照片(希望我配置正确)。

我再尝试用另一个镜像文件刷机,看看问题是不是出在这里。


此致敬礼,

Re: IMX95 Aquila ISP usage

谢谢你的更新。这 v4l2-ctl 输出结果证实 ISI 捕获节点支持 RAW Bayer 格式,并且 media-ctl -p 您上一条消息的输出已经表明,RAW Bayer 路径已正确传递到整个流程中:

OV5640 (SRGGB8) -> CSI (SRGGB8) -> 格式化器 (SRGGB8) -> 十字开关 (SRGGB8)

所以传感器侧的配置看起来是正确的。

现在的核心问题是: 新互联网服务 模块已加载,但未出现在媒体图中,也没有其他信息。 /dev/media1 已创建。这通常表明 新互联网服务 驱动程序已成功作为内核模块加载,但在设备探测期间失败,这将阻止其注册媒体设备。

请您提供以下诊断信息:

# 检查 NeoISP 探测状态
dmesg | grep -i neoisp
 dmesg | grep -i "isp@4ae"
 dmesg | grep -i “探测失败”
 dmesg | grep -i "4ae00000"

 # 确认所有可用的媒体设备ls -la /dev/media*

 # 检查 sysfs中的neoisp 状态ls /sys/总线/platform/drivers/nxp-neoisp/
 cat /sys/firmware/devicetree/base/soc/isp@4ae00000/status

同时,我们也想问一下:您是否可以访问以下任何一款由 NXP Neo ISP 协议栈官方支持且具有完整调优我的的传感器?

  • OS08A20
  • OX03C10
  • OX05B1S

使用这些传感器之一进行测试,可以让我们快速验证 Neo ISP 驱动程序本身在您的环境中是否正常工作,并有助于确定问题是与驱动程序/环境相关还是 OV5640 配置特有的问题。

请注意,虽然 OV5640 能够输出 RAW Bayer 图像,但它没有官方的 NXP Neo ISP 调谐我的,这意味着即使管道连接正确,AE/AWB 和图像质量调谐功能也无法使用。

Re: IMX95 Aquila ISP usage

一些更新:
我们内部对此进行了检查,并想分享以下关于 OV5640 和 i.MX95 Neo ISP 流水线的观察结果。
虽然 OV5640 能够输出 RAW Bayer 数据,但出于以下原因,我们通常不建议在新设计中使用 OV5640 + Neo ISP 组合:

OV5640 已经是一款停产(EOL)传感器。
虽然支持 RAW 输出,但与较新的 RAW 传感器相比,该传感器本身提供的可调控制功能有限。
NXP 的 i.MX95 参考,引用相机解决方案基于 OS08A20 等 RAW 传感器,这些传感器已在 Neo ISP 软件框架中得到支持和验证。

因此,我们的建议如下:

将 OV5640 与其现有的图像处理路径一起使用(不依赖 Neo ISP AE/AWB 调整功能)。
如果需要完整的 Neo ISP 功能,请使用 NXP 支持的 RAW 传感器,例如 OS08A20。
如果 OV5640 必须与 Neo ISP 管道一起使用,则需要额外的软件启用工作。

对于 OV5640 + Neo ISP 方案,需要实现 libcamera CameraHelper。以下文件可作为参考,引用:
camera_helper_ov5640.cpp
https://github.com/nxp-imx/libcamera/blob/lf-6.6.52_2.2.0/src/ipa/nxp/cam_helper/camera_helper_ov564...


请注意,此 CameraHelper 实现只是第一步。它的主要目的是让 libcamera 能够识别 OV5640 传感器。还需要针对特定传感器进行额外的适配。
例如,如果希望 Neo ISP 自动曝光 (AE) 功能正常工作,则需要实现传感器增益转换函数等 API。IMX219 CameraHelper 实现中提供了一个简单的示例:
https://github.com/nxp-imx/libcamera/blob/lf-6.18.20_2.0.0/src/ipa/nxp/cam_helper/camera_helper_imx2...
具体而言,客户需要确定并实施以下之间的映射关系:

传感器增益代码
实际模拟增益倍增器(增益值)

这样 Neo ISP AE 算法就能正确控制传感器曝光和增益。
有关 CameraHelper 开发的详细信息,请参阅相机移植指南:
第 5.3 节 – “为新传感器实现 libcamera CameraHelper”
OV5640 的一个特殊之处在于它本身就包含 AE 功能。因此,如果打算继续使用传感器的内部 AE 而不是 Neo ISP AE 算法,则诸如 gainCodeToGain() 和 gainToGainCode() 之类的实现可能并非严格必需。在这种情况下,一个仅用于传感器检测的基本 CameraHelper 可能就足以启动管道。
然而,图像质量调优仍然需要进行评估和调整。由于 OV5640 最初并非作为 Neo ISP 参考,引用传感器进行特性分析和调校,因此可能需要额外的 ISP 调校工作才能达到最佳图像质量。

总的来说,虽然 OV5640 RAW 输出可以连接到 i.MX95 Neo ISP 流水线,但预计还需要一些针对特定传感器的 libcamera 和 ISP 集成工作。对于新开发项目,我们建议尽可能使用经过 Neo ISP 验证的 RAW 传感器,例如 OS08A20。


Re: IMX95 Aquila ISP usage

在前文讨论的基础上,我们调查了 Neo ISP 管道无法识别 OV5640 传感器的根本原因。

问题在于 NXP Neo IPA(图像处理算法)框架使用了一种 相机助手 工厂通过匹配内核 V4L2 子设备模型字符串来查找传感器特定的增益/曝光算法。由于没有 相机助手 已登记 “ov5640” ,工厂退回 nullptr 无法为该传感器配置 ISP 管道。

为了解决这个问题,我们实施了一项 相机助手 适用于基于 NXP 内核内部驱动程序( drivers/media/i2c/ov5640.c)的 OV5640 传感器

增益寄存器映射:

  • 登记: OV5640_REG_AEC_PK_REAL_GAIN ( 0x350a ),10 位值
  • 格式:Q6.4 定点,单位增益 = 16
  • gainCode(g) = round(g * 16)
  • gain(code) = code / 16.0

两个文件已被修改:

  1. camera_helper_ov5640.cpp – 为 OV5640 开发的新 CameraHelper 实现,已注册为 "ov5640" 与内核子设备模型字符串匹配
  2. meson.build ——已添加 camera_helper_ov5640.cpp 添加到版本源列表

请使用这两个文件重新构建 libcamera,然后重试。 LIBCAMERA_PIPELINES_MATCH_LIST='nxp/neo' 。Neo ISP 管道现在应该能够找到并配置 OV5640 传感器。

请注意,虽然这可以实现增益/曝光控制路径,但 OV5640 的完整 ISP 调谐我的(AE/AWB 参数)尚未可用。图像质量调优可能仍需进一步完善。

重建完成后与我们联系结果。

Tags (1)
No ratings
Version history
Last update:
3 weeks ago
Updated by: