Debian Bookworm を実行するカスタムボードがあり、FPGA を使用して SDI ビデオを CSI2 にブリッジします。FPGA i2cインターフェースは、SDI信号がビデオフォーマット(さまざまなフレームレートで720pまたは1080p)を制御するため、非常にシンプルです。すべてのフレーム レートは、300MHz の CSI クロックと 4 レーンで 600MHz のデータ レートを使用します。
私は CSI2-SAM を使用する (と思う) サブデバイス ドライバーを作成しました。720p 50Hz入力では、次のように表示されます。
$ media-ctl -d /dev/media0 -p Media controller API version 6.1.36
Media device information
------------------------
driver mxc-md
model FSL Capture Media Device
serial
bus info platform:32c00000.bus:camera
hw revision 0x0
driver version 6.1.36
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/video3
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
<- "mc_camera_mipi 3-003c":0 [ENABLED,IMMUTABLE]
pad1: Sink
pad2: Sink
pad3: Sink
pad4: Source
-> "mxc_isi.0":0 [ENABLED]
pad5: Source
pad6: Source
pad7: Source
- entity 31: mc_camera_mipi 3-003c (1 pad, 1 link)
type V4L2 subdev subtype Sensor flags 0
device node name /dev/v4l-subdev1
pad0: Source
[fmt:UYVY8_2X8/1280x720 field:none colorspace:rec709 xfer:709 ycbcr:601 quantization:lim-range]
-> "mxc-mipi-csi2.0":0 [ENABLED,IMMUTABLE]これは私には正しいように思えます。
最初に私は気づきます:
/sys/devices/platform/soc@0/32c00000.bus/32c00000.bus:camera/32e40000.csi$ cat ./power/runtime_status
suspendedキャプチャを開始していないため、問題ありません。
次に、実行します。
$ v4l2-ctl --set-fmt-video=width=1280,height=720,pixelformat="NV12" --device=/dev/video3 --stream-count=10 --stream-mmapランタイムステータスが「アクティブ」に変わります。'スコープを使用すると、FPGAはサブデバイスの要求に応じてCSIビデオデータの出力を開始することがわかります。
[326921.869991] mc_camera_mipi 3-003c: s_stream: 1get_fmt は、ドキュメントに記載されている UYVY8 の出力形式に一致する 0x2006 (MEDIA_BUFS_FMT_UYVY8_2x8) のコードを返します。また、FPGAによって検出された解像度とフレームレートも出力します。
これはすべて私には問題ないように見えますが、v4l2キャプチャは最初のフレームを待って停止します。
ioctl(3, VIDIOC_G_FMT, {type=V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLANE, fmt.pix_mp={width=1280, height=720, pixelformat=v4l2_fourcc('N', 'V', '1', '2') /* V4L2_PIX_FMT_NV12 */, field=V4L2_FIELD_NONE, colorspace=V4L2_COLORSPACE_SRGB, plane_fmt=[{sizeimage=1382400, bytesperline=1280}], num_planes=1}}) = 0
ioctl(3, VIDIOC_STREAMON, [V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLANE]) = 0
ioctl(3, VIDIOC_G_FMT, {type=V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLANE, fmt.pix_mp={width=1280, height=720, pixelformat=v4l2_fourcc('N', 'V', '1', '2') /* V4L2_PIX_FMT_NV12 */, field=V4L2_FIELD_NONE, colorspace=V4L2_COLORSPACE_SRGB, plane_fmt=[{sizeimage=1382400, bytesperline=1280}], num_planes=1}}) = 0
pselect6(4, NULL, NULL, [3], {tv_sec=0, tv_nsec=0}, NULL) = 0 (Timeout)
ioctl(3, VIDIOC_DQBUF, {type=V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLANEですから、明らかに何かが間違っています。
私はV4L2に少し初心者ですが、同様のPCIeインターフェイスを備えたPCIeベースのビデオキャプチャ用のドライバーを作成しました。
これをデバッグするためにどのツールを適用できるかについての提案、または私が間違っていることについてのヒントは、ありがたいことに受け取られます。
ありがとうございます
P.S. デバイスツリーのスニペットが続きます
&i2c4 {
clock-frequency = <400000>;
pinctrl-names = "default", "gpio";
pinctrl-0 = <&pinctrl_i2c4>;
pinctrl-1 = <&pinctrl_i2c4_gpio>;
scl-gpios = <&gpio5 20 GPIO_ACTIVE_HIGH>;
sda-gpios = <&gpio5 21 GPIO_ACTIVE_HIGH>;
status = "okay";
mc_camera_mipi0 {
compatible = "v4,mc_camera_mipi";
reg = <0x3c>;
clocks = <&clk IMX8MP_CLK_IPP_DO_CLKO2>;
clock-names = "xclk";
/* Disabled CLKO2, since DART-MX8MP camera expansion board uses
* its own oscillator. Enable CLK02 if your desing requres it
*/
#if 0
assigned-clocks = <&clk IMX8MP_CLK_IPP_DO_CLKO2>;
assigned-clock-parents = <&clk IMX8MP_CLK_24M>;
#endif
assigned-clock-rates = <24000000>;
csi_id = <0>;
/* powerdown-gpios = <&pca6408_1 2 GPIO_ACTIVE_HIGH>;
reset-gpios = <&pca6408_1 0 GPIO_ACTIVE_LOW>;
*/
mclk = <24000000>;
mclk_source = <0>;
mipi_csi;
status = "okay";
port {
mc_camera_mipi_0_ep: endpoint {
remote-endpoint = <&mipi_csi0_ep>;
data-lanes = <1 2 3 4>;
clock-lanes = <0>;
};
};
};
};
&mipi_csi_0 {
#address-cells = <1>;
#size-cells = <0>;
status = "okay";
port@0 {
reg = <0>;
mipi_csi0_ep: endpoint {
remote-endpoint = <&mc_camera_mipi_0_ep>;
data-lanes = <4>;
csis-hs-settle = <6>;
csis-clk-settle = <2>;
csis-wclk;
};
};
};
mipi_csi_0: csi@32e40000 {
compatible = "fsl,imx8mp-mipi-csi", "fsl,imx8mn-mipi-csi";
reg = <0x32e40000 0x10000>;
interrupts = <0 17 4>;
clock-frequency = <500000000>;
clocks = <&clk 271>,
<&clk 97>,
<&clk 269>;
clock-names = "mipi_clk",
"disp_axi",
"disp_apb";
assigned-clocks = <&clk 170>;
assigned-clock-parents = <&clk 65>;
assigned-clock-rates = <500000000>;
bus-width = <4>;
csi-gpr = <&mediamix_gasket0>;
gpr = <&media_blk_ctrl>;
power-domains = <&media_blk_ctrl 1>;
status = "disabled";
};こんにちは、私はLinuxベースのプラットフォームでHD-SDIからMIPICIS2ブリッジソリューションに苦労しています。
あなたのチップセットソリューションを私にお勧めできますか?