你好,
我使用的是FRDM i.MX93开发板和X-RPI-CAM-MIPI A1摄像头模块。
我遇到的问题是,我无法从此设置中捕获 MIPI CSI 流。
我已将固件二进制文件ap1302_60fps_ar0144_27M_2Lane_awb_tuning.bin放置在以下位置:“/lib/firmware”
启动过程中,我看到 AP1302 被成功检测到,但是当我尝试启动视频流时, VIDIOC_STREAMON出现“管道破裂”错误。
以下是相关日志。
内核日志:
root@imx93evk:~# dmesg | grep ap1302
[ 0.340980] /soc@0/bus@42000000/i2c@42530000/ap1302_mipi@3c: Fixed dependency cycle(s) with /soc@0/bus@42800000/csi@4ae00000
[ 0.371014] /soc@0/bus@42800000/csi@4ae00000: Fixed dependency cycle(s) with /soc@0/bus@42000000/i2c@42530000/ap1302_mipi@3c
...
[ 10.088832] ap1302 2-003c: AP1302 revision 0.2.6 detected流媒体测试:
root@imx93evk:~# v4l2-ctl -d /dev/video0 \
--verbose \
--stream-mmap=3 \
--stream-count=10
VIDIOC_QUERYCAP: ok
VIDIOC_REQBUFS returned 0 (Success)
VIDIOC_CREATE_BUFS returned 0 (Success)
VIDIOC_QUERYBUF returned 0 (Success)
VIDIOC_QUERYBUF returned 0 (Success)
VIDIOC_QUERYBUF returned 0 (Success)
VIDIOC_G_FMT returned 0 (Success)
VIDIOC_QBUF returned 0 (Success)
VIDIOC_QBUF returned 0 (Success)
VIDIOC_QBUF returned 0 (Success)
VIDIOC_STREAMON returned -1 (Broken pipe)请问您能否帮我理解一下为什么VIDIOC_STREAMON会出现“管道破裂”错误?
在成功开始流媒体传输之前,AP1302 固件、设备树、媒体管道或传感器初始化是否需要任何额外的配置?
此外,我目前使用的是“LF_v6.18.2-1.0.0_images_IMX93EVK”预构建镜像。
如果您需要任何其他日志或信息,请告诉我。
感谢您的支持。
与AE团队讨论。
感谢您的反馈,
我的回答如下,供您参考。
1. 固件位置
我尝试了推荐的固件安装位置,也尝试了每个位置的单独安装。仅当使用ap1302_ar0144_single_fw.bin时,相机探测才会成功。
root@imx93evk:~# ls -la /lib/firmware/ap1302_ar0144_single_fw.bin
-rw-r--r-- 1 root root 80528 Aug 5 15:36 /lib/firmware/ap1302_ar0144_single_fw.bin
root@imx93evk:~# ls -la /lib/firmware/imx/camera/ap1302.fw
-rw-r--r-- 1 root root 80528 Aug 5 15:38 /lib/firmware/imx/camera/ap1302.fw启动过程中成功检测到 AP1302。
root@imx93evk:~# dmesg | grep -i ap1302
...
[ 9.962705] ap1302 2-003c: AP1302 revision 0.2.6 detected但是,我在内核日志中没有看到任何与 AP1302 相关的固件加载消息。
2. 软件环境
我使用的是为FRDM i.MX93板提供的预构建镜像。
root@imx93evk:~# cat /proc/device-tree/model
NXP FRDM-IMX93
root@imx93evk:~# cat /proc/cmdline
console=ttyLP0,115200 earlycon root=/dev/mmcblk0p2 rootwait rwAP1302 检测成功,CSI/ISI 设备也存在。我已附上完整的日志供您参考。
3. 媒体管道
媒体管道似乎已正确创建。
root@imx93evk:~# ls /dev/media0
/dev/media0
root@imx93evk:~# ls /dev/video*
/dev/video0 /dev/video1media-ctl 的输出显示 AP1302、CSI 和 ISI 实体已启用。完整的 media-ctl 输出结果已附上,供您参考。
4. 补充信息
请参考附件fourth_point.txt文件以获取所需信息。
5. 流媒体播放失败
当流媒体命令失败时,我没有看到任何其他内核消息。
root@imx93evk:~# dmesg -c
root@imx93evk:~# v4l2-ctl -d /dev/video0 --stream-mmap=3 --stream-count=10
VIDIOC_STREAMON returned -1 (Broken pipe)
root@imx93evk:~# dmesg故障发生后,dmesg 输出仍然为空,因此没有额外的内核日志可以帮助确定根本原因。
由于 AP1302 已被成功检测到,媒体图也已正确创建,并且在 VIDIOC_STREAMON 期间没有报告任何内核错误,请问我应该执行哪些额外的检查或调试步骤来确定为什么流媒体播放失败并出现“管道破裂”错误?
感谢您的支持。
root@imx93evk:~# v4l2-ctl --list-devices
mxc-isi-cap (platform:4ae40000.isi):
/dev/video0
/dev/video1
/dev/media0
root@imx93evk:~# v4l2-ctl -d /dev/video0 --all
Driver Info:
Driver name : mxc-isi
Card type : mxc-isi-cap
Bus info : platform:4ae40000.isi
Driver version : 6.18.2
Capabilities : 0xa4201000
Video Capture Multiplanar
I/O MC
Streaming
Extended Pix Format
Device Capabilities
Device Caps : 0x24201000
Video Capture Multiplanar
I/O MC
Streaming
Extended Pix Format
Media Driver Info:
Driver name : mxc-isi
Model : FSL Capture Media Device
Serial :
Bus info : platform:4ae40000.isi
Media version : 6.18.2
Hardware revision: 0x00000000 (0)
Driver version : 6.18.2
Interface Info:
ID : 0x0300000a
Type : V4L Video
Entity Info:
ID : 0x00000008 (8)
Name : mxc_isi.0.capture
Function : V4L2 I/O
Pad 0x01000009 : 0: Sink
Link 0x0200000c: from remote pad 0x1000007 of entity 'mxc_isi.0' (Video Pixel Formatter): Data, Enabled, Immutable
Priority: 2
Video input : 0 (mxc_isi.0.capture: ok)
Format Video Capture Multiplanar:
Width/Height : 1920/1080
Pixel Format : 'YUYV' (YUYV 4:2:2)
Field : None
Number of planes : 1
Flags :
Colorspace : sRGB
Transfer Function : sRGB
YCbCr/HSV Encoding: ITU-R 601
Quantization : Limited Range
Plane 0 :
Bytes per Line : 3840
Size Image : 4147200
User Controls
horizontal_flip 0x00980914 (bool) : default=0 value=0 flags=0x00001000
vertical_flip 0x00980915 (bool) : default=0 value=0 flags=0x00001000
alpha_component 0x00980929 (int) : min=0 max=255 step=1 default=0 value=0 flags=0x00001000
root@imx93evk:~# media-ctl -p
Media controller API version 6.18.2
Media device information
------------------------
driver mxc-isi
model FSL Capture Media Device
serial
bus info platform:4ae40000.isi
hw revision 0x0
driver version 6.18.2
Device topology
- entity 1: crossbar (3 pads, 3 links, 1 route)
type V4L2 subdev subtype Unknown flags 0
device node name /dev/v4l-subdev0
routes:
0/0 -> 2/0 [ACTIVE]
pad0: SINK,MUST_CONNECT
[stream:0 fmt:UYVY8_1X16/1920x1080 field:none colorspace:srgb xfer:srgb ycbcr:601 quantization:lim-range]
<- "csidev-4ae00000.csi":1 [ENABLED,IMMUTABLE]
pad1: SINK,MUST_CONNECT
<- "mxc_isi.output":0 [ENABLED,IMMUTABLE]
pad2: SOURCE
[stream:0 fmt:UYVY8_1X16/1920x1080 field:none colorspace:srgb xfer:srgb ycbcr:601 quantization:lim-range]
-> "mxc_isi.0":0 [ENABLED,IMMUTABLE]
- entity 5: 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 colorspace:jpeg xfer:srgb ycbcr:601 quantization:full-range
compose.bounds:(0,0)/1920x1080
compose:(0,0)/1920x1080]
<- "crossbar":2 [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.0.capture":0 [ENABLED,IMMUTABLE]
- entity 8: mxc_isi.0.capture (1 pad, 1 link)
type Node subtype V4L flags 0
device node name /dev/video0
pad0: SINK
<- "mxc_isi.0":1 [ENABLED,IMMUTABLE]
- entity 16: mxc_isi.output (1 pad, 1 link)
type Node subtype V4L flags 0
pad0: SOURCE
-> "crossbar":1 [ENABLED,IMMUTABLE]
- entity 23: csidev-4ae00000.csi (2 pads, 2 links, 1 route)
type V4L2 subdev subtype Unknown flags 0
device node name /dev/v4l-subdev2
routes:
0/0 -> 1/0 [ACTIVE]
pad0: SINK
[stream:0 fmt:UYVY8_1X16/1920x1080 field:none colorspace:smpte170m xfer:709 ycbcr:601 quantization:lim-range]
<- "ap1302 2-003c":2 [ENABLED]
pad1: SOURCE
[stream:0 fmt:UYVY8_1X16/1920x1080 field:none colorspace:smpte170m xfer:709 ycbcr:601 quantization:lim-range]
-> "crossbar":0 [ENABLED,IMMUTABLE]
- entity 28: ap1302 2-003c (3 pads, 2 links, 0 routes)
type V4L2 subdev subtype Unknown flags 0
device node name /dev/v4l-subdev4
pad0: SINK
[stream:0 fmt:SGRBG12_1X12/1280x800 field:none colorspace:srgb
crop.bounds:(0,0)/1280x800
crop:(0,0)/1280x800]
<- "ar0144 0":0 [ENABLED,IMMUTABLE]
pad1: SINK
[stream:0 fmt:SGRBG12_1X12/1280x800 field:none colorspace:srgb
crop.bounds:(0,0)/1280x800
crop:(0,0)/1280x800]
pad2: SOURCE
[stream:0 fmt:UYYVYY8_0_5X24/4224x4092 field:none colorspace:srgb
crop.bounds:(0,0)/1280x800
crop:(0,0)/1280x800]
-> "csidev-4ae00000.csi":0 [ENABLED]
- entity 32: ar0144 0 (1 pad, 1 link, 0 routes)
type V4L2 subdev subtype Sensor flags 0
device node name /dev/v4l-subdev3
pad0: SOURCE
[stream:0 fmt:SGRBG12_1X12/1280x800 field:none colorspace:srgb]
-> "ap1302 2-003c":0 [ENABLED,IMMUTABLE]此致,
米拉夫
AP1302 探测成功并不能保证整个摄像机管道已配置完毕并开始传输。在 i.MX93 上,VIDIOC_STREAMON 返回 -1(管道破裂)通常意味着媒体管道元器件之一(AP1302 → MIPI CSI-2 接收器 → ISI 捕获路径)未能启动或协商有效流。您的日志仅确认检测到了 AP1302 I²C 设备:
ap1302 2-003c:检测到 AP1302 版本 0.2.6
但这并不能证实这一点:
首先我会检查:固件位置/名称
关于 FRDM-i.MX93 AP1302 支持,NXP 文档指出:
/lib/firmware/imx/camera/ap1302.fw
不仅仅是 /lib/firmware。
请核实:
ls -l /lib/firmware/imx/camera/ap1302.fw
并检查启动日志:
dmesg | grep -i 固件
dmesg | grep -i ap1302
查找类似这样的消息:
请求固件
固件已加载
固件加载失败
第二步:你使用的是正确的DTB吗?
版本说明表明 AP1302 支持与 i.MX93 EVK 设备树支持相关。
检查:
cat /proc/device-tree/model
cat /proc/cmdline
并确定实际加载的 DTB。
另请查看:
dmesg | grep -i ap1302
dmesg | grep -i csi
dmesg | grep -i isi
第三项检查:验证介质拓扑结构
在尝试使用 v4l2-ctl 之前,请先验证媒体图是否存在:
shell
media-ctl -p
显示更多行
您应该会看到类似以下的实体:
ap1302
CSI
伊西
videoX
如果 /dev/media0 不存在,则相机管道创建不正确。一个非常相似的FRDM-i.MX93 AP1302案例显示:
media-ctl -p
枚举 /dev/media0 失败
这表明媒体管道尚未实例化。
请检查:
ls -l /dev/media*
第四项检查:检查协商好的格式
运行:
v4l2-ctl --list-devices
以及
v4l2-ctl -d /dev/video0 --all
另外:
media-ctl -p
AP1302 固件通常输出处理后的 YUV 格式,而不是 RAW Bayer 格式。另一个常见的故障是:
AP1302 输出格式 A
ISI 配置为 B 格式
导致流媒体启动失败。格式不匹配通常表现为 STREAMON 故障或 CSI 管道错误。
第五项检查:在 STREAMON 期间检查 CSI 错误
打开另一个终端并进行监测:
dmesg -w
然后运行:
v4l2-ctl -d /dev/video0 \
--stream-mmap=3 \
--stream-count=10
查找类似这样的消息:
CSI超时
帧开始超时
未收到任何数据
先进先出溢出
MIPI错误
链接未启用
这些信息通常会揭示管道破裂的真正原因。