Camera | 12.瑞芯微摄像头自动焦距马达驱动移植

2023-10-30 04:10

本文主要是介绍Camera | 12.瑞芯微摄像头自动焦距马达驱动移植,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

本为你主要讲解如何让摄像头ov13850支持自动对焦功能。

摄像头的对角主要通过VCM马达驱动芯片DW9714来实现的。

一、环境

soc  : rk3568   
board: EVB1-DDR4-V10
软  件:Android 11
Linux:4.19.232
Camera:ov13850

二、DW9714

1.DW9714简介

DW9714专为自动对焦和光学变焦照相手机、数码相机和摄像机应用而设计,

由韩国动运国际有限公司(Dongwoon )设计生产。

工作电压可达3.6V。

DAC通过I2C串行接口控制,该接口以高达400kHz的时钟速率操作DAC。

DW9714集成了上电复位电路、掉电功能和精确匹配的检测电阻。

上电复位电路确保当电源上电时,DAC输出为0V,直到发生有效的写位值。它具有断电功能,可将器件的电流消耗降至最大1uA。

2. 特征

  • 用于自动对焦的VCM驱动程序
  • 关机功能:XSD=低电平有效
  • VCM的10位分辨率电流吸收为120mA
  • I2C串行接口(可用于1.8V输入电平)
  • 集成电流检测电阻
  • 保证所有代码的单调性
  • 低至0.5uA(典型值)
  • 上电复位
  • 掉电功能
  • 2.3V至3.6V操作

3. 模块图

4. 引脚

序号Pin NameI/O Description Note
1IOUTOutput current sink
2VSS接地
3VDD供电
4SDAI2C interface input (DATA)
5SCLI2C interface input/output (CLOCK)
6XSD(1)关机模式,低有效

5. 参考电路

6. i2c时序

由以下时序可以看到,vcm9714利用I2C接口通信时,每次读/写,直接传输2个字节的数据,通信之前,不需要发送内部寄存器地址。

7. 寄存器格式

引脚说明
PDPower down mode
1: Power down mode (active high)
0: Normal operation mode
FLAG写操作时必须置为低
D[9:0]Data input
输出电流 = (D[9:0]/1023) X 120mA
最大电流 = 120mA +/- 5%
S[3:2]Codes per step
0: 0 (no SRC) – direct driving
1: 1
2 :2
3: 4
S[1:0]步进周期
0: 81
1: 162
2: 324
3: 648

三、驱动移植

vcm9714与rk3568连接图:

  • 设备树:
@arch/arm64/boot/dts/rockchip/rk3568-evb1-ddr4-v10.dtsi
560     dw9714: dw9714@c {
561         compatible = "dongwoon,dw9714";
562         status = "okay";
563         reg = <0x0c>;
564         rockchip,camera-module-index = <0>;
565         rockchip,vcm-start-current = <10>;
566         rockchip,vcm-rated-current = <85>;
567         rockchip,vcm-step-mode = <5>;
568         rockchip,camera-module-facing = "back";
569     };
570 
571     ov13850: ov13850@10 {……
584         lens-focus = <&dw9714>;……                                                                                                                                                                                      
591     };

其中,下面这两个属性,必须要和对应的的摄像头ov13850信息保持一致

rockchip,camera-module-index = <0>;
rockchip,camera-module-facing = "back";

摄像头支持的马达驱动信息通过以下属性关联

lens-focus = <&dw9714>;
  • Makefile
@kernel\drivers\media\i2c\Makefile
obj-$(CONFIG_VIDEO_DW9714)  += dw9714.o
  • Kconfig
@kernel\drivers\media\i2c\Kconfig
config VIDEO_DW9714tristate "DW9714 lens voice coil support"depends on I2C && VIDEO_V4L2 && MEDIA_CONTROLLERdepends on VIDEO_V4L2_SUBDEV_API---help---This is a driver for the DW9714 camera lens voice coil.DW9714 is a 10 bit DAC with 120mA output current sinkcapability. This is designed for linear control ofvoice coil motors, controlled via I2C serial interface.
  • 支持该驱动:
@ arch/arm64/configs/rockchip_defconfig 
572 CONFIG_VIDEO_DW9714=y  
  • 驱动:
rk_android11.0_sdk_220718\kernel\drivers\media\i2c\dw9714.c

四、调试信息

1. 启动的驱动log

	[    0.800799] vm149c 4-000c: probing...[    0.800820] vm149c 4-000c: driver version: 00.01.00[    0.800834] vm149c 4-000c: could not get module rockchip,vcm-max-current from dts![    0.800847] vm149c 4-000c: could not get module rockchip,vcm-start-current from dts![    0.800860] vm149c 4-000c: could not get module rockchip,vcm-rated-current from dts![    0.800872] vm149c 4-000c: could not get module rockchip,vcm-step-mode from dts![    0.800907] vm149c 4-000c: probing successful 

2. 查看拓扑结构

media-ctl -p……………- entity 74: m00_b_ov13850 4-0010 (1 pad, 1 link)type V4L2 subdev subtype Sensordevice node name /dev/v4l-subdev4pad0: Source[fmt:SBGGR10/4224x3136]-> "rockchip-csi2-dphy0":0 []- entity 78: m00_b_gpio-flash (0 pad, 0 link)type V4L2 subdev subtype Flashdevice node name /dev/v4l-subdev5- entity 79: m00_b_dw9714 4-000c (0 pad, 0 link)type V4L2 subdev subtype Lensdevice node name /dev/v4l-subdev6

四、驱动分析

vcm9714驱动比较简单,基于i2c总线,

核心就是要注册基于v4l2的subdev,

提供给用户层调用的核心回调函数如下:

  1. 获取并设置当前马达的pos
static const struct v4l2_ctrl_ops dw9714_vcm_ctrl_ops = {.g_volatile_ctrl = dw9714_get_ctrl,.s_ctrl = dw9714_set_ctrl,
};
static int dw9714_init_controls(struct dw9714_device *dev_vcm)
{struct v4l2_ctrl_handler *hdl = &dev_vcm->ctrls_vcm;const struct v4l2_ctrl_ops *ops = &dw9714_vcm_ctrl_ops;v4l2_ctrl_handler_init(hdl, 1);v4l2_ctrl_new_std(hdl, ops, V4L2_CID_FOCUS_ABSOLUTE,0, VCMDRV_MAX_LOG, 1, VCMDRV_MAX_LOG);……
}
static const struct v4l2_subdev_core_ops dw9714_core_ops = {.ioctl = dw9714_ioctl,
};static const struct v4l2_subdev_ops dw9714_ops = {.core = &dw9714_core_ops,
};static int dw9714_probe(struct i2c_client *client,const struct i2c_device_id *id)
{v4l2_i2c_subdev_init(&dw9714_dev->sd, client, &dw9714_ops);
}	

所有camera原创文章已经汇总成pdf,

后台回复:rxw 获取

这篇关于Camera | 12.瑞芯微摄像头自动焦距马达驱动移植的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/305499

相关文章

Python脚本实现自动删除C盘临时文件夹

《Python脚本实现自动删除C盘临时文件夹》在日常使用电脑的过程中,临时文件夹往往会积累大量的无用数据,占用宝贵的磁盘空间,下面我们就来看看Python如何通过脚本实现自动删除C盘临时文件夹吧... 目录一、准备工作二、python脚本编写三、脚本解析四、运行脚本五、案例演示六、注意事项七、总结在日常使用

SpringBoot项目启动后自动加载系统配置的多种实现方式

《SpringBoot项目启动后自动加载系统配置的多种实现方式》:本文主要介绍SpringBoot项目启动后自动加载系统配置的多种实现方式,并通过代码示例讲解的非常详细,对大家的学习或工作有一定的... 目录1. 使用 CommandLineRunner实现方式:2. 使用 ApplicationRunne

Springboot的ThreadPoolTaskScheduler线程池轻松搞定15分钟不操作自动取消订单

《Springboot的ThreadPoolTaskScheduler线程池轻松搞定15分钟不操作自动取消订单》:本文主要介绍Springboot的ThreadPoolTaskScheduler线... 目录ThreadPoolTaskScheduler线程池实现15分钟不操作自动取消订单概要1,创建订单后

python实现自动登录12306自动抢票功能

《python实现自动登录12306自动抢票功能》随着互联网技术的发展,越来越多的人选择通过网络平台购票,特别是在中国,12306作为官方火车票预订平台,承担了巨大的访问量,对于热门线路或者节假日出行... 目录一、遇到的问题?二、改进三、进阶–展望总结一、遇到的问题?1.url-正确的表头:就是首先ur

Spring使用@Retryable实现自动重试机制

《Spring使用@Retryable实现自动重试机制》在微服务架构中,服务之间的调用可能会因为一些暂时性的错误而失败,例如网络波动、数据库连接超时或第三方服务不可用等,在本文中,我们将介绍如何在Sp... 目录引言1. 什么是 @Retryable?2. 如何在 Spring 中使用 @Retryable

使用 Python 和 LabelMe 实现图片验证码的自动标注功能

《使用Python和LabelMe实现图片验证码的自动标注功能》文章介绍了如何使用Python和LabelMe自动标注图片验证码,主要步骤包括图像预处理、OCR识别和生成标注文件,通过结合Pa... 目录使用 python 和 LabelMe 实现图片验证码的自动标注环境准备必备工具安装依赖实现自动标注核心

QT实现TCP客户端自动连接

《QT实现TCP客户端自动连接》这篇文章主要为大家详细介绍了QT中一个TCP客户端自动连接的测试模型,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录版本 1:没有取消按钮 测试效果测试代码版本 2:有取消按钮测试效果测试代码版本 1:没有取消按钮 测试效果缺陷:无法手动停

Linux_kernel驱动开发11

一、改回nfs方式挂载根文件系统         在产品将要上线之前,需要制作不同类型格式的根文件系统         在产品研发阶段,我们还是需要使用nfs的方式挂载根文件系统         优点:可以直接在上位机中修改文件系统内容,延长EMMC的寿命         【1】重启上位机nfs服务         sudo service nfs-kernel-server resta

基于51单片机的自动转向修复系统的设计与实现

文章目录 前言资料获取设计介绍功能介绍设计清单具体实现截图参考文献设计获取 前言 💗博主介绍:✌全网粉丝10W+,CSDN特邀作者、博客专家、CSDN新星计划导师,一名热衷于单片机技术探索与分享的博主、专注于 精通51/STM32/MSP430/AVR等单片机设计 主要对象是咱们电子相关专业的大学生,希望您们都共创辉煌!✌💗 👇🏻 精彩专栏 推荐订阅👇🏻 单片机

Python3 BeautifulSoup爬虫 POJ自动提交

POJ 提交代码采用Base64加密方式 import http.cookiejarimport loggingimport urllib.parseimport urllib.requestimport base64from bs4 import BeautifulSoupfrom submitcode import SubmitCodeclass SubmitPoj():de