RK3588camera: AHD摄像头转MIPI转接芯片调试

我们常见的摄像头接口一般有MIPI、USB、DVP等等,但是MIPI摄像头受限于高速信号的传输距离问题,导致走线不能太长,这样在安防监控领域、车载等领域,使用就很受限,因此会引入一些技术延长摄像头的数据传输距离,例如之前文章所提到的serdes,本文主要介绍一下AHD摄像头对接RK3588的调试。

目录

(1)AHD摄像头

(2)转接芯片

(3)AHD转MIPI调试

①nvp6188_g_mbus_config接口

②bus fmt配置

③DTS配置

(4)AHD转BT1120

①驱动nvp6158_g_mbus_config配置

②nvp6158_querystd接口配置

③DTS配置

④pinctrl的配置

(5)APK预览

(6)抓图指令调试


(1)AHD摄像头

网上有很多关于AHD摄像头的介绍,这里不再赘述,这里提一下,AHD摄像头跟我前文介绍的serdes有一点类似,有一个目的是提高了传输的距离。常用于车载、安防等领域。

AHD是模拟摄像头,因此需要AD转换芯片来转换,输出数字信号给到主控进行接收。

(2)转接芯片

上述AHD摄像头需要转接芯片转成数字信号输出,一般是AHD转MIPI或者AHD转BT656/BT1120并口输出。前级摄像头有的厂家也会兼容TVI、CVBS等信号。

CVBS可以参考前一篇文章的介绍。

这篇文章主要给大家分享一下,AHD摄像头转MIPI或者BT1120转接芯片的调试。

常见的转接芯片有:NVP系列的NVP6188/NVP6324/NVP6158C

TP系列的:TP2815/TP9950/TP9930/TP2825等

RN系列的:RN6854/RN6752等等

这里我们以介绍调试N6为例。

(3)AHD转MIPI调试

同样的转接芯片的驱动也是基于V4l2框架的,因为主要介绍一下相关接口的配置即可。

①nvp6188_g_mbus_config接口

该接口配置主要配置了MIPI接口,4lane模式,以及4路虚拟通道的类型。如果需要接多路摄像头的话,需要配置这个。

static int nvp6188_g_mbus_config(struct v4l2_subdev *sd, unsigned int pad_id,
				 struct v4l2_mbus_config *cfg)
{
	cfg->type = V4L2_MBUS_CSI2_DPHY;
	cfg->flags = V4L2_MBUS_CSI2_4_LANE |
		     V4L2_MBUS_CSI2_CHANNELS;

	return 0;
}

②bus fmt配置

图像格式一般都是YUV422的类型。配置如下:

.bus_fmt = MEDIA_BUS_FMT_UYVY8_2X8,

其他的配置其他文章也都有描述,这里不再赘述。

③DTS配置

dts配置基本与camera配置相差无几,这里直接贴一下:

&csi2_dphy0_hw {
	status = "okay";
};

&csi2_dphy0 {
	status = "okay";

	ports {
		#address-cells = <1>;
		#size-cells = <0>;
		port@0 {
			reg = <0>;
			#address-cells = <1>;
			#size-cells = <0>;

			mipi_dphy0_in_nvp6188: endpoint@1 {
				reg = <1>;
				remote-endpoint = <&nvp6188_out>;
				data-lanes = <1 2 3 4>;
			};
		};
		port@1 {
			reg = <1>;
			#address-cells = <1>;
			#size-cells = <0>;

			csidphy0_out: endpoint@0 {
				reg = <0>;
				remote-endpoint = <&mipi2_csi2_input>;
			};
		};
	};
};

&i2c7 {
	status = "okay";


	nvp6188: nvp6188@31 {
		compatible = "nvp6188";
		status = "okay";
		reg = <0x31>;
		clocks = <&cru CLK_MIPI_CAMARAOUT_M2>;
		clock-names = "xvclk";
		power-domains = <&power RK3588_PD_VI>;
		pinctrl-names = "default";
		pinctrl-0 = <&mipim1_camera1_clk>;
		rockchip,grf = <&sys_grf>;
		/*power-gpios = <&gpio3 RK_PC6 GPIO_ACTIVE_HIGH>;*/
		reset-gpios = <&gpio3 RK_PB3 GPIO_ACTIVE_HIGH>;
		rockchip,camera-module-index = <0>;
		rockchip,camera-module-facing = "back";
		rockchip,camera-module-name = "nvp6188";
		rockchip,camera-module-lens-name = "nvp6188";

		port {
			nvp6188_out: endpoint {
				remote-endpoint = <&mipi_dphy0_in_nvp6188>;
				data-lanes = <1 2 3 4>;
			};
		};
	};
};

&mipi2_csi2 {
	status = "okay";

	ports {
		#address-cells = <1>;
		#size-cells = <0>;

		port@0 {
			reg = <0>;
			#address-cells = <1>;
			#size-cells = <0>;

			mipi2_csi2_input: endpoint@1 {
				reg = <1>;
				remote-endpoint = <&csidphy0_out>;
			};
		};

		port@1 {
			reg = <1>;
			#address-cells = <1>;
			#size-cells = <0>;

			mipi2_csi2_output: endpoint@0 {
				reg = <0>;
				remote-endpoint = <&cif_mipi2_in>;
			};
		};
	};
};

&rkcif_mipi_lvds2 {
	status = "okay";
	/* parameters for do cif reset detecting:
	 * index0: monitor mode,
		   0 for idle,
		   1 for continue,
		   2 for trigger,
		   3 for hotplug (for nextchip)
	 * index1: the frame id to start timer,
		   min is 2
	 * index2: frame num of monitoring cycle
	 * index3: err time for keep monitoring
		   after finding out err (ms)
	 * index4: csi2 err reference val for resetting
	 */
	rockchip,cif-monitor = <3 2 1 1000 5>;

	port {
		cif_mipi2_in: endpoint {
			remote-endpoint = <&mipi2_csi2_output>;
		};
	};
};

&rkcif {
	status = "okay";
	rockchip,android-usb-camerahal-enable;
	// memory-region = <&cif_reserved>;
};

&rkcif_mmu {
	status = "okay";
};

需要注意的只有rockchip,android-usb-camerahal-enable;这个配置,该配置是在多路摄像头的时候使用,可以让应用注册4路摄像头,从而apk可以同时预览4路。如果是自行开发应用,使用v4l2从video节点直接取数据流的话,那么可以不用。

(4)AHD转BT1120

AHD 转BT1120的调试,这里介绍一下NVP6158C的调试

①驱动nvp6158_g_mbus_config配置

这个配置与MIPI的配置略有不同,需要注意区分,其中极性一定需要配置。

static int nvp6158_g_mbus_config(struct v4l2_subdev *sd, unsigned int pad,
				 struct v4l2_mbus_config *cfg)
{
	struct nvp6158 *nvp6158 = to_nvp6158(sd);

	cfg->type = V4L2_MBUS_BT656;
	if (nvp6158->dual_edge == 1) {
		cfg->flags = RKMODULE_CAMERA_BT656_CHANNELS |
			V4L2_MBUS_PCLK_SAMPLE_RISING |
			V4L2_MBUS_PCLK_SAMPLE_FALLING;
	} else {
		cfg->flags = RKMODULE_CAMERA_BT656_CHANNELS |
			V4L2_MBUS_PCLK_SAMPLE_RISING;
	}
	return 0;
}

②nvp6158_querystd接口配置

该接口一定需要配置,其中BT1120需要声明为V4L2_STD_ATSC

static int nvp6158_querystd(struct v4l2_subdev *sd, v4l2_std_id *std)
{
	struct nvp6158 *nvp6158 = to_nvp6158(sd);

	if ((nvp6158->mode > BT656I_TEST_MODES) &&
		(nvp6158->mode < NVP6158_DVP_MODES_END)) {
		/* for vicap detect bt1120 */
		*std = V4L2_STD_ATSC;
	} else {
		*std = V4L2_STD_PAL;
	}
	return 0;
}

③DTS配置

dts配置参考如下:

&i2c2 {
	status = "okay";
	pinctrl-names = "default";
	pinctrl-0 = <&i2c2m4_xfer>;

	nvp6158: nvp6158@30 {
		compatible = "nvp6158-v4l2";
		status = "okay";
		reg = <0x30>;
		clocks = <&cru CLK_CIFOUT_OUT>;
		clock-names = "xvclk";
		power-domains = <&power RK3588_PD_VI>;
		pinctrl-names = "default";
		pinctrl-0 = <&cif_clk &cif_dvp_clk &cif_dvp_bus8 &cif_dvp_bus16>;
		// pwr-gpios = <&gpio1 RK_PA6 GPIO_ACTIVE_HIGH>;
		pwr2-gpios = <&gpio1 RK_PA5 GPIO_ACTIVE_HIGH>;
		rst-gpios = <&gpio1 RK_PA3 GPIO_ACTIVE_HIGH>;
		// rst2-gpios = <&gpio3 RK_PC1 GPIO_ACTIVE_HIGH>;
		// pwdn-gpios = <&gpio1 RK_PA4 GPIO_ACTIVE_HIGH>;
		// pwdn2-gpios = <&gpio4 RK_PA6 GPIO_ACTIVE_HIGH>;
		rockchip,camera-module-index = <0>;
		rockchip,camera-module-facing = "back";
		rockchip,camera-module-name = "default";
		rockchip,camera-module-lens-name = "default";
		rockchip,dvp_mode = "BT1120"; //BT656 or BT1120 or BT656_TEST
		rockchip,channel_nums = <4>; //channel nums, 1/2/4
		rockchip,dual_edge = <1>; // pclk dual edge, 0/1
		rockchip,default_rect= <1920 1080>; // default resolution
		port {
			nvp6158_out: endpoint {
				remote-endpoint = <&dvp_in_bcam1>;
			};
		};
	};
};

&rkcif {
	status = "okay";
};

&rkcif_dvp {
	status = "okay";
	ports {
		#address-cells = <1>;
		#size-cells = <0>;

		port@0 {
			#address-cells = <1>;
			#size-cells = <0>;
			/* Parallel bus endpoint */
			dvp_in_bcam1: endpoint@1 {
				reg = <1>;
				remote-endpoint = <&nvp6158_out>;
				bus-width = <16>;
			};
		};
	};
};

&rkcif_mmu {
	status = "okay";
};

④pinctrl的配置

这里需要特别注意的是,pinctrl的引用一定需要正确。这里引用的是并口的16条总线以及相关的clk。

pinctrl-0 = <&cif_clk &cif_dvp_clk &cif_dvp_bus8 &cif_dvp_bus16>;

(5)APK预览

如果是走官方的USBCAMERAHAL的话,可以打开上述DTS的配置:rockchip,android-usb-camerahal-enable就会注册4路,之后就可以使用多摄的APK进行预览。

(6)抓图指令调试

开数据流

v4l2-ctl --verbose -d /dev/video0 --set-fmt-video=width=1920,height=1080,pixelformat='NV12' --stream-mmap=4

抓图:

v4l2-ctl -d /dev/video0 --set-fmt-video=width=1920,height=1080,pixelformat='NV12' --stream-mmap=3 --stream-skip=4 --stream-to=/data/1920x1080p60_nv12.yuv --stream-count=5 --stream-poll

  • 6
    点赞
  • 50
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 7
    评论
优势和特点 • 支持全球NTSC/PAL/SECAM色彩解调 • 一个10位模数换器(ADC),每通道4倍过采样适用于CVBS、Y/C和YPrPb模式 • 模拟视频输入通道,片内集成抗混叠滤波器 ADV7280: 最多4路输入通道 ADV7280-M: 最多8路输入通道 • 视频输入支持CVBS(复合)、Y/C(S视频)和YPrPb(分量) • NTSC/PAL/SECAM自动检测 • 高达1.47 V的共模输入范围解决方案 • 出色的共模噪声抑制能力 • 5线式自适应2D梳状滤波器和CTI/DNR视频增强特性 • 自适应数字线路长度跟踪(ADLLT)、信号处理和增强FIFO管理可提供Mini时基校正(TBC)功能 产品详情 ADV7280/ADV7280-M是功能丰富的单芯片、多格式视频解码器。ADV7280/ADV7280-M可自动检测标准模拟基带视频信号,兼容复合、S视频和分量视频形式的NTSC、PAL和SECAM全球标准信号。 ADV7280可将模拟视频信号换为4:2:2分量视频数据流,其与8位ITU-R BT.656接口标准兼容。ADV7280-M可将模拟视频信号换为兼容移动工业处理器接口(MIPI®) CSI-2(8位YUV)的输出视频流。 ADV7280/ADV7280-M的模拟视频输入端支持单端信号。ADV7280提供4个模拟输入,而ADV7280-M提供8个模拟输入。ADV7280和ADV7280-M支持I2P换。 ADV7280/ADV7280-M通过双线式串行双向端口(I2C兼容型)进行编程,并且采用1.8 V CMOS工艺制造。该解码器提供LFCSP封装选项,非常适合空间受限的便携式应用。 应用 • 智能电话/多媒体手机 • • 汽车信息娱乐 • 支持视频安全监控的DVR • 媒体播放器 QQ:794843349
### 回答1: PR2000K AHDMIPI调试原理图主要包括以下几个步骤: 1. 读取原始AHD信号: 首先,PR2000K会通过AHD信号输入接口,将原始的AHD信号读取进来。这些信号通常来自于安防监控摄像头。 2. AHD信号解析: PR2000K会对读取的AHD信号进行解析,提取出其中的图像数据、控制信号和同步信号等。 3. MIPI信号生成: 接着,PR2000K根据解析出的图像数据、控制信号和同步信号等信息,通过MIPI信号输出接口,生成相应的MIPI信号。MIPI信号是一种数字信号,用于传输图像数据。 4. 调试和优化: 在生成MIPI信号之后,需要对其进行调试和优化。这包括调整图像的分辨率、帧率和数据格式等参数,以确保传输的图像质量和稳定性。 5. 输出MIPI信号: 最后,PR2000K通过MIPI信号输出接口,将调试和优化后的MIPI信号输出。这些MIPI信号可以连接到支持MIPI接口的显示设备或图像处理器等,用于显示和处理图像。 总的来说,PR2000K AHDMIPI调试原理图实际上是将原始的AHD信号通过解析和调试优化等处理,换为符合MIPI接口标准的数字信号。这样可以实现将AHD信号传输到支持MIPI接口的设备上,进一步处理和显示图像。这个过程中,需要依靠PR2000K的硬件电路和软件算法等技术,确保信号换的准确性和稳定性。 ### 回答2: PR2000K是一种将AHD信号换为MIPI信号的调试工具。MIPI是一种高速串行接口协议,常用于移动设备和摄像头之间的数据传输。而AHD是一种模拟高清视频传输技术,常用于安防摄像头等领域。 在调试过程中,首先需要准备PR2000K和相应的连接线材。将AHD摄像头的输出信号通过连接线接入PR2000K的AHD输入端口,并将PR2000K的MIPI输出端口与目标设备的MIPI输入端口相连。 调试过程中,PR2000K会将AHD信号换成MIPI信号,并输出给目标设备。目标设备接收到MIPI信号后,根据MIPI协议解析数据,并进行后续的处理和显示。 为了正常工作,PR2000K需要正确的供电电压和工作环境。同时,还需要根据不同的AHD信号格式和目标设备的MIPI接口参数,进行相应的设置。这些设置包括像素格式、帧率、分辨率等。通过液晶屏或其他方式,可以观察和验证MIPI输出信号的正确性和稳定性。 在调试过程中,可能会出现一些问题,例如信号不稳定、图像失真或者无法传输等。这时需要检查连接线、供电电压以及设置参数等,找出问题所在并进行相应调整。 总之,PR2000K是一种方便快捷的AHDMIPI调试工具,通过将AHD信号换成MIPI信号,使得AHD摄像头的图像可以在支持MIPI接口的设备上进行显示和处理。
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

人生苦短,菜的抠脚

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值