KV260アプリケーションの開発方法(4)

74611 ワード

1.はじめに

前回はSmartCamアプリケーションをインストールして動作確認しようとしましたが、カメラドライバーが正しく認識せず動かすことができませんでした。今回はその原因について調べて行きたいと思います。

2.原因調査

まずは、KV260でSmartCamのファームウエアをロードした時のdmesgログを見てみます。

% sudo xmutil unloadapp
% sudo xmutil loadapp user-firmware
% dmesg

ログを見ると、mipi_csi2_rxでプローブエラーが発生していることが確認できます。

3.デバイスツリーの修正(1行追加)

XSAファイルから生成したpl.dtsiのMIPIノードにxlnx,csi-pxl-formatプロパティを追加してもう一度試してみます。値は<0x18> : MIPI_CSI_DT_YUV_420_8Bを指定します。

capture_pipeline_mipi_csi2_rx_subsyst_0: mipi_csi2_rx_subsystem@80000000 {
	clock-names = "lite_aclk", "dphy_clk_200M", "video_aclk";
	clocks = <&misc_clk_0>, <&misc_clk_3>, <&misc_clk_2>;
	compatible = "xlnx,mipi-csi2-rx-subsystem-5.1", "xlnx,mipi-csi2-rx-subsystem-5.0";
	interrupt-names = "csirxss_csi_irq";
	interrupt-parent = <&gic>;
	interrupts = <0 104 4>;
	reg = <0x0 0x80000000 0x0 0x2000>;
	xlnx,csi-pxl-format = <0x18>;
	xlnx,axis-tdata-width = <32>;
	xlnx,max-lanes = <4>;
	xlnx,ppc = <2>;
	xlnx,vfb ;
	・・・・・
};

リビルドしたpetalinuxで、user-firmwareをロードしてdmesgログを再確認してみると、no sink port foundのエラーに代わっています。

3.デバイスツリーの再修正(ガッツり修正)

pl.dtsiのmipi_csi2の部分を見てみると、videoのfield変更やらremote-endpointの追加を設定しろとコメントに書いてあります。。。そのままでは使えないんですね。

capture_pipeline_mipi_csi2_rx_subsyst_0: mipi_csi2_rx_subsystem@80000000 {
	・・・
	mipi_csi_portscapture_pipeline_mipi_csi2_rx_subsyst_0: ports {
		#address-cells = <1>;
		#size-cells = <0>;
		mipi_csi_port0capture_pipeline_mipi_csi2_rx_subsyst_0: port@1 {
			/* Fill cfa-pattern=rggb for raw data types, other fields video-format and video-width user needs to fill */
			・・・
		};
		mipi_csi_port1capture_pipeline_mipi_csi2_rx_subsyst_0: port@0 {
			/* Fill cfa-pattern=rggb for raw data types, other fields video-format,video-width user needs to fill */
			/* User need to add something like remote-endpoint=<&out> under the node csiss_in:endpoint */
			・・・
		};
	};
};

そういう訳で、以下のSmartCamのDeviceTreeファイルを参考にしてpl.dtsiを修正します。