AHD模拟摄像头介绍

AHD模拟摄像头

常见的摄像头接口一般有MIPI、USB、DVP等等,但是MIPI摄像头受限于高速信号的传输距离问题,导致走线不能太长,这样在安防监控领域、车载等领域,使用就很受限,因此会引入一些技术延长摄像头的数据传输距离,例如之前文章所提到的serdes,或者采用模拟摄像头的方式。
模拟摄像头一般是通过模拟信号的方式来实现,模拟信号的传输距离远,一般可以达到100米左右,但是模拟信号的传输速度较慢,一般只能达到100kbps左右,因此在安防监控领域、车载等领域,使用就很受限。

AHD摄像头简介

AHD 是 Analog High Definition 的缩写,意为模拟高清。AHD 摄像头是一种采用模拟信号传输的高清摄像头,传输信号为高清模拟信号。其画面垂直解析度通常为 1080i、720p 或 1080p,最高清晰度可等同于网络高清 1080P 的全高清级别。

技术特点

高清画质:采用先进的亮色分离、信号滤波、3D降噪技术,能够有效减少高频区的色噪声,使图像清晰度更高,还原性更好,细节表现更加丰富。
传输距离远:利用同轴电缆传输,普通75-5线可达500米,在长距离传输过程中,图像质量仍然能够保持相对清晰。
零延时:前端数据未经过编码压缩直接传输到后端,实现全实时、高保真传输,保证了画面的及时性和流畅性,不存在延迟带来的误判风险。
兼容性好:可以兼容普通D1/960H以及模拟外围设备,如分配器、矩阵等,便于接入现有系统,适用于旧系统的升级改造。
易操作:支持OSD菜单设计,用户可以根据自己的需求轻松对摄像头的各项参数进行调整,如亮度、对比度、色彩饱和度等。
成本效益高:其价格与普通模拟摄像头相近,但却能提供高清品质的图像,具有较高的性价比,在民用及工业级市场中都拥有非常大的发展空间。
高集成:AHD前端芯片集成度高,使得摄像头的体积可以更小,同时也降低了生产成本。
开放标准:遵循第三方开放标准,兼容其他厂家的AHD产品,有利于市场的推广和应用,加速了整个行业的发展。

工作原理

AHD摄像头通过将模拟信号转换为数字信号,然后再将数字信号转换回模拟信号来实现高清图像的传输。它使用了一种特殊的编码技术,能够在已有的模拟传输线上实现高清视频信号的可靠传输。

应用领域

安防监控:在家庭、商业场所、公共设施、工业生产等领域广泛应用,可用于监控室内和室外环境,帮助人们更清晰地观察监控画面,及时发现异常情况,提高安全性和监控效果。
车载领域:AHD倒车影像摄像头是现代汽车安全辅助系统的重要组成部分,能够让驾驶员在倒车时通过车内显示屏清晰地看到车后的情况,避免因看不到车后情况而发生车祸,提高驾驶的安全性。
其他领域:在一些对图像质量有一定要求,但又不需要太高成本的网络高清设备的场景中,AHD摄像头也能发挥其优势,如小型店铺的监控、停车场的管理等。

AHD 摄像头转接芯片

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

  • AHD转MIPI:将AHD摄像头的模拟信号转换为MIPI信号,然后再通过MIPI转接口将MIPI信号传输到主控。
  • AHD转BT1120:将AHD摄像头的模拟信号转换为BT1120并口,然后再通过BT1120转接口将BT1120信号传输到主控。

常见的AHD转MIPI芯片有:
NVP系列:NVP6188/NVP6324/NVP6158C等
TP系列:TP2815/TP9950/TP9930/TP2825等
RN系列:RN6854/RN6752等

AHD转MIPI调试

以NVP6188为例

硬件确认

确保 NVP6188 供电电压(如 3.3V、1.8V)稳定,通过万用表测量电源引脚电压
检查外部时钟源(如 24MHz 晶振)是否正常起振,可通过示波器测量时钟信号幅度和频率
NVP6188 通过 I²C 接口与 RK3588 通信(需确认 I²C 总线引脚,如 SCL/SDA),需确保上拉电阻(通常 4.7kΩ)正确焊接,避免通信失败
模拟视频输入(如 CVBS 信号)通过电容耦合至 NVP6188 的 AIN 引脚,注意阻抗匹配(75Ω)
如复位引脚(RESET)需正确连接至 RK3588 的 GPIO,确保上电时完成复位操作

内核配置

内核启用如下配置项:
V4L2 子系统(CONFIG_VIDEO_V4L2=y)
I²C 核心及设备驱动(CONFIG_I2C=y、CONFIG_I2C_GPIO=y)
NVP6188 驱动模块(CONFIG_VIDEO_NVP6188=y)

DTS配置

&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节点直接取数据流的话,那么可以不用。

编译烧录

./build.sh lunch #选择板级配置文件
./build.sh kernel #编译内核
编译完成后烧录内核镜像boot.img即可。

调试

1、查看内核日志
dmesg | grep nvp6188

2、检查I2C设备是否识别
i2cdetect -y 7 #假设NVP6188连接在I2C7上

3、查看摄像头设备设备节点
ls /dev/video* # 应出现NVP6188对应的视频设备(如/video0)
v4l2-ctl --list-devices # 检查设备名称是否为“nvp6188”

4、查看摄像头信息
v4l2-ctl -d /dev/video0 --list-formats-ext

5、配置摄像头参数
v4l2-ctl -d /dev/video0 --set-fmt-video=width=1920,height=1080,pixelformat=NV12

6、启动摄像头预览
./rockchip-test/camera/camera_rkaiq_test.sh #如果无法启动请检查脚本内对应设备节点是否正确

### RK3588 AHD摄像头驱动及识别方法 在RK3588平台上实现AHD摄像头的识别和使用,需要从硬件配置、设备树设置以及软件驱动等方面进行全面考虑。以下是对相关问题的详细解答: #### 1. 硬件支持与接口选择 AHD摄像头通常通过模拟信号传输视频数据,因此需要一个能够将模拟信号转换为数字信号的桥接芯片(例如TV Encoder/Decoder)。RK3588平台本身并不直接支持AHD摄像头,但可以通过外接桥接芯片(如Hi3516或类似功能的解码器)来实现对AHD摄像头的支持。这种桥接芯片会将AHD摄像头模拟信号转换为数字信号,并通过MIPI CSI或其他接口传递给RK3588处理器[^3]。 #### 2. 设备树配置 为了使RK3588能够正确识别AHD摄像头,需要在设备树中添加相应的节点配置。根据引用内容中的描述,对于USB Camera类型的设备,可以在设备树中添加`rockchip,android-usb-camerahal-enable`语句以确保设备被正确识别[^2]。然而,AHD摄像头并非标准USB Camera,因此需要额外配置模拟信号转数字信号的桥接芯片相关的设备树节点。 以下是可能的设备树配置示例: ```dts &csi0 { status = "okay"; rockchip,android-usb-camerahal-enable; }; &rkcif { status = "okay"; compatible = "rockchip,rk3588-rkcif"; }; ``` #### 3. V4L2驱动开发 V4L2(Video for Linux 2)是Linux内核中用于处理视频设备的标准框架。为了使AHD摄像头能够在RK3588平台上正常工作,需要开发或移植适用于桥接芯片的V4L2驱动程序[^1]。具体步骤包括: - **注册V4L2设备**:通过V4L2 API注册摄像头设备。 - **配置数据流路径**:定义从传感器到CSI接口再到ISP的数据流路径。 - **实现控制接口**:提供对摄像头参数(如分辨率、帧率等)的控制接口。 以下是一个简单的V4L2驱动注册代码示例: ```c static int v4l2_camera_probe(struct platform_device *pdev) { struct video_device *vdev; struct rk_camera_dev *cam; cam = devm_kzalloc(&pdev->dev, sizeof(*cam), GFP_KERNEL); if (!cam) return -ENOMEM; vdev = video_device_alloc(); if (!vdev) return -ENOMEM; strscpy(vdev->name, "rk_ahd_camera", sizeof(vdev->name)); vdev->release = video_device_release_empty; vdev->fops = &rk_camera_fops; vdev->ioctl_ops = &rk_camera_ioctl_ops; vdev->vfl_dir = VFL_DIR_RX; vdev->lock = &cam->mutex; video_set_drvdata(vdev, cam); platform_set_drvdata(pdev, cam); return video_register_device(vdev, VFL_TYPE_GRABBER, -1); } ``` #### 4. 测试与调试 完成驱动开发后,可以使用`v4l2-ctl`工具测试摄像头的功能。例如: ```bash v4l2-ctl --list-devices v4l2-ctl --all ``` 如果摄像头未能被正确识别,可以检查设备树配置是否正确,或者查看内核日志以定位问题: ```bash dmesg | grep v4l2 ``` #### 5. 网络接口配置 在某些情况下,AHD摄像头可能通过网络传输视频数据。根据引用内容,RK3588开发板上的以太网接口已被正确识别为`eth0`,因此可以通过网络协议(如RTSP)接收AHD摄像头的视频流[^4]。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

qlexcel

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

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

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

打赏作者

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

抵扣说明:

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

余额充值