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 Name | I/O Description Note |
|---|---|---|
| 1 | IOUT | Output current sink |
| 2 | VSS | 接地 |
| 3 | VDD | 供电 |
| 4 | SDA | I2C interface input (DATA) |
| 5 | SCL | I2C interface input/output (CLOCK) |
| 6 | XSD(1) | 关机模式,低有效 |
5. 参考电路

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

7. 寄存器格式

| 引脚 | 说明 |
|---|---|
| PD | Power 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_DW9714
tristate "DW9714 lens voice coil support"
depends on I2C && VIDEO_V4L2 && MEDIA_CONTROLLER
depends 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 sink
capability. This is designed for linear control of
voice 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 Sensor
device node name /dev/v4l-subdev4
pad0: Source
[fmt:SBGGR10/4224x3136]
-> "rockchip-csi2-dphy0":0 []
- entity 78: m00_b_gpio-flash (0 pad, 0 link)
type V4L2 subdev subtype Flash
device node name /dev/v4l-subdev5
- entity 79: m00_b_dw9714 4-000c (0 pad, 0 link)
type V4L2 subdev subtype Lens
device node name /dev/v4l-subdev6
四、驱动分析
vcm9714驱动比较简单,基于i2c总线,
核心就是要注册基于v4l2的subdev,
提供给用户层调用的核心回调函数如下:
- 获取并设置当前马达的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,

关注公众号:一口Linux,
后台回复:rxw 即可获取
Camera | 12.瑞芯微摄像头自动焦距马达驱动移植的更多相关文章
- 瑞芯微ROCK960 RK3399固件烧录总结
1 下载固件 进入瑞芯微ROCK960下载主页 https://www.96boards.org/documentation/consumer/rock/downloads/ 选择os固件, Debi ...
- 瑞芯微RK3399宣布系统开源,进入百余种行业市场!
集微网消息,2月24日瑞芯微官方突然宣布, Rockchip RK3399Linux系统开源!作为Rockchip旗舰级芯片,RK3399具有高性能.高扩展.全能型应用特性. 这一重磅消息立马刷爆朋友 ...
- Linux下更新瑞芯微固件
有这样的需求,是因为提供的BSP中是在windows下烧写的系统.我直接在linux下开发,每次编译后代码都要在windows下烧写,是一个很麻烦的事情.为了解决这个问题我尝试着用VirtualBox ...
- 9.7寸RK3188瑞芯微四核爱立顺M33平板电脑 - 深圳吉祥星晨科技有限公司 - 华强商情网
9.7寸RK3188瑞芯微四核爱立顺M33平板电脑 - 深圳吉祥星晨科技有限公司 - 华强商情网 欢迎加入 2000人超级QQ群,平板电脑行业交流群:221371451,平板电脑产品及报价群:5765 ...
- 瑞芯微发布最新旗舰应用处理器-RK3588
在瑞芯微电子第四届“开发者之春”大会上,瑞芯微推出了新一代8nm旗舰处理器-RK3588 这个芯片将采用8nm 制程工艺.基于A76+A55 内核组合,具备4K UI性能.8K VPU,拥有NPU2. ...
- 瑞芯微RK3399六核-迅为3399开发板介绍
迅为3399开发板基于瑞芯微的RK3399处理器设计,Rockchip RK3399是瑞芯微推出的一款低功耗.高性能的应用处理器芯片,该芯片基于Big.Little架构,即具有独立的NEON协同处理器 ...
- 瑞芯微RK3188如何配置USB摄像头支持
- 瑞芯微RK3188摄像头相关参数的配置
- 瑞芯微RKnanC芯片处理器介绍
RKnanC是一种低成本.低功耗.高效率的数字多媒体芯片,它是基于ARM的低功耗处理器结构和硬件加速器.它是专为便携式音频产品应用,如MP3播放器等. RKnanC可以支持各种音频标准的解码,如MP3 ...
- 瑞芯微ROCK960 RK3399烧录image后扩容rootfs
问题描述: RK3399开发板烧录官网提供的ubuntu镜像: Ubuntu 16.04 Server arm64(下载地址:https://www.96boards.org/documentatio ...
随机推荐
- Android程序获取鸿蒙手机设备信息(是否鸿蒙手机、版本号、小版本号等)
1.效果图 鸿蒙手机 --> 关于手机的截图: Android程序获取鸿蒙手机设备信息的截图: 2.实现 本案例DEMO的实现主要借鉴了网上现有的资料: https://blog.csdn.ne ...
- 使用Github Action来辅助项目管理
Github action 是一个Github官方提供的非常流行且速度集成 持续集成和持续交付(CI/CD)的工具.它允许你在GitHub仓库中自动化.定制和执行你的软件开发工作流.你可以发现.创建和 ...
- .NET周刊【6月第4期 2024-06-23】
国内文章 C#.Net筑基-集合知识全解 https://www.cnblogs.com/anding/p/18229596 .Net中提供了数组.列表.字典等多种集合类型,分为泛型和非泛型集合.泛型 ...
- 《DNK210使用指南 -CanMV版 V1.0》第五章 编译CanMV固件
第五章 编译CanMV固件 1)实验平台:正点原子DNK210开发板 2) 章节摘自[正点原子]DNK210使用指南 - CanMV版 V1.0 3)购买链接:https://detail.tmall ...
- ABP框架开发实例教程-获取前端样式和脚本
1.运行生成的ABP框架,设置WEB.MVC项目为启动项目,点击开始运行,界面如下,样式和脚本文件不存在,所以导致界面无法正常显示,这个我研究ABP遇到的第二个坑,第一个坑是生成数据库. 2.为什么没 ...
- ubuntu20 python2 通过安装包安装mysql-python
前言 众里寻他千百度,蓦然回首,那人却在灯火阑珊处. 最近要测试一个python2环境的代码,其中用到了MySQLdb, 查询网络,发现要安装mysql-python,于是就进行了一番艰难的探索,现在 ...
- 洛谷P1004
洛谷P1004方格取数 题目大意 本题简要意思就是一个人从一个数字矩阵的左上角走到右下角,只能向下和向右走,拿完的数对应位置变成0,并且这个人要走两次,需要计算两次所拿数的最大值 Train of t ...
- leetcode简单(数组,字符串,链表):[66, 67, 70, 83, 121, 141, 160, 169, ,206, 338]
目录 66. 加一 67. 二进制求和 70. 爬楼梯 83. 删除排序链表中的重复元素 121. 买卖股票的最佳时机 141. 环形链表 160. 相交链表 169. 多数元素 206. 反转链表 ...
- oeasy教您玩转vim - 25 - 更多颜色
更多颜色 回忆上节课内容 我们上次深入了配色方案 定义了自己的配色方案 oeasy 建立了自己的配色 oeasy 在状态栏应用了自己的配色 明确能用的颜色 先胡乱地尝试一下修改颜色代码 hi ...
- 第一章 FFmpeg初体验:在Centos7.9下编译FFmpeg!
FFmpeg 官方网站:https://ffmpeg.org//download.html#build-linux 1.下载源码 1.1 第一种方式,官网上面下载源码包: 截至目前最新的版本是7.0. ...