当前位置: 代码网 > 科技>人工智能>物联网 > 6.7物联网RK3399项目开发实录-驱动开发之Camera摄像头的使用(wulianjishu666)

6.7物联网RK3399项目开发实录-驱动开发之Camera摄像头的使用(wulianjishu666)

2024年08月01日 物联网 我要评论
物联网嵌入式RK3399项目开发实例,欢迎点赞收藏,更多干货笔记,请点击头像主页。349014857

90款行业常用传感器单片机程序及资料【stm32,stc89c52,arduino适用】

链接:https://pan.baidu.com/s/1m3u8lcznkuxfn8nrolytta?pwd=c53f 
========================================================

camera 使用

简介

aio-3399j 开发板分别带有两个 mipi,mipi 支持最高 4k 拍照,并支持 1080p 30fps 以上视频录制。此外,开发板还支持 usb 摄像头。

本文以 ov13850/ov5640 摄像头为例,讲解在该开发板上的配置过程。

  • 接口效果图

_images/camera_interface.jpg

dts 配置

isp0: isp@ff910000 {
    …
    status = "okay";
}
isp1: isp@ff920000 {
    …
    status = "okay";
}

驱动说明

与摄像头相关的代码目录如下:

android:
 `- hardware/rockchip/camera/
    |- camerahal             // 摄像头的 hal 源码
    `- siliconimage          // isp 库,包括所有支持模组的驱动源码
       `- isi/drv/ov13850    // ov13850 模组的驱动源码
          `- calib/ov13850.xml // ov13850 模组的调校参数
 `- device/rockchip/rk3399/
    |- rk3399_firefly_aio_box
    |  `- cam_board.xml      // 摄像头的参数设置

 kernel:
 |- kernel/drivers/media/video/rk_camsys  // camsys 驱动源码
 `- kernel/include/media/camsys_head.h

配置原理

设置摄像头相关的引脚和时钟,即可完成配置过程。

从以下摄像头接口原理图可知,需要配置的引脚有:af_vdd28dovdd18avdd28dvdd12pwdn1rst 和 mclk

  • mipi 接口

_images/camera_mipi_interface.jpg

  • af_vdd28 可不做配置。

  • dovdd18avdd28 由 dvp_pwr 控制,dvp_pwr 对应 rk3399 的 gpio1_c1

_images/camera_dvp_pwr.jpg

  • dvdd12 由 cif_power 引脚控制,cif_power 对应 rk3399 上的 gpio1_a1 引脚:

_images/camera_cif_pwr.jpg

  • mipi cif:pwdn0(共用)、pwdn1、rst 对应 gpio1_c1、gpio1_a1、gpio0_b0 引脚:

_images/camera_mipi_cif.jpg

在开发板中,除了 dvdd12 (cif_power) 要在 dts 中设置以外,其它引脚都是在 cam_board.xml 中设置。

配置步骤

配置 android

修改 device/rockchip/rk3399/$(target_product)/cam_board.xml 来注册摄像头:

<boardfile>
<boardxmlversion version="v0.0xf.0"></boardxmlversion>
<camdevie>
<hardwareinfo>
<sensor>
<sensorname name="ov13850"/>
<sensorlens name="50013a1"/>
<sensordevid idname="camsys_devid_sensor_1b"/>
<sensorhostdevid busnum="camsys_devid_marvin"/>
<sensori2cbusnum busnum="1"/>
<sensori2caddrbyte byte="2"/>
<sensori2crate rate="100000"/>
<sensoravdd name="nc" min="28000000" max="28000000" delay="0"/>
<sensordvdd name="nc" min="12000000" max="12000000" delay="0"/>
<sensordovdd name="nc" min="18000000" max="18000000" delay="5000"/>
<sensormclk mclk="24000000" delay="1000"/>
<sensorgpiopwen ioname="rk30_pin1_pc1" active="1" delay="1000"/>
<sensorgpiorst ioname="rk30_pin0_pb0" active="0" delay="1000"/>
<sensorgpiopwdn ioname="rk30_pin1_pa1" active="0" delay="0"/>
<sensorfacing facing="back"/>
<sensorinterface interface=" mipi "/>
<sensormirrorflip mirror="0"/>
<sensororientation orientation="180"/>
<sensorpowerupsequence seq="1234"/>
<sensorfovparemeter h="60.0" v="60.0"/>
<sensorawb_frame_skip fps="15"/>
<sensorphy phymode="camsys_phy_mipi" lane="2" phyindex="1" sensorfmt="camsys_fmt_raw_10b"/>
</sensor>
<vcm>
<vcmdrvname name="dw9714"/>
<vcmname name="huayong6505"/>
<vcmi2cbusnum busnum="1"/>
<vcmi2caddrbyte byte="0"/>
<vcmi2crate rate="0"/>
<vcmvdd name="nc" min="0" max="0" delay="0"/>
<vcmgpiopower ioname="nc" active="0" delay="1000"/>
<vcmgpiopwdn ioname="nc" active="0" delay="0"/>
<vcmcurrent start="20" rated="80" vcmmax="100" stepmode="13" drivermax="100"/>
</vcm>
<flash>
<flashname name="internal"/>
<flashi2cbusnum busnum="0"/>
<flashi2caddrbyte byte="0"/>
<flashi2crate rate="0"/>
<flashtrigger ioname="nc" active="0"/>
<flashen ioname="nc" active="0"/>
<flashmodetype mode="1"/>
<flashluminance luminance="0"/>
<flashcolortemp colortemp="0"/>
</flash>
</hardwareinfo>
<softwareinfo>
<awb>
<awb_auto support="1"/>
<awb_incandescent support="1"/>
<awb_fluorescent support="1"/>
<awb_warm_fluorescent support="1"/>
<awb_daylight support="1"/>
<awb_cloudy_daylight support="1"/>
<awb_twilight support="1"/>
<awb_shade support="1"/>
</awb>
<sence>
<sence_mode_auto support="1"/>
<sence_mode_action support="1"/>
<sence_mode_portrait support="1"/>
<sence_mode_landscape support="1"/>
<sence_mode_night support="1"/>
<sence_mode_night_portrait support="1"/>
<sence_mode_theatre support="1"/>
<sence_mode_beach support="1"/>
<sence_mode_snow support="1"/>
<sence_mode_sunset support="1"/>
<sence_mode_steayphoto support="1"/>
<sence_mode_pireworks support="1"/>
<sence_mode_sports support="1"/>
<sence_mode_party support="1"/>
<sence_mode_candlelight support="1"/>
<sence_mode_barcode support="1"/>
<sence_mode_hdr support="1"/>
</sence>
<effect>
<effect_none support="1"/>
<effect_mono support="1"/>
<effect_solarize support="1"/>
<effect_negative support="1"/>
<effect_sepia support="1"/>
<effect_posterize support="1"/>
<effect_whiteboard support="1"/>
<effect_blackboard support="1"/>
<effect_aqua support="1"/>
</effect>
<focusmode>
<focus_mode_auto support="1"/>
<focus_mode_infinity support="1"/>
<focus_mode_marco support="1"/>
<focus_mode_fixed support="1"/>
<focus_mode_edof support="1"/>
<focus_mode_continuous_video support="0"/>
<focus_mode_continuous_picture support="1"/>
</focusmode>
<flashmode>
<flash_mode_off support="1"/>
<flash_mode_on support="1"/>
<flash_mode_torch support="1"/>
<flash_mode_auto support="1"/>
<flash_mode_red_eye support="1"/>
</flashmode>
<antibanding>
<anti_banding_auto support="1"/>
<anti_banding_50hz support="1"/>
<anti_banding_60hz support="1"/>
<anti_banding_off support="1"/>
</antibanding>
<hdr support="1"/>
<zsl support="1"/>
<digitalzoom support="1"/>
<continue_snapshot support="1"/>
<interpolationres resolution="0"/>
<previewsize width="1920" height="1080"/>
<facedetect support="0" maxnum="1"/>
<dv>
<dv_qcif name="qcif" width="176" height="144" fps="10" support="1"/>
<dv_qvga name="qvga" width="320" height="240" fps="10" support="1"/>
<dv_cif name="cif" width="352" height="288" fps="10" support="1"/>
<dv_vga name="480p" width="640" height="480" fps="10" support="0"/>
<dv_480p name="480p" width="720" height="480" fps="10" support="0"/>
<dv_720p name="720p" width="1280" height="720" fps="10" support="1"/>
<dv_1080p name="1080p" width="1920" height="1080" fps="10" support="1"/>
</dv>
</softwareinfo>
</camdevie>
</boardfile>

主要修改的内容如下:

  • sensor 名称

<sensorname name="ov13850" ></sensorname>

该名字必须与 sensor 驱动的名字一致,目前提供的 sensor 驱动格式如下:

libisp_isi_drv_ov13850.so
  • sensor 软件标识

<sensordevid idname="camsys_devid_sensor_1a"></sensordevid>

注册标识不一致即可,可填写以下值:

camsys_devid_sensor_1a
camsys_devid_sensor_1b
camsys_devid_sensor_2
  • 采集控制器名称

<sensorhostdevid busnum="camsys_devid_marvin" ></sensorhostdevid>

目前只支持:

camsys_devid_marvin
  • sensor 所连接的主控 i2c 通道号

<sensori2cbusnum busnum=3></sensori2cbusnum>

具体通道号请参考摄像头原理图连接主控的 i2c 通道号。

  • sensor 寄存器地址长度,单位:字节

<sensori2caddrbyte byte="2"></sensori2caddrbyte>
  • sensor 的 i2c 频率,单位:hz,用于设置 i2c 的频率。

<sensori2crate rate="100000"></sensori2crate>
  • sensor 输入时钟频率, 单位:hz,用于设置摄像头的时钟。

<sensormclk mclk="24000000"></sensormclk>
  • sensor avdd 的 pmu ldo 名称。如果不是连接到 pmu,那么只需填写 nc。

<sensoravdd name="nc" min="0" max="0"></sensoravdd>
  • sensor dovdd 的 pmu ldo 名称。

<sensordovdd name="nc" min="18000000" max="18000000"></sensordovdd>

如果不是连接到 pmu,那么只需填写 nc。注意 min 以及 max 值必须填写,这决定了 sensor 的 io 电压。

  • sensor dvdd 的 pmu ldo 名称。

<sensordvdd name="nc" min="0" max="0"></sensordvdd>

如果不是连接到 pmu,那么只需填写 nc。

  • sensor powerdown 引脚。

<sensorgpiopwdn ioname="rk30_pin2_pb6" active="0"></sensorgpiopwdn>

直接填写名称即可,active 填写休眠的有效电平。

  • sensor reset 引脚。

<sensorgpiorst ioname="rk30_pin3_pb0" active="0"></sensorgpiorst>

直接填写名称即可,active 填写复位的有效电平。

  • sensor power 引脚。

<sensorgpiopwen ioname="rk30_pin0_pb3" active="1"></sensorgpiopwen>

直接填写名称即可, active 填写电源有效电平。

  • 选择 sensor 作为前置还是后置。

<sensorfacing facing="front"></sensorfacing>

可填写 front 或 back

  • sensor 的接口方式

<sensorinterface mode=" mipi "></sensorinterface>

可填写如下值:

ccir601
ccir656
mipi
smia
  • sensor 的镜像方式

<sensormirrorflip mirror="0"></sensormirrorflip>

目前暂不支持。

  • sensor 的角度信息

<sensororientation orientation="0"></sensororientation>
  • 物理接口设置

mipi

<sensorphy phymode="camsys_phy_mipi" lane="2" phyindex="1" sensorfmt="camsys_fmt_raw_10b"></sensorphy>
  • phymode:sensor 接口硬件连接方式,对 mipi sensor 来说,该值取 camsys_phy_mipi

  • lane:sensor mipi 接口数据通道数

  • phyindex:sensor mipi 连接的主控 mipi phy 编号

  • sensorfmt:sensor 输出数据格式,目前仅支持 camsys_fmt_raw_10b

编译内核需将 drivers/media/video/rk_camsys 驱动源码编进内核,其配置方法如下:

在内核源码目录下执行命令:

make menuconfig

然后将以下配置项打开:

device drivers  --->
 multimedia support  --->
        camsys driver
         rockchip camera system driver  --->
                   camsys driver for marvin isp
                   camsys driver for cif

最后执行:

make arch=arm64 rk3399-firefly-aio.img

即可完成内核的编译。

调试方法

终端下可以直接修改 /system/etc/cam_board.xml 调试各参数并重启生效

faqs

  1. 无法打开摄像头,首先确定 sensor i2c 是否通信。若不通则可检查 mclk 以及供电是否正常(power/powerdown/reset/mclk/i2cbus)分别排查

  2. 支持列表ː

  • 13mː ov13850/imx214-0aqh5

  • 8mː ov8825/ov8820/ov8858-z(r1a)/ov8858-r2a

  • 5mː ov5648/ov5640

  • 2mː ov2680

详细资料可查询 sdk/rkdocs

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com