1.上电问题 因为CAMERA的结构问题,我们现在所使用的CAMERA模组一般需要三个电源口供电,AVDD,DVDD,DOVDD,其中AVDD固定为2.8V,而我们这边的硬件原理图上,DVDD和DOVDD经常容易反,和他们的原理图有区别。另外这三个上电是没有顺序的,在调试时,一定要用万用表查看这三个电压值。
2.CAMERA读不到ID
首先 需要确认三个电源,power down 和reset的极性,mclk,I2C是否正常打开。如果这些信息确认是正确的,还不能读到ID基本可以确认是sensor的硬件问题,因为camera的驱动层次非常分明,所以驱动添加很容易,但是总是读不到ID,我检查了所有的问题,上电,SCL,SDA电压,用示波器读取I2C值,PWD,reset都做了检测。没有问题,后来发现camera模组提供的原理图和他们的样品SCL,SDA是反的,导致始终读不到ID,这种问题真的是很奇葩,非常无奈,只能当作经验了。
3.能读到ID但是点不亮:这是最常见的情况,这个是时候已经能确认上述的硬件信号都是正常的,先要看HS/VS/PCLK的极性是否配置的正确,是否在预览前丢了1帧以上,sensor的输出尺寸是否正确。这些通常需要通过sensor的datasheet来查看寄存器配置的是否正确。
4.拍照死机:要确认是否在拍照的时候设置了set_mode(用来设置拍照时的sensor输出数据大小的设置),memory是否足够大?
DC_MEM = Frame_W*Frame_H*2 *MAX((1 + need_rotation),(1+is_jpg)) + 1M根据这个公式算出来,在dc_product_cfg.c中进行配置。
5.花屏:如果是很多绿线的花屏的话那么通常是HS/VS/PCLK的极性配置反了或者驱动电流太小被干扰了,如果是红蓝的颜色反了的那么是yuv输出数据反了,在yuv_info中进行配置。
6.分屏:这个是刷屏的时候刷的不是同一帧数据,是LCD的FMARK引脚没有引出来,或者没有配置。如果LCD没有这个脚的话,需要估算一下刷屏的时间,然后将sensor输出的帧率调的跟它匹配。
7.旋转:预览的在startpreview里的rotation设置成需要的角度,拍照的在_DCAMERA_DoSnapshot里面将rotation设置成需要的角度,VT在传给底层参数时将screen2sensor_angle设置为DVT_MW_ROTATE_90或其他角度。
8、需要在Androidmanifest.xml中设置
<uses-permission android:name="android.permission.CAMERA" />
<uses-feature android:name="android.hardware.camera" />
<uses-feature android:name="android.hardware.camera.autofocus" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
9、为了使得camera preview 中场景的角度和实际物理世界的角度一致,需要设置:
// 设置屏幕方向,否则预览的结果跟现实会有90度的偏差
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
10、为了使得预览的场景不随屏幕的旋转而拉伸或扭曲,需要设置:
mParameters.setPreviewSize(width, height);
否则,当屏幕旋转的时候,会改变预览内容的尺寸比例
11、出现fail to connect to camera service的原因可能有:
1)在Androidmanifest.xml中设置uses-permission
2)没有在surfaceDestroyed中释放资源
if (mCamera != null)
{
mCamera.stopPreview();
mCamera.release();
mCamera = null;
}
3)拍完照片之后,照片存储有问题,导致系统崩溃,这个时候需要重启真机。ps:当慢慢的点击拍照的时候,就不会出现崩溃,当快速的点击拍照的时候会导致崩溃,不知道什么原因。
12、camera.setParameters失败
当删除mParameters.setPictureSize(width,height);时,就不会出现这个问题,具体原因不详。
13、camera设置变焦:
Parameters params = mCamera.getParameters(); final int MAX = params.getMaxZoom();
if(MAX==0)return; int zoomValue = params.getZoom(); zoomValue += 5; params.setZoom(zoomValue); mCamera.setParameters(params);}
|