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 我目前怀疑以下情况之一正在发生:
OV5640 很可能运行在 YUV 模式而不是 RAW Bayer 模式。
摄像头 DT 叠加层不是 ISP 启用版本。
根文件系统中缺少 Neo IPA/校准组件。
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_ov5640.cpp
请注意,此 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_imx219.cpp 具体而言,客户需要确定并实施以下之间的映射关系:
传感器增益代码 实际模拟增益倍增器(增益值)
这样 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
两个文件已被修改:
camera_helper_ov5640.cpp – 为 OV5640 开发的新 CameraHelper 实现,已注册为 "ov5640" 与内核子设备模型字符串匹配
meson.build ——已添加 camera_helper_ov5640.cpp 添加到版本源列表
请使用这两个文件重新构建 libcamera,然后重试。 LIBCAMERA_PIPELINES_MATCH_LIST='nxp/neo' 。Neo ISP 管道现在应该能够找到并配置 OV5640 传感器。
请注意,虽然这可以实现增益/曝光控制路径,但 OV5640 的完整 ISP 调谐我的(AE/AWB 参数)尚未可用。图像质量调优可能仍需进一步完善。
重建完成后与我们联系结果。
View full article