NXP i.MX6ULL ov5640 多画面显示闪烁

项目场景:

眺望电子TW-AC6G-EVM开发板上开发使用OV5640摄像头时发现,同时画面不断闪烁,分辨率越小闪烁越大,调试记录如下:

编译环境及开发包:
主机:ubuntu18.04
交叉编译器:arm-linux-gnueabihf-gcc
QT5.12.8:qt-everywhere-opensource-src-5.12.8
开发板:TW-AC6G-EVM
Linux:Linux-4.1.15
串口工具:Xshell

注意:本文章的所有命令涉及到的路径均为眺望电子官方环境路径,需根据自身实际环境改变。本文所演示的平台来自于眺望电子 iMX6ULL ARM嵌入式平台,这是一个基于NXP iMX6ULL ARM处理器,主频800MH在 Cortex-A7的核心板。


问题描述:

使用./mx6s_v4l2_capture.out -m 0 -d /dev/video0 命令,LCD显示图像如下,同时画面不断闪烁,分辨率越小闪烁越大,更改摄像头分辨率窗口随着变化。
./mx6s_v4l2_capture.out -m 0 -d /dev/video0


原因分析:

首先,需要查看摄像头工作是否正常,判断是摄像头显示还是屏幕显示问题;

1、抓取摄像头图片

使用命令

root@twdz-IMX6ULL:/usr/unit_tests/V412#gst-launch-1.0 imxv412src num-buffers-a device=/dev/video1 ! jpegenc ! filesink location=picture.jpg

保存一张图片,显示如下,显示分辨率正常
抓取摄像头图片

可以判定摄像头工作是正常的,还可以通过保存视频来进行验证(需要进行视频解码较复杂,未进行尝试)。

2、对lcd显示进行分析

查看lcd接口原理图:
lcd接口原理图

从接口可以看出,LCD数据是16位的,查看设备树配置

&lcdif{
		pinctrl-names ="default";
		pinctrl-0 = <&pinctrl_lcdif_dat
							&pinctrl lcdif_ctrl>;
		display = <&display0>;
		status = "okay";

		displayo: display {
						bits-per-pixel = <32>;
						bus-width = <24>;

						display-timings {
									native-mode = <&timing0>;
									timing0: timingo {
									clock-frequency = <30000000>;
									hactive = <800>;
									vactive = <480>;
									hfront-porch =<16>;
									hback-porch = <46>;
									hsync-len = <1>;
									vback-porch = <12>;
									vfront-porch = <7>;
									vsync-len =<1>;
									hsync-active = <0>;
									vsync-active = <0>;
									de-active = <1>;
									pixelclk-active = <1>
									};
							};
				};
	};

从上面配置可以看出,bus-width配置成了24位,与原理图不符。


解决方案:

将bus-width改为16、bits-per-pixel改为16,重新编译测试

&lcdif{
		pinctrl-names ="default";
		pinctrl-0 = <&pinctrl_lcdif_dat
							&pinctrl lcdif_ctrl>;
		display = <&display0>;
		status = "okay";

		displayo: display {
						bits-per-pixel = <16>;
						bus-width = <16>;

						display-timings {
									native-mode = <&timing0>;
									timing0: timingo {
									clock-frequency = <30000000>;
									hactive = <800>;
									vactive = <480>;
									hfront-porch =<16>;
									hback-porch = <46>;
									hsync-len = <1>;
									vback-porch = <12>;
									vfront-porch = <7>;
									vsync-len =<1>;
									hsync-active = <0>;
									vsync-active = <0>;
									de-active = <1>;
									pixelclk-active = <1>
									};
							};
				};
	};

更新设备树后,重新执行./mx6s_v4l2_capture.out -m 2 -d /dev/video0显示720*480分辨率,效果如下:
显示720*480分辨率

从图片可以看出,显示是正常的,LCD分辨率为800*480,右边留有一小部分黑块。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

眺望电子-ARM嵌入式

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

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

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

打赏作者

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

抵扣说明:

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

余额充值