6.3.5. 常见问题

6.3.5.1. 摄像头初始化失败

6.3.5.1.1. 现象

板子启动后,摄像头注册失败,此时DVP的注册流程也无法完成。

6.3.5.1.2. 原因分析

一般情况下,摄像头需要通过 I2C 来访问,所以要确保 I2C和摄像头两个模块是否打开。

  • 摄像头的打开方法: 打开 Camera

  • I2C的打开方法,请参考I2C模块的使用说明

同时,要确认以下配置是否正确:

  1. 硬件上,摄像头是连接到哪个I2C通道,对应的menuconfig配置是否正确,配置参见 打开 Camera

  2. 摄像头的供电、复位IO是否配置正常,也参见 打开 Camera

6.3.5.2. 画面不够流畅

6.3.5.2.1. 现象

界面显示的摄像头画面有明显卡顿情况。

6.3.5.2.2. 原因分析

很可能是OS的调度不够及时导致,导致DVP的帧采集不连续。

6.3.5.2.3. 解决方法

  1. 如果DVP驱动中的调试信息打开了,每一帧数据处理都有输出log,会影响帧率,需要关掉。提升log级别即可。

  2. 尝试增加dvp_test中的buffer数量,保证buf队列中有充裕的空闲buf。

6.3.5.3. 画面被矩形切割

6.3.5.3.1. 现象

从摄像头采集并回显到屏幕,画面出现被矩形切割成多份,如下图

../../../_images/fr_too_bigger.png

6.3.5.3.2. 原因分析

摄像头内部会根据CLK_OUT产生一个pixclk,

  1. pixclk的驱动能力有上限值,由驱动芯片决定

  2. pixclk的频率值由分辨率、帧率决定,分辨率、帧率越高需要的pixclk也越高

  3. 相应的, pixclk的频率值越高,要求驱动能力也要越高

比如M3开发板上驱动芯片只能支持pixclk到最高50MHz,如果预期的pixclk超出50MHz就会导致同步信号发生异常,于是画面出现不对齐的情况。

6.3.5.3.3. 解决方法

调低摄像头驱动中的帧率、分辨率配置。以OV5640为例,可调整以下配置参数(详见drv_ov5640.c):

/* Format configuration of OV5640 */
#define OV5640_MODE             OV5640_MODE_PAL_720_576
#define OV5640_FPS              OV5640_24_FPS