こんにちは、
私は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 が「 Broken pipe(パイプ破損) 」エラー で故障しているのか 、教えていただけません か?
ストリーミングを正常に開始する前に、AP1302のファームウェア、デバイスツリー、メディアパイプライン、またはセンサの初期化に追加の設定が必要ですか?
さらに、現時点では「LF_v6.18.2-1.0.0_images_IMX93EVK」というプリビルドイメージを使用しています。
追加のログや情報が必要な場合はお知らせください。
再開まで今しばらくお待ちください。
AEチームと話し合っています。
こんにちは@yipingwang
ご返信ありがとうございます。
参考までに、私の回答を以下に記載します。
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.fwAP1302は起動時に正常に検出されました。
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中にカーネルエラーも報告されていないので、「 Broken pipe」 エラーでストリーミングが失敗する原因を特定するために、どのような追加のチェックやデバッグステップを教えていただけますか?
再開まで今しばらくお待ちください。
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/ファームウェア/imx/カメラ/ap1302.fw
そしてブートログを確認してください。
dmesg | grep -i firmware
dmesg | grep -i ap1302
次のようなメッセージを探してください。
ファームウェアを要求する
ファームウェアがロードされました
ファームウェアの読み込みに失敗しました
2つ目の確認事項:正しい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を試す前に、メディアグラフが存在するか確認してください:
シェル
media-ctl -p
もっと行を表示
以下のようなエンティティが表示されるはずです。
ap1302
CSI
イシ
ビデオX
/dev/media0が存在しない場合、カメラパイプラインが正しく作成されていません。非常に似たFRDM-i.MX93 AP1302 CASEは以下の通りでした:
media-ctl -p
/dev/media0 の列挙に失敗しました
これはメディアパイプラインがインスタンス化されていないことを示していました。
チェックしてください:
ls -l /dev/media*
4つ目の確認事項:交渉済みのフォーマットを検査する
次を実行します。
v4l2-ctl --list-devices
そして、
v4l2-ctl -d /dev/video0 --all
また:
media-ctl -p
AP1302のファームウェアは通常、RAWベイヤーではなく、処理済みのYUVフォーマットを出力します。もう一つよくある失敗例は次のとおりです。
AP1302はフォーマットAを出力する
ISIはフォーマットB用に構成されています
ストリームの起動失敗を引き起こしています。フォーマットの不一致は、STREAMONの失敗やCSIパイプラインのエラーとして現れることが多い。
5回目のチェック:STREAMON実行中のCSIエラーを検査する
別のターミナルを開いて監視します。
dmesg -w
そして、以下を実行します。
v4l2-ctl -d /dev/video0 \
--stream-mmap=3 \
--stream-count=10
次のようなメッセージを探してください。
CSIタイムアウト
フレーム開始タイムアウト
データを受信しませんでした
FIFOオーバーフロー
MIPIエラー
リンクが有効になっていません
これらのメッセージは通常、配管破損の本当の原因を明らかにします。