camera之马达驱动调试与介绍

1.马达以及相关寄存器介绍

        以dw9763为例进行介绍;音圈马达是通过不同的电流值,产生不同推力来推动镜头; 10bit(普遍使用)数据位,对应0-1023 DAC code值;0-1023 code代表0mA电流->max mA电流,如果是中置马达,则电流会有负值(-100mA~100mA);电流与code的关系,如下

        output_current / Decimal(D[9:0]) = 100mA / 1023 ; 其中Decimal(D[9:0]) 就是给马达的位置 code值;

        例如某一款马达dw9764,10bit的输出,最大输出电流是100mA,但10bit值为1111111111,可以输出100mA的电流;那么想要输出25mA的电流,那么code值应该设置为多大?答案是255,即10bit值为1001010101。

        通过控制DAC code值来改变输出电流值的大小,也就是向寄存器0x03写入的是code值,而不是电流值;ISP通过清晰度来判断该给多少DAC值;

        先看下dw9764的datasheet,了解下寄存器

         SAC/PRESCALE 即模式选择时钟分频,一般默认是选择SAC4;寄存器地址0x06,其中高3bit是属于SAC[2:0],低3bit是PRESC[2:0];因此代码中的dev_vcm->step_mode 需要左移5bit; dev_vcm->t_div & 0x07 即保留低3bit;然后mode_val | = (dev_vcm->t_div & 0x07 )  

         vbusy的判断,在向MSB/LSB (也就是DAC code)寄存器写值的时候,vbusy bit必须为0;在SAC operation时,vbusy bit保持为1;vbusy由寄存器0x05控制的。

         马达位移控制的流程大致如下:

2.af驱动介绍

        驱动中的主要函数:

        dw9763_set_pos

        dw9763_update_vcm_cfg

        dw9763_init // 可以初始化选定下电流模式,即SAC

        dw9763_move_time函数的实现主要参考datasheet中的规定:

 

 

        启动电流 : VCM 刚好能够推动模组镜头从模组镜头可移动行程最近端(模组远焦)移动,此时VCM driver ic的输出电流值定义为启动电流.

        额定电流: VCM刚好推动模组镜头至模组镜头可移动行程的最远端(模组近焦),此时VCM driver ic的输出电流值定义为额定电流.

dw9763: dw9763@0c {    // vcm驱动配置,支持AF时需要有这个设置 
compatible = "dw9763"; 
status = "okay";
reg = <0x0c>; 
rockchip,vcm-start-current = <20>; // 马达的启动电流
rockchip,vcm-rated-current = <100>; // 马达的额定电流 
rockchip,vcm-step-mode = <4>; // 马达驱动ic的电流输出模式 
rockchip,camera-module-index = <0>; // 模组编号 
rockchip,camera-module-facing = "back"; // 模组朝向,有"back"和"front" };

ov13850: ov13850@10 { 
...... 
lens-focus = <&vm149c>; // vcm驱动设置,支持AF时需要有这个设置 
...... };

        马达的v4l2-ctl命令控制: v4l2-ctl -d /dev/v4l-subdevXXX --set-ctrl focus_absolute=YYY ​ XXX是马达设备编号 ​ YYY是马达code值,取值范围0~64 ​ 如果会移动,说明底层马达控制 OK

        RK AF算法将模组镜头整个可移动行程的位置参数定义为[0,64],模组镜头整个可移动行程在VCM驱动电流上对应的变化范围为[启动电流,额定电流],dw9763_set_pos 该函数中建议实现这2者间的映射换算关系;  

 dev_vcm->start_current = dev_vcm->vcm_cfg.start_ma * DW9763_MAX_REG / dev_vcm->max_ma;

3.马达的电源介绍

1.一般模组中sensor和马达共用avdd(vcc2v8_dvp),所以dts中需要将马达的电源引用配置上:avdd-supply=<&vcc2v8_dvp>;

2.默认camera使用的电源都需要有属性:regulator-boot-on,不能屏蔽;

3.regulator-always-on是表示电源常供,如果camera,马达dts有引用就要屏蔽上述第二点,想要默认常供就加上,同时camera节点中对电源的引用要去掉,不然会堆栈报错。

vcc2v8_dvp: LDO_REG9 {
			//	regulator-always-on;
				regulator-boot-on;
				regulator-min-microvolt = <2800000>;
				regulator-max-microvolt = <2800000>;
				regulator-name = "vcc2v8_dvp";
				regulator-state-mem {
					regulator-on-in-suspend;
					regulator-suspend-microvolt = <2800000>;
				};
			};

4.android上层相关设置

  1. camera3_profiles.xml 也需要配置马达,注意只有RAW SENSOR才支持马达控制 <control.afAvailableModes value="OFF,AUTO,MACRO,CONTINUOUS_VIDEO,CONTINUOUS_PICTURE,EDOF"/> <control.maxRegions value="1,0,1"/> <lens.info.minimumFocusDistance value="0.1"/> <!-- HAL may override this value from CMC for RAW sensors -->

  2. 如果录像中不需要马达对焦,可以尝试将 CONTINUOUS_VIDEO 关键字去掉

<request.availableRequestKeys 中需要包含:control.afRegions 字段 ​ <request.availableResultKeys 中需要包含: control.afRegions 字段 ​ <sensorType value="SENSOR_TYPE_RAW"/> // SENSOR_TYPE 需要是 RAW 的而不是 SOC;

     3. 效果文件如果支持马达对焦 效果文件中 contrast_af 中 enable 设置为:1

5.调试碰到的一些问题

5.1 录像无法对焦

        预览可以对焦,但是录视频不会对焦,试试如下修改:

5.2 摄像头退出有哒的声音

        摄像头预览退出的过程会触发一声轻轻的 “哒” 声,该响声是由马达模组发出来的;有可能是模组电源中的马达电源被sensor控制了,所以sensor预览退出时下电,导致马达的电源也被关闭了,所以才出现了 "哒" 的响声。 可以做个试验,在sensor驱动中的suspend函数,将power_off注释,结果显示摄像头预览退出,没有了 "哒"的响声,验证了我们的猜想。所以解决方法是让马达在sensor之前关闭,可以在sensor的suspend调用power_off之前调用马达的远焦复位操作;dw9714中有在上下电函数中做处理,逐步移动马达到远焦位置,可参考dw9714去实现!

5.3 摄像头无法聚焦且不清晰

        摄像头无法聚焦,不清晰,文字也看不清楚;首先查阅马达的规格书,看是否为中置马达,里面电流有负值的,dts中的启动电流截止电流要用dac值表示,取值范围是0~1023,对应-100mA ~ 100mA

5.4 af出现i2c通信异常

        断电上电重新开机,再打开摄像头,会出现af通信失败的问题;解决方法可以是先注册camera,后注册af

  • 5
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: 在调试 camera 驱动 OTP 之前,您需要了解 OTP 是什么以及它在相机模块中的作用。OTP 指 One-Time Programming,可以将一些固定的参数写入到相机模块中,例如模块的 ID、校准信息等。这些参数在生产过程中被写入到 OTP 中,然后被相机模块读取。 下面是一些调试 OTP 的步骤: 1. 首先,您需要确定 OTP 中存储的参数以及其在相机模块中的作用。这通常需要查看相机模块的数据手册或者与厂商联系。 2. 然后,您需要使用相应的工具将 OTP 中的参数读取出来。这通常需要一些专有的工具,例如生产线测试工具或者 OTP 编程器。 3. 一旦您成功地从 OTP 中读取了参数,您需要将其与相机模块中实际读取到的参数进行比较。如果它们不匹配,您需要确定是哪个环节出了问题,例如是否写入 OTP 时出错,或者读取 OTP 时出错。 4. 如果您确定了问题的来源,您需要采取相应的措施来解决它。例如,如果写入 OTP 时出错,您可以尝试重新写入这些参数;如果读取 OTP 时出错,您可以检查 OTP 的连接或者更换 OTP 编程器。 需要注意的是,OTP 的调试通常需要专门的硬件和软件支持,因此您需要仔细阅读相机模块的数据手册,或者与厂商联系以获取更多信息。 ### 回答2: 相机驱动OTP(One-Time Programmable)调试是指对相机模块中OTP存储器内容的调试工作。OTP存储器是一种只能被编程一次的存储器,用于存储相机模块的相关参数和设置。通过调试OTP存储器,可以优化相机模块的性能和功能。 首先,需要准备OTP调试工具和相关设备。OTP调试工具可以通过OTP编程设备进行操作,将特定参数写入OTP存储器中。同时,需要连接好相机模块和OTP编程设备,确保其正常通信。 接下来,进行OTP调试的具体步骤如下: 1. 确认OTP存储器的布局和编程方式。了解存储器的结构和编程规则,以便正确操作。 2. 读取OTP存储器的内容。使用OTP调试工具中的读取功能,读取存储器中已编程的参数值。记录下这些参数值,以便后续对比和调试。 3. 根据需要修改参数值。根据实际需求,对特定参数进行调整和优化。比如,可以调整分辨率、曝光时间、白平衡等参数,以达到更好的图像质量。 4. 将修改后的参数值写入OTP存储器。使用OTP调试工具中的编程功能,将修改后的参数值写入OTP存储器中。确保编程过程正确无误。 5. 重新读取OTP存储器的内容。再次使用OTP调试工具中的读取功能,读取编程后的参数值。与之前记录的参数值进行对比,确保参数值已成功写入存储器。 6. 进行功能验证和性能测试。通过调试后的OTP存储器,启动相机模块进行功能验证和性能测试。确保相机模块正常工作,并且参数值能够实现预期效果。 总结起来,相机驱动OTP调试是一项重要的工作,通过对OTP存储器内容的调整和优化,可以改善相机模块的性能和功能。准备好OTP调试工具和相关设备,按照一定步骤进行调试,最终验证相机模块的正常工作和参数值的实际效果。 ### 回答3: Camera驱动OTP调试是指对摄像头驱动程序中的一种特殊功能进行调试。 OTP全称为One-Time Programmable,即一次性可编程。在摄像头模块中,OTP用于存储一些初始参数或配置信息,例如光学模块的校准数据、镜头的校正参数等。这些数据一般是在生产过程中由供应商提前写入到OTP存储器中的,用户无法修改。 在Camera驱动OTP调试过程中,主要包括以下步骤: 1. 读取OTP数据:首先需要从OTP存储器中读取出相关的配置数据。这可以通过驱动程序中的OTP读取接口来实现。 2. 解析OTP数据:将读取到的OTP数据进行解析,提取出其中的参数信息。这些参数可能包括图像传感器的配置信息、模组的校准数据等。 3. 应用OTP数据:将解析出的OTP参数应用到相应的设置中,例如更新驱动程序中的配置寄存器或传递给后续的图像处理算法。 4. 验证调试结果:通过测试不同的场景或使用不同的测试样本,来验证应用了OTP配置后相机模块的性能是否得到了优化或改善。 5. 修改OTP数据:如果验证结果不满意,可以尝试修改OTP数据中的某些参数,然后重新进行调试和验证。 需要注意的是,Camera驱动OTP调试需要具备一定的硬件和软件技术支持,包括理解相关的摄像头芯片和供应商提供的OTP文档、熟悉驱动程序的实现和调试方式、以及具备相关的图像处理和校准知识。 总之,Camera驱动OTP调试是对摄像头驱动程序中的OTP数据进行读取、解析、应用和验证的过程,旨在优化相机模块的性能和图像质量。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值