一口Linux

电子技术应用专栏作家——一口Linux。一起学习嵌入式、Linux、网络、驱动、arm知识

Camera | 9.camera闪光灯驱动移植笔记-基于rk3568

0
阅读(1805)

瑞芯微摄像头系列文件链接如下:

瑞芯微 | 摄像头ov13850移植笔记


Camera | 1.Camera基础知识

Camera | 2.MIPI、CSI基础

Camera | 3.瑞芯微平台MIPI摄像头常用调试命令

Camera | 4.瑞芯微平台MIPI摄像头应用程序编写

Camera | 5.Linux v4l2架构(基于rk3568)

Camera | 6.v4l2拓扑架构(基于rk3568)

Camera | 7.瑞芯微rk3568平台摄像头控制器MIPI-CSI驱动架构梳理

Camera | 8.让rk3568支持前后置摄像头




image.png

一、闪光灯基本原理

工作模式

Camera flash led分flash和torch两种模式。

  • flash:

拍照时上光灯瞬间亮一下,电流比较大,目前是1000mA,最大电流不能超过led最大承受能力

  • torch:

只用于录video或者拿led当手电筒的情况,电流不能太大,

flash开启需要先从torch过渡,这样电流可以慢慢增大,减少冲击。

二、驱动移植

1. 硬件电路

image.png


dgm3141总体来说比较简单,只有两个引脚用于控制:FLASH_EN、FLASH/TORCH。

  • FLASH_EN

闪光灯使能引脚。

  • FLASH/TORCH

此处led flash和TORCH功能共用了同一个gpio。

注意: 有的摄像头是通过pwm来控制闪光灯,具体问题具体分析,不要教条

2. 设备树

瑞芯微sdk中没有专门针对sgm3141的驱动,网上搜了一大圈也没有搜到,很多闪光灯都是基于I2C接口,通过I2C来设置上光灯的工作模式,好在sdk中有类似的芯片rgb13h驱动,该驱动只有一个引脚用于闪光灯,和我们的功能很类似。

参考驱动文件:leds-rgb13h.c

sgm3141设备树节点

image.png

pinctrl设置:

image.png

驱动模块直接写死,不罗嗦

三、xml

要app支持闪光灯,还需要修改xml文件,打开该功能

image.png

这样,打开app就可以看到上光灯的按钮。

四、拓扑结构

拓扑结构中entity

image.png

  • 摄像头:

m00_b_ov13850、m01_f_ov5648

  • 闪光灯:

m00_b_gpio-flash,v4l2子设备/dev/v4l-subdev5

第4个字母b表示后置摄像头。

五、调试

image.png

操作对应函数调用关系

image.png

  • 闪灯

image.png

六、app 测试驱动 log分析

image.png

3. 拍照

拍照功能,app调用ioctl命令如下:

  1. V4L2_CID_FLASH_LED_MODE :设置led mod为 V4L2_FLASH_LED_MODE_TORCH(2),并点灯

  2. V4L2_CID_FLASH_LED_MODE:到达指定超时时间(2.7秒),设置led mod为 V4L2_FLASH_LED_MODE_NONE 0

  3. V4L2_CID_FLASH_LED_MODE:在此设置led mod为V4L2_FLASH_LED_MODE_FLASH(1)

  4. V4L2_CID_FLASH_STROBE_STOP:停止闪光

    image.png

从log可以看出,app拍照的时候,闪光灯操作是通过v4l2下发的命令,

而我们直接操作宏dev_attr_store创建的文件节点则是通过在sysfs文件节点(brightness  flash_strobe)直接调用到操作函数。

4. 退出摄像头

image.png

七、驱动获取

一口君修改过的驱动已经上传到gitee,获取地址:

image.png

交流嵌入式底层开发技术,加一口君好友:yikoupeng

原文链接:https://mp.weixin.qq.com/s/lt6JxxR_lHXiQRlxWkfpsw

微信图片_20220701092006.jpg

电子技术应用专栏作家  一口Linux