こんにちは、
私は、FPGAを当社独自のi.MX8MPボードに接続する必要があるプロジェクトに取り組んでいます。私はtc358746(Parallel -> CSI2)ドライバをYocto lf-5.15.71バージョンにサポートしようとしています。
今のところ、ビデオパイプライン (FPGA (YUV4:2:2) -> ブリッジ (YUV4:2:2/4-lane) -> mipi_csi0 -> isi0) から YUV4:2:2 フォーマットで 1920x1080@30Hz を出力したいのですが、Gstreamer や v4l2-ctl を使用してフレームをキャプチャすることができません。
v4l-subdev1はv4l2デバイスリストに表示されません
ブリッジのmedia-ctl出力とdmesgログを探してください。問題のトラブルシューティングに関するご意見をいただけると大変ありがたいです。
root@:~$ media-ctl -p
Media controller API version 5.15.71
Media device information
------------------------
driver mxc-md
model FSL Capture Media Device
serial
bus info
hw revision 0x0
driver version 5.15.71
Device topology
- entity 1: mxc_isi.0 (16 pads, 2 links)
type V4L2 subdev subtype Unknown flags 0
pad0: Sink
<- "mxc-mipi-csi2.0":4 [ENABLED]
pad1: Sink
pad2: Sink
pad3: Sink
pad4: Sink
pad5: Sink
pad6: Sink
pad7: Sink
pad8: Sink
pad9: Sink
pad10: Sink
pad11: Sink
pad12: Source
-> "mxc_isi.0.capture":0 [ENABLED]
pad13: Source
pad14: Source
pad15: Sink
- 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":12 [ENABLED]
- entity 22: mxc-mipi-csi2.0 (8 pads, 2 links)
type Node subtype V4L flags 0
device node name /dev/v4l-subdev0
pad0: Sink
<- "tc358748 2-000e":0 [ENABLED,IMMUTABLE]
pad1: Sink
pad2: Sink
pad3: Sink
pad4: Source
-> "mxc_isi.0":0 [ENABLED]
pad5: Source
pad6: Source
pad7: Source
- entity 31: tc358748 2-000e (1 pad, 1 link)
type V4L2 subdev subtype Unknown flags 0
device node name /dev/v4l-subdev1
pad0: Source
[fmt:UYVY8_2X8/1920x1080@1/30 field:none colorspace:srgb]
-> "mxc-mipi-csi2.0":0 [ENABLED,IMMUTABLE]root@:~$ v4l2-ctl --list-devices
():
/dev/v4l-subdev0
mxc-isi-cap (platform:32e00000.isi:cap_devic):
/dev/video2
FSL Capture Media Device (platform:mxc-md):
/dev/media0
vsi_v4l2dec (platform:vsi_v4l2dec):
/dev/video1
vsi_v4l2enc (platform:vsi_v4l2enc):
/dev/video0root@:~$ v4l2-ctl --device /dev/video2 --list-formats-ext
ioctl: VIDIOC_ENUM_FMT
Type: Video Capture Multiplanar
[3]: 'YUYV' (YUYV 4:2:2)
Size: Discrete 1920x1080
Interval: Discrete 0.033s (30.000 fps)
Interval: Discrete 0.033s (30.000 fps)root@:~$ v4l2-ctl -d /dev/video2 --all
Driver Info:
Driver name : mxc-isi-cap
Card type : mxc-isi-cap
Bus info : platform:32e00000.isi:cap_devic
Driver version : 5.15.71
Capabilities : 0x84201000
Video Capture Multiplanar
Streaming
Extended Pix Format
Device Capabilities
Device Caps : 0x04201000
Video Capture Multiplanar
Streaming
Extended Pix Format
Media Driver Info:
Driver name : mxc-md
Model : FSL Capture Media Device
Serial :
Bus info :
Media version : 5.15.71
Hardware revision: 0x00000000 (0)
Driver version : 5.15.71
Interface Info:
ID : 0x03000014
Type : V4L Video
Entity Info:
ID : 0x00000012 (18)
Name : mxc_isi.0.capture
Function : V4L2 I/O
Pad 0x01000013 : 0: Sink
Link 0x02000021: from remote pad 0x100000e of entity 'mxc_isi.0' (Video Pixel Formatter): Data, Enabled
Priority: 2
Format Video Capture Multiplanar:
Width/Height : 1920/1080
Pixel Format : 'RGBP' (16-bit RGB 5-6-5)
Field : None
Number of planes : 1
Flags :
Colorspace : sRGB
Transfer Function : Default
YCbCr/HSV Encoding: ITU-R 601
Quantization : Full Range
Plane 0 :
Bytes per Line : 3840
Size Image : 4147200
Crop Capability Video Output:
Bounds : Left 0, Top 0, Width 1920, Height 1080
Default : Left 0, Top 0, Width 1920, Height 1080
Pixel Aspect: 1/1
Selection Video Output: compose, Left 0, Top 0, Width 1920, Height 1080, Flags:
Selection Video Output: compose_default, Left 0, Top 0, Width 1920, Height 1080, Flags:
Selection Video Output: compose_bounds, Left 0, Top 0, Width 1920, Height 1080, Flags:
Streaming Parameters Video Capture:
Capabilities : timeperframe
Frames per second: 30.000 (30/1)
Read buffers : 0
User Controls
horizontal_flip 0x00980914 (bool) : default=0 value=0
vertical_flip 0x00980915 (bool) : default=0 value=0
alpha_component 0x00980929 (int) : min=0 max=255 step=1 default=0 value=0[ 15.547696] tc358748 2-000e: tc358748_get_pad_format code=0x2006, w/h=(1920,1080), colorspace=8, field=1
[ 26.966015] tc358748 2-000e: tc358748_get_pad_format code=0x2006, w/h=(1920,1080), colorspace=8, field=1
.
.
.
[ 26.968164] tc358748 2-000e: tc358748_get_pad_format code=0x2006, w/h=(1920,1080), colorspace=8, field=1
[ 26.968181] tc358748 2-000e: tc358748_get_pad_format code=0x2006, w/h=(1920,1080), colorspace=8, field=1
[ 26.968195] tc358748 2-000e: tc358748_get_pad_format code=0x2006, w/h=(1920,1080), colorspace=8, field=1
[ 26.968210] tc358748 2-000e: tc358748_get_pad_format code=0x2006, w/h=(1920,1080), colorspace=8, field=1
[ 26.971188] mxc_isi.0: Not match format, set default
[ 26.971199] mxc_isi.0: Not match format, set default
[ 27.305025] tc358748 2-000e: tc358748_get_pad_format code=0x2006, w/h=(1920,1080), colorspace=8, field=1
[ 27.305150] tc358748 2-000e: tc358748_get_pad_format code=0x2006, w/h=(1920,1080), colorspace=8, field=1
[ 27.305352] tc358748 2-000e: tc358748_get_pad_format code=0x2006, w/h=(1920,1080), colorspace=8, field=1
[ 27.305392] tc358748 2-000e: tc358748_get_pad_format code=0x2006, w/h=(1920,1080), colorspace=8, field=1
[ 27.305442] tc358748 2-000e: tc358748_get_pad_format code=0x2006, w/h=(1920,1080), colorspace=8, field=1
[ 27.305507] tc358748 2-000e: tc358748_get_pad_format code=0x2006, w/h=(1920,1080), colorspace=8, field=1
[ 27.309455] enter tc358748_s_power = ON
[ 27.309471] tc358748 2-000e: tc358748_enable_hw
[ 27.311682] tc358748 2-000e: tc358748_set_pad_format
[ 27.311696] tc358748 2-000e: tc358748_get_pad_format code=0x2006, w/h=(1920,1080), colorspace=8, field=1
[ 27.311705] tc358748 2-000e: tc358748_get_pad_format code=0x2006, w/h=(1920,1080), colorspace=8, field=1
[ 27.316716] bypass csc
[ 27.316724] input fmt YUV4
[ 27.316728] output fmt YUYV
[ 27.667770] tc358748 2-000e: tc358748_get_pad_format code=0x2006, w/h=(1920,1080), colorspace=8, field=1
[ 27.667876] tc358748 2-000e: tc358748_set_pad_format
[ 27.667882] tc358748 2-000e: tc358748_get_pad_format code=0x2006, w/h=(1920,1080), colorspace=8, field=1
[ 27.667889] tc358748 2-000e: tc358748_get_pad_format code=0x2006, w/h=(1920,1080), colorspace=8, field=1
[ 27.672900] bypass csc
[ 27.672909] input fmt YUV4
[ 27.672912] output fmt YUYV
[ 27.672922] enter tc358748_s_power = OFF
[ 27.672929] tc358748 2-000e: tc358748_disable_hw
[ 27.701511] enter tc358748_s_power = ON
[ 27.701530] tc358748 2-000e: tc358748_enable_hw
[ 27.703406] tc358748 2-000e: tc358748_set_pad_format
[ 27.703418] tc358748 2-000e: tc358748_get_pad_format code=0x2006, w/h=(1920,1080), colorspace=8, field=1
[ 27.703427] tc358748 2-000e: tc358748_get_pad_format code=0x2006, w/h=(1920,1080), colorspace=8, field=1
[ 27.708440] bypass csc
[ 27.708451] input fmt YUV4
[ 27.708456] output fmt YUYV
[ 28.035292] tc358748 2-000e: [tc358748_stream,1152]: Stream enable ...
[ 28.035309] tc358748 2-000e: tc358748_set_pll
[ 28.035313] tc358748 2-000e: tc358748_calc_pll
[ 28.035382] tc358748 2-000e: PLL: refclk 10000000, fbd 88, prd 0, frs 1
[ 28.035388] tc358748 2-000e: PLL: pll_clk: 445000000, CSIClk 222500000, CSIByteClk 55625000
[ 28.035393] tc358748 2-000e: PLL: pclk 74166666 (FPGA(Hardcode=>: 74250000MHz))
[ 28.037869] tc358748 2-000e: tc358748_sw_reset
[ 28.038566] tc358748 2-000e: tc358748_apply_misc_config
[ 28.038902] tc358748 2-000e: DATAFMT: 0x60
[ 28.039301] tc358748 2-000e: CONFCTL[PDATAF]: 0x0
[ 28.039642] tc358748 2-000e: FIFOCTL: 0x20
[ 28.039976] tc358748 2-000e: WORDCNT: 0xf00
[ 28.039984] tc358748 2-000e: tc358748_enable_csi_lanes: 1
[ 28.040454] tc358748 2-000e: CLW_CNTRL: 0 0x140
[ 28.040777] tc358748 2-000e: D0W_CNTRL: 0 0x144
[ 28.041158] tc358748 2-000e: D1W_CNTRL: 0 0x148
[ 28.041538] tc358748 2-000e: D2W_CNTRL: 0 0x14c
[ 28.041899] tc358748 2-000e: D3W_CNTRL: 0 0x150
[ 28.041908] tc358748 2-000e: tc358748_apply_dphy_config
[ 28.041912] tc358748 2-000e: dsiclk_nsk: 4494
[ 28.041916] tc358748 2-000e: ui_nsk: 2247
[ 28.041920] tc358748 2-000e: csibclk_nsk: 17977
[ 28.041924] tc358748 2-000e: phy_delay_nsk: 26965
[ 28.042278] tc358748 2-000e: LINEINITCNT: 0x15ba
[ 28.042661] tc358748 2-000e: LPTXTIMECNT: 0x2
[ 28.043043] tc358748 2-000e: TCLK_HEADERCNT: 0xa03
[ 28.043456] tc358748 2-000e: TCLK_TRAILCNT: 0xffffffff
[ 28.043803] tc358748 2-000e: THS_HEADERCNT: 0xffffee03
[ 28.044156] tc358748 2-000e: TWAKEUP: 0x49e0
[ 28.044535] tc358748 2-000e: TCLK_POSTCNT: 0x7
[ 28.044914] tc358748 2-000e: THS_TRAILCNT: 0x1
[ 28.045298] tc358748 2-000e: HSTXVREGEN: 0x1f
[ 28.045307] tc358748 2-000e: tc358748_enable_csi_module: 1
[ 28.045680] tc358748 2-000e: STARTCNTRL: 0x1
[ 28.046025] tc358748 2-000e: CSI_START: 0x1
[ 28.046407] tc358748 2-000e: CSI_CONFW_REG: 2734719110 (0x518)
[ 32.176687] tc358748 2-000e: tc358748_get_pad_format code=0x2006, w/h=(1920,1080), colorspace=8, field=1
[ 32.176772] tc358748 2-000e: tc358748_get_pad_format code=0x2006, w/h=(1920,1080), colorspace=8, field=1
[ 32.178272] tc358748 2-000e: [tc358748_stream,1152]: Stream disable ...
[ 32.240654] enter tc358748_s_power = OFF
[ 32.240673] tc358748 2-000e: tc358748_disable_hw
[ 60.422080] imx-sdma 30bd0000.dma-controller: firmware found.
[ 60.422080] imx-sdma 30e10000.dma-controller: firmware found.
[ 60.422326] imx-sdma 30bd0000.dma-controller: loaded firmware 4.6
[ 66.531400] cfg80211: failed to load regulatory.db
@shaswath
問題は解決できましたか?可能であれば、TC358748カーネルドライバーコードと最新のDevicetreeファイルを共有していただけませんか?私も同じ問題で困っています。どうもありがとうございます
任意のフォーマットを選択できるわけではありません。ブリッジ側の設定によります。TC358748レジスタを確認し、そこに設定したフォーマットを確認してから、imx8mp側の正しいフォーマットを選択してください。
こんにちは、
返信が遅くなり申し訳ありません。ご提案のフォーマットを使いましたが、添付のサンプルからもCANが見えるように、いくつかのデータが見えます。まだ完璧ではない。MEDIA_BUS_FMTとV4L2_PIX_FMTをいろいろ試してみたり、周波数もいろいろ試してみたりしました(23.98、50、60など)。
MEDIA_BUS_FMT_YUYV8_1X16 / UYVY8_1X16 / 2X8。
V4L2_PIX_FMT_YUYV / UYVY / YUV422P。
しかし、dmesgログからもわかるように、CRCエラーが多くあります。また、media-ctl -pからはブリッジノード以外にフォーマット情報が一切表示されていないことに気づきました。
フォーマットを考慮する必要があるかもしれません。CHNL_IMG_CTRLを確認したところ、100000バイトのYUV422_1P8Pで、カラーコンポーネントごとに8ビット、1プレーン、YUVインターリーブパックバイトでした。
https://github.com/nxp-imx/linux-imx/blob/lf-5.15.y/drivers/staging/media/imx/imx8-isi-fmt.c
ヤージュ
。名前= "YUYV-16",
.fourcc= V4L2_PIX_FMT_YUYV、
。深さ= { 16 }、
。色= MXC_ISI_OUT_FMT_YUV422_1P8P、
.memplanes= 1、
.colplanes= 1、
.align= 3、
.mbus_code= MEDIA_BUS_FMT_YUYV8_1X16、
}
ISI のこのフォーマットをデフォルトとして選択し、ブリッジ側も確認してください。
TC358748のdtsファイル設定で4データレーンを確認しましたが、ログファイルには1レーンしか表示されていません([ 39.473097] tc358748 2-000e: tc358748_enable_csi_lanes: 1)。もう一度確認してください。
--> これは関数呼び出しを示すためのもので、その下のラインは4つのデータレーンと1つのクロックレーンを有効にしています。
tc358748 2-000e: CLW_CNTRL: 0 0x140
tc358748 2-000e: D0W_CNTRL: 0 0x144
tc358748 2-000e: D1W_CNTRL: 0 0x148
tc358748 2-000e: D2W_CNTRL: 0 0x14c
tc358748 2-000e: D3W_CNTRL: 0 0x150
csi&isi dump.txt では、[ 58.212425] tc358748 2-000e: PLL: pclk 218750000 (FPGA(ハードコード=>: 74250000MHz))
しかし、gst-lauch-1.0.txt では、[ 39.413394] tc358748 2-000e: PLL: pclk 218750000 (FPGA(Hardcode=>: 148500000MHz))
--> 148.5MHzを使用しています。
SO、実際にどの時計をセットしたのですか?DTSを確認しましたが、74.25Mピクセルクロックを設定しています。クロックを測定してhs-settleとclk-settleを設定することをお勧めします
--> hs-settle 値は、(ピクセルレート * ピクセルあたりのビット数) / (レーン数 * 2) に基づいて設定され、148.5 pixclk * 16bpp / 2 * 4 レーン = 475.2Mbits/s となります。SO RX_HS_SETTLEは10です。
また、基板上のデータレーンも入れ替わっていました。SO、この改造の後、Gstreamerやv4l2-ctlでビデオキャプチャを起動すると緑色の画面が出ています [[ ## completed ##]]
gst-launch-1.0 -e \
v4l2src device=/dev/video3 ! \
'video/x-raw,format=YUY2,width=1920,height=1080,framerate=60/1' ! \
videoconvert ! queue ! waylandsink
Setting pipeline to PAUSED ...
Pipeline is live and does not need PREROLL ...
Pipeline is PREROLLED ...
Setting pipeline to PLAYING ...
New clock: GstSystemClock
Redistribute latency...
^Chandling interrupt.
Interrupt: Stopping pipeline ...
EOS on shutdown enabled -- Forcing EOS on the pipeline
Waiting for EOS...
Got EOS from element "pipeline0".
EOS received - stopping pipeline...
Execution ended after 0:00:09.751003250
Setting pipeline to NULL ...
Total showed frames (544), playing for (0:00:09.750853750), fps (55.790)
green screen.jpg
TC358748のdtsファイル設定で4データレーンを確認しましたが、ログファイルには1レーンしか表示されていません([ 39.473097] tc358748 2-000e: tc358748_enable_csi_lanes: 1)。もう一度確認してください。
csi&isi dump.txt では、[ 58.212425] tc358748 2-000e: PLL: pclk 218750000 (FPGA(ハードコード=>: 74250000MHz))
しかし、gst-lauch-1.0.txt では、[ 39.413394] tc358748 2-000e: PLL: pclk 218750000 (FPGA(Hardcode=>: 148500000MHz))
SO、実際にどの時計をセットしたのですか?DTSを確認しましたが、74.25Mピクセルクロックを設定しています。クロックを測定してhs-settleとclk-settleを設定することをお勧めします
こんにちは、 @joanxie さん。
はい、TC358748への入力信号は正常で、TC358748から信号が出力されているのも確認できます。
Gstreamerを使用してキャプチャを開始するには:
gst-launch-1.0v4l2src デバイス=/dev/video2 !video/x-raw、幅=1920、高さ=1080 !自動ビデオシンク
もう一つの問題は、dtsでISIノードを有効にすると、数分後にシステムがハングアップすることです。
6-min.jpg
5-min.jpg
今のところは、Gstreamerやv4l2-ctlを使ってフレームをキャプチャすることができません。
>どのgstreamerコマンドを使っていて、どんなメッセージが出ますか?TC358748からの信号が完全に正常かどうか確認してもらえますか?TC358748側を確認しましたか?
登録ダンプファイルはこちらです。
imx8mp側から見ると、問題は見当たらず、接続設定も正しく行われています。
[ 7.992257 ] mx8-img-md: 登録センサーサブデバイス: tc358748 2-000e (1)
[ 8.002921] mx8-img-md: 作成されたリンク [mxc_isi.0]=> [mxc_isi.0.capture]
[ 8.018980] mx8-img-md: リンク [mxc-mipi-csi2.0] を作成しました=> [mxc_isi.0]
[ 8.025519] mx8-img-md: リンク [tc358748 2-000e] => [mxc-mipi-csi2.0] を作成しました
[ 8.032634] mxc-md 32c00000.bus:camera:mxc_md_create_links
実際、ISI0はMIPI CSI0用で、MIPI CSI0に port@1 を加えると現在のBSPでエラーが出るはずです。では、MIPIドライバーは変更していますか?しかし正しく設定しているなら、キャプチャには影響しないはずです。FPGA側を確認して、正しいクロック設定やデータ送信をしているか確認し、TC358748のレジスタを再確認し、またmipi csiやISIレジスタもダンプしてエラービットをチェックしてください
添付ファイルをご確認ください。
ログファイルとDTSファイルを送ってもらえますか?