6.4.6. 常见问题
6.4.6.1. 摄像头初始化失败
6.4.6.1.1. 现象
板子启动后,摄像头的V4L2 device注册失败,此时DVP的注册流程也因此不完整,在Sysfs中会找不到 /dev/video0 不存在。
6.4.6.1.2. 原因分析
一般情况下,摄像头需要通过 I2C 来访问,所以要确保 TWI和摄像头两个模块是否打开。
摄像头的打开方法: 配置 OV5640 摄像头
TWI的打开方法,请参考TWI模块的使用说明
同时,要确认以下配置是否正确:
硬件上,摄像头是连接到哪个TWI通道,对应的DTS配置是否正确,配置参见 配置 OV5640 摄像头
摄像头的I2C 设备地址是否正确,参见 配置 OV5640 摄像头 中的参数
camera@3C
摄像头的供电是否正常。
#ifdef AIC_ONLY
<<<< 以下内容仅供内部使用
注意
在FPGA环境中,摄像头的电源GPIO在上电时已正常工作,不能去复位,否则会导致摄像头的寄存器读写失败。
屏蔽OV5640的GPIO复位的patch:
ov5640: Must not set the power GPIO in FPGA.
Signed-off-by: matteo <duanmt@zx.com>
Change-Id: I55b163f8c59f257532e0c047931765bda6a89c85
diff --git a/drivers/media/i2c/ov5640.c b/drivers/media/i2c/ov5640.c
index 8f0812e85..c240ead99 100644
--- a/drivers/media/i2c/ov5640.c
+++ b/drivers/media/i2c/ov5640.c
@@ -1857,7 +1857,7 @@ static void ov5640_power(struct ov5640_dev *sensor, bool enable)
{
gpiod_set_value_cansleep(sensor->pwdn_gpio, enable ? 0 : 1);
}
-
+#ifndef CONFIG_DEBUG_ON_FPGA_BOARD_ZX
static void ov5640_reset(struct ov5640_dev *sensor)
{
if (!sensor->reset_gpio)
@@ -1877,6 +1877,7 @@ static void ov5640_reset(struct ov5640_dev *sensor)
gpiod_set_value_cansleep(sensor->reset_gpio, 0);
usleep_range(20000, 25000);
}
+#endif
static int ov5640_set_power_on(struct ov5640_dev *sensor)
{
@@ -1898,8 +1899,10 @@ static int ov5640_set_power_on(struct ov5640_dev *sensor)
goto xclk_off;
}
+#ifndef CONFIG_DEBUG_ON_FPGA_BOARD_ZX
ov5640_reset(sensor);
ov5640_power(sensor, true);
+#endif
ret = ov5640_init_slave_id(sensor);
if (ret)
>>>> 以上内容仅供内部使用
#endif
6.4.6.2. 画面的流畅度问题
6.4.6.2.1. 现象
界面显示的摄像头画面有明显卡顿情况。
6.4.6.2.2. 解决方法
如果DVP驱动中的调试信息打开了,每一帧数据处理都有输出log,会影响帧率,需要关掉。修改方法见 调试开关
尝试增加dvp_test中的buffer数量,保证buf队列中有充裕的空闲buf。buffer数量定义见:
#define VID_BUF_NUM 3