Verdin IMX95のMIPI-CSIドライバについて

00891001 Verdin iMX95 Hexa 8GB WB IT V1.0Bを購入して、動作確認を進めています。

TorizonOS7.6.0をビルドしてそれをベースとして動作確認をしています。
MIPI-CSIでのカメラ映像入力で詰まっており、v4lでのストリームパスは通りましたが、映像入力がされません。

確認しているところ、imx95のデバイスツリーでMIPI-CSIで示されている
mipi_csi0: csi@4ad30000 {
compatible = “snps,dw-mipi-csi2”, “syscon”;
に該当するソースが
/drivers/media/platform/nxp/dwc-mipi-csi2.cとなっております。
dwc-mipi-csi2.cで定義されているレジスタがNXPのIMX95のリファレンスマニュアルのレジスタマップとあってません。
ですのでdwc-mipi-csi2.c内でレジスタライトしてもリードバックで反映されないレジスタがありました。
imx95向けのmipi-csiドライバは他にあるのでしょうか?

Hi, I’m the Toradex AI Assistant.

I might make mistakes or occasionally get you wrong. Our support team will step in if needed.


Verdin iMX95のMIPI-CSI対応状況について

Verdin iMX95 Hexa 8GB WB IT(PID8: 00891001)でのMIPI-CSI機能についてお答えします。

MIPI-CSIインターフェースの仕様

Verdin iMX95データシートによると、MIPI-CSIインターフェースは以下のピン配置で提供されています(1)

  • CSI_1_D3_P/N (X1 pins 99/101): データレーン3
  • CSI_1_D2_P/N (X1 pins 105/107): データレーン2
  • CSI_1_CLK_P/N (X1 pins 111/113): クロック信号
  • CSI_1_D1_P/N (X1 pins 117/119): データレーン1
  • CSI_1_D0_P/N (X1 pins 123/125): データレーン0

これらのピンは「MIPI-CSIインターフェース専用で、代替機能はサポートしていません」(1)

ドライバとレジスタマップの問題について

ご指摘の通り、dwc-mipi-csi2.cドライバのレジスタマップがiMX95のリファレンスマニュアルと一致しない問題は、ハードウェア固有の実装差異によるものと考えられます。

デバイスツリー設定の参考

デバイスツリーでのMIPI-CSI設定については、Toradexの公式ドキュメントで詳細なガイダンスが提供されています(2)。デバイスツリーオーバーレイを使用することで、ベースデバイスツリーを変更せずにハードウェア設定をカスタマイズできます。

推奨アプローチ

  1. デバイスツリーオーバーレイの活用: 既存のオーバーレイを参考に、iMX95固有の設定を適用
  2. コミュニティでの情報収集: 類似の問題について、MIPI-CSI camera migration to Yocto Scarthgap(3)などの議論を参考にする

注意事項

Verdin iMX95は比較的新しいプラットフォームのため、MIPI-CSI機能のソフトウェアサポートが完全に整備されていない可能性があります。TorizonOS 7.6.0での対応状況については、最新の開発状況を確認することをお勧めします。

具体的なドライバの実装や代替ソリューションについては、現在利用可能な情報源では詳細を確認できませんでした。

Best regards, Toradex AI Assistant.


Did you like my answer? :+1: :-1:

If I answered your question, please tick the “Solution” checkbox.

For follow-up questions to me, please use @ToradexAI in your post.

@pal_mouri 様、ご連絡ありがとうございます。

デバイスツリーのノードは、オーバーレイで有効化されていますか?それともデバイスツリー自体を変更されていますか?

例えば、以下のようなオーバーレイを使用していますでしょうか:
https://git.toradex.com/device-tree-overlays.git/tree/overlays/verdin-imx95_ov5640_overlay.dts?h=toradex_6.6-2.2.x-imx

ご確認いただけると助かります。

アルバロ様

はい。verdin-imx95_ov5640_overlay.dtsを参考に組み込んでいます。

ただ、上記デバイスツリーファイルでも有効化されていますmipi_csi0 について

カーネルソースに含まっているベースのデバイスツリーファイル

\arch\arm64\boot\dts\freescale\imx95.dtsi

のMIPI-CSIで示されている

mipi_csi0: csi@4ad30000 {
compatible = “snps,dw-mipi-csi2”, “syscon”;
に該当するソースが
/drivers/media/platform/nxp/dwc-mipi-csi2.cとなっております。

dwc-mipi-csi2.cで定義されているレジスタがNXPのIMX95のリファレンスマニュアルのレジスタマップとあってないので質問させていただきました。

@pal_mouri

Verdin iMX95 + BSP 7.7 環境において、media-ctl を用いて media pipeline を明示的に設定することで、OV5640 の capture が正常に動作することを確認しました。

こちらでは Toradex Multimedia Image BSP 7.7.0-devel-202605-build.20 にて、以下の手順で動作確認できています。

W=1920; H=1080; FMT="UYVY8_1X16/${W}x${H}"
MEDIA=0; VIDEO=2

media-ctl -d /dev/media${MEDIA} -l "'ov5640 4-003c':0 ->'csidev-4ad30000.csi':0 [1]"
media-ctl -d /dev/media${MEDIA} -V "'ov5640 4-003c':0 [fmt: ${FMT} field:none]"

gst-launch-1.0 v4l2src device="/dev/video${VIDEO}" ! \
  video/x-raw,width=${W},height=${H},format=YUY2,framerate=30/1 ! \
  waylandsink window-width=${W} window-height=${H} sync=false -v

重要なポイントは、media-ctl による設定です。

このプラットフォームでは、カメラ capture path は Linux Media Controller framework を通じて管理されています。
Device Tree は hardware topology を定義しますが、実際に使用する video pipeline は userspace 側から設定する必要があります。

今回のケースでは、最初の media-ctl コマンドによって、OV5640 sensor subdevice と i.MX95 CSI receiver 間の media link を有効化しています。

'ov5640 4-003c':0 -> 'csidev-4ad30000.csi':0

2つ目の media-ctl コマンドでは、OV5640 source pad の format を設定しています。

UYVY8_1X16 / 1920x1080

その後、/dev/video2 経由で GStreamer pipeline を開始すると、V4L2 streaming path が開始され、関連する kernel driver が選択された media pipeline および format に基づいて、sensor と capture block を runtime で設定します。

CSI register に関するご指摘についてですが、CSI register の設定自体は OV5640 overlay や Device Tree に直接記述されるものではないと考えています。Overlay は主に board-level topology と sensor/capture subsystem 間の接続を記述しており、Device Tree 側では i.MX95 の CSI subsystem を mapping しています。

現時点での理解としては、0x4AD30000 に存在する i.MX95 CSI subsystem は、Synopsys DesignWare MIPI CSI-2 Host Controller driver stack を通じて interfaced されています。

driver は、この Synopsys CSI-2 host controller interface を media graph および V4L2 configuration と組み合わせて使用しており、今回の OV5640 setup ではそれで十分に stream を正常受信できているように見えます。

つまり、OV5640 overlay や userspace configuration 自体が CSI hardware register を直接設定しているわけではありません。これらは hardware topology と media pipeline を定義・設定しており、実際の low-level CSI configuration は、media pipeline が media-ctl によって有効化され、format が設定された後に、関連する kernel driver によって runtime で処理されます。

ご参考になれば幸いです。
Alvaro.

アルバロ様

ご回答ありがとうございます。

その後映像出力側の方も変更しているとMIPI-CSIの映像が出力されるようになりました。

問題は解決しましたので本件Closeして頂き問題ございません。