目录

OV8858主要信息

设备树修改

添加编译设置

修改上电时序

修改摄像头配置文件


开发流程概述

添加I2c设备树 --> 修改驱动中的上电时序 --> 读取到摄像头ID --> 修改摄像头配置文件

OV8858主要信息

1.供电

key specifications (typical)
active array size: 3264 x 2448
power supply:
analog: 2.6 to 3.0V (2.8V nominal)
core: 1.14 to 1.26V (1.2V nominal)
I/O: 1.7 to 3.0V (1.8V or 2.8V nominal)

2.如何判断驱动中摄像头配置是 RAW 还是 SOC 类型?

如果驱动中 xxxx_enum_mbus_code 配置为 MEDIA_BUS_FMT_UYVY/YUYV/VYUY 等,则为SOC 摄像头;如果需要调试效果,找对应 Sensor 原厂。

如果驱动中 xxxx_enum_mbus_code 配置为 MEDIA_BUS_FMT_SBGGR/SRGGB/SGBRG 等,则为 RAW 摄像头,

设备树修改

1.添加对应的i2c设备

&i2c1{
    status = "okay";
    clock-frequency = <400000>;
    ov8858: ov8858@36 {
        compatible = "ovti,ov8858";
        reg = <0x36>;
        clocks = <&cru SCLK_CIF_OUT>;
        clock-names = "xvclk";
        /* avdd-supply = <>; */  /*硬件pwm供电,软件不需要配置*/
        /* dvdd-supply = <>; */
        /* dovdd-supply = <>; */
        /* flash-leds = <>; */
        pinctrl-names = "rockchip,camera_default";
        pinctrl-0 = <&cif_clkout>;
        //power-gpio = <&gpio2 RK_PB4 cc>;/*硬件pwm供电,软件不需要配置*/
        reset-gpios = <&gpio2 RK_PD3 GPIO_ACTIVE_LOW>;  /*重启设备*/
        pwdn-gpios = <&gpio2 RK_PB4 GPIO_ACTIVE_LOW>; /*复位设备寄存器*/
        rockchip,camera-module-index = <0>;
        rockchip,camera-module-mclk-name = "clk_cif_out";
        rockchip,camera-module-facing = "front";
        rockchip,camera-module-name = "CameraKing";
        rockchip,camera-module-lens-name = "Largan-9569A2";
        //power-domains = <&power RK3399_PD_VIO>;
        port {
            ov8858_out: endpoint {
                remote-endpoint = <&mipi_in_ucam0>;
                data-lanes = <1 2 3 4>;
            };
        };
    };
};

&mipi_dphy_rx0{
    status = "okay";

ports {
        #address-cells = <1>;
        #size-cells = <0>;

port@0 {
             reg = <0>;
            #address-cells = <1>;
            #size-cells = <0>;

mipi_in_ucam0: endpoint@1 {
                reg = <1>;
                remote-endpoint = <&ov8858_out>;
                data-lanes = <1 2 3 4>;
             };
        };

port@1 {
            reg = <1>;
            #address-cells = <1>;
            #size-cells = <0>;

dphy_tx1rx1_out: endpoint@0 {
                reg = <0>;
                remote-endpoint = <&isp0_mipi_in>;
            };
        };
    };
};

&rkisp1_0{

status = "okay";
    port {
        #address-cells = <1>;
        #size-cells = <0>;

isp0_mipi_in: endpoint@0 {
            reg = <0>;
            remote-endpoint = <&dphy_tx1rx1_out>;
        };
    };
};

&isp0_mmu{  /* rkisp1_0中指定了iommus = <&isp0_mmu> */
    status = "okay";
};

其他的一些修改

&pinctrl {

isp {

cif_clkout: cif-clkout {

rockchip,pins =

/*cif_clkout*/

<2 11 RK_FUNC_3 &pcfg_pull_none>;

};

-               bat_detect_gpio: bat-detect-gpio {
+               /*bat_detect_gpio: bat-detect-gpio {  /*去除一些重复的引脚,以免出问题*/
                        rockchip,pins = <2 RK_PB4 RK_FUNC_GPIO &pcfg_pull_none>;
                };
+               */

&io_domains {
        status = "okay";
-       bt656-supply = <&vcc_3v0>;
+       bt656-supply = <&vcc1v8_dvp>; 
        audio-supply = <&vcca1v8_codec>;
        sdmmc-supply = <&vccio_sd>;
        gpio1830-supply = <&vcc_3v0>;

 添加编译设置

路径:arch/arm64/configs/tab23_rk99_fr_gen2_defconfig

-# CONFIG_VIDEO_OV8858 is not set
+CONFIG_VIDEO_OV8858=y

路径:drivers/media/i2c/Kconfig

config VIDEO_OV8858
        tristate "OmniVision OV8858 sensor support"
        depends on I2C && VIDEO_V4L2
        depends on MEDIA_CAMERA_SUPPORT
+       default y

修改上电时序

 static int __ov8858_power_on(struct ov8858 *ov8858)}if (!IS_ERR(ov8858->reset_gpio))
-               gpiod_set_value_cansleep(ov8858->reset_gpio, 0);
-
+               gpiod_set_value_cansleep(ov8858->reset_gpio, 1);
+       if (!IS_ERR(ov8858->pwdn_gpio))
+               gpiod_set_value_cansleep(ov8858->pwdn_gpio, 1);ret = regulator_bulk_enable(OV8858_NUM_SUPPLIES, ov8858->supplies);if (ret < 0) {dev_err(dev, "Failed to enable regulators\n");goto disable_clk;}
-
+       usleep_range(2500, 3000);if (!IS_ERR(ov8858->reset_gpio))
-               gpiod_set_value_cansleep(ov8858->reset_gpio, 1);
+               gpiod_set_value_cansleep(ov8858->reset_gpio, 0);
+-       usleep_range(1000, 2000);if (!IS_ERR(ov8858->pwdn_gpio))
-               gpiod_set_value_cansleep(ov8858->pwdn_gpio, 1);
+               gpiod_set_value_cansleep(ov8858->pwdn_gpio, 0);

修改摄像头配置文件

/FR/hardware/rockchip/camera/etc/camera/camera3_profiles_rk3399.xml

从其他的使用8858的项目里把8858的配置都抄过来

<Profiles cameraId="0" name="ov8858" moduleId="m00">   只有1个摄像头moduleId为0

<sensor.orientation value="90"/>         摄像头旋转的角度

<sensorType value="SENSOR_TYPE_RAW"/>  摄像头的类型,另一个为SENSOR_TYPE_SOC,如果设置为SOC,这里面的配置都不在生效,摄像的画面会很幽暗。

关于摄像头的效果

/FR/hardware/rockchip/camera/etc/camera/rkisp1/ov8858_CameraKing_Largan-9569A2.xml

源文件:FR/device/rockchip/rk3399/media_profiles_default.xml(拷其他项目的)

这个文件会拷贝为机器的 /vendor/etcmedia_profiles_V1_0.xml 控制摄像头拍照和录像的分辨率,如果这个文件不对会导致录像功能崩溃

问题1:mclk时钟如果没有输出,很有可能是电源阈没有配置正确。

由上图可见mclk的引脚是GPIO2-B3.由原理图可知GPIO2用的电源域对应APIO2,

APIO2_VDD  ---> VCC1V8_DVP

查看kernel文档Documentation/devicetree/bindings/power/rockchip-io-domain.txt

Possible supplies for rk3399:
- bt656-supply:  The supply connected to APIO2_VDD.

RK3399 GPIO配置问题/电源域配置

问题2:上层未识别到摄像头,使用 APK 打不开摄像头
使用命令: dumpsy media.camera
Number of camera devices: 0,说明 framework 层没有识别到摄像头;

问题3:拍照功能正常,点击录像就会崩溃

logcat报错信息:

10-10 14:27:43.464 1511 2025 E CAM_Storage: getOtherAvailableSpace DIRECTORY:/DCIM/Camera UNAVAILABLE

10-10 14:27:43.468 1511 1511 I CAM_VideoModule: initializeRecorder: Thread[main,5,main]

10-10 14:27:43.469 1511 1511 D CAM_VideoModule: camera isReleased:false

10-10 14:27:43.482 417 1718 W StagefrightRecorder: Max file duration is not positive: 0 us. Disabling duration limit.

10-10 14:27:43.482 417 1718 W StagefrightRecorder: Target duration (0 us) too short to be respected

10-10 14:27:43.483 1511 1511 D CAM_LcyLocProvider: No location received yet.

10-10 14:27:43.484 1511 1511 D CAM_LcyLocProvider: No location received yet.

10-10 14:27:43.484 1511 1511 V CAM_VideoModule: New video filename: /storage/emulated/0/DCIM/Camera/VID_20221010_142743.mp4.tmp

10-10 14:27:43.490 417 592 E CameraSource: Video dimension (1920x1080) is unsupported

10-10 14:27:43.490 1511 1511 E MediaRecorder: start failed: -19

10-10 14:27:43.491 1511 1511 E CAM_VideoModule: Could not start media recorder.

修改device/rockchip/rk3399/media_profiles_default.xml文件,

修改前前置摄像头视频为  HD1080P HD720P  CIF

修改后前置摄像头视频为  HD720 SD480P  QVGA

问题4: 关于数据链路的确定

如何使用 v4l2 获取底层数据流?
4.8.1 首先配置链路 First configure the link
目前 RK 的 Camera 驱动使用的 media-ctl 框架,有以下四种常见链路:
1、 MIPI-RAW-Sensor -> MIPI 接口->ISP
2、 MIPI-YUV-Sensor -> MIPI 接口->ISP
3、 Parallel-Sensor ->ISP
4、 Parallel-Sensor ->CIF

其中MIPI-RAW-Sensor -> MIPI interface->ISP对应的链路图为

配置链路命令如下:(设备树都配置过了,一般不用手动配置

media-ctl -l '"ov5648 2-0036":0->"rockchip-mipi-dphy-rx":0[1]'                                //设备树只有 mipi-dphy-rx0

media-ctl -l '"rockchip-mipi-dphy-rx":1->"rkisp1-isp-subdev":0[1]'                           //设备树有  rkisp1_0 和 rkisp1_1 ,都试试看看那个可用

配置好后,使用 media-ctl -p 命令查看如下:会显示 ENABLED(下同),说明链路配置连接成功。

打开log开关后,可见如下的绑定关系

10-09 10:38:45.761 290 455 I RkCamera: <HAL> MediaController: @configureLink: disable "m00_f_ov8858 1-0036" [0] --> "rockchip-mipi-dphy-rx" [0]

10-09 10:38:45.761 290 455 I RkCamera: <HAL> MediaController: @setupLink

10-09 10:38:45.761 290 455 I RkCamera: <HAL> MediaController: @enumLinks

10-09 10:38:45.762 290 455 I RkCamera: <HAL> MediaEntity: @updateLinks

10-09 10:38:45.762 290 455 I RkCamera: <HAL> MediaEntity: link 0: pad 0 --> sink entity 7:0 (disabled)

10-09 10:38:45.762 290 455 D RkCamera: <HAL> MediaCtlHelper: @resetLinks

10-09 10:38:45.762 290 455 I RkCamera: <HAL> MediaController: @configureLink: disable "rockchip-mipi-dphy-rx" [1] --> "rkisp1-isp-subdev" [0]

tab23_rk99_fr:/ # media-ctl -p

........

........

- entity 7: rockchip-mipi-dphy-rx (2 pads, 2 links)

type V4L2 subdev subtype Unknown

device node name /dev/v4l-subdev1

pad0: Sink

[fmt:SBGGR10/3264x2448]

<- "m00_f_ov8858 1-0036":0 [ENABLED]

pad1: Source

[fmt:SBGGR10/3264x2448]

-> "rkisp1-isp-subdev":0 [ENABLED]

- entity 8: m00_f_ov8858 1-0036 (1 pad, 1 link)

type V4L2 subdev subtype Sensor

device node name /dev/v4l-subdev2

pad0: Source

[fmt:SBGGR10/3264x2448]

-> "rockchip-mipi-dphy-rx":0 [ENABLED]

camera hal3 的 LOG 抓取 
打开 camerahal 的 debug 命令;
setprop persist.vendor.camera.hal.debug 5
关闭命令
setprop persist.vendor.camera.hal.debug 0

参考资料:rk3566 ov8858摄像头调试

RK3399适配OV8858摄像头相关推荐

  1. 校园枪击案后,这个美国小哥开发了“枪支检测器”!迅速定位疑犯,适配任何摄像头...

    作者:曹培信 来源:大数据文摘(ID:BigDataDigest) 2019年8月3日北美中部时区上午约10点40分,在美国德克萨斯州埃尔帕索的一家沃尔玛商店里,一个携带WASR-10和半自动民用版A ...

  2. 印第安人的捕梦网 Dreamcatcher 与音乐——排箫

    捕梦网源自18世纪,印第安人会用它来捕获美丽的梦幻,让恶梦随清晨的阳光而消逝,他们相信夜晚的空气中充满着各种的梦幻,只有捕梦网能将梦过滤,把他们带入美丽的梦乡. 捕梦网 传统的捕梦网是用树枝编成一个圆 ...

  3. rk3568 适配摄像头 (双摄)

    rk3568 适配摄像头 (mipi 双摄) rk3568 适配双摄像其实就是逐个适配单摄像头,只是两颗摄像头的数据总线可能不同(cif+mipi),也可能相同(mipi(2lane) x 2).几乎 ...

  4. STM32单片机实现连接USB摄像头

    STM32单片机实现连接USB摄像头 如题,本人已经实现STM32连接基于Cypress CY7C68013A的摄像头电路板的方案,具体实现原理如下: 摄像头侧CY7C68013A硬件电路板连接被测试 ...

  5. webrtc USB摄像头

    Webrtc 适配USB摄像头 1.好久没有整理了, 最近在调试webrtc 替代公司项目中的语音/视频通话功能,废了好大劲终于把sipstack 和webrtc替换好了,但是在设备适配中,又要适配u ...

  6. RK3568驱动OV13850摄像头模组调试过程

    摄像头介绍 品牌:Omnivision 型号:CMK-OV13850 接口:MIPI 像素:1320W OV13850彩色图像传感器是一款低电压.高性能1/3.06英寸1320万像素CMOS图像传感器 ...

  7. 【鲁班猫创意氛围赛】移植motion进行移动侦测抓拍录像

    [鲁班猫创意氛围赛]移植motion进行移动侦测抓拍录像 LubanCat-RK环境搭建 部署motion 配置motion的各项参数 进行局域网展示图像 LubanCat-RK环境搭建 环境搭建可参 ...

  8. VisionSeed 腾讯优图实验室

    一.来信说明 1.EMAIL内容 卓大大,你好: 这边是腾讯优图实验室给你的邮件,我是腾讯优图实验室的方案架构师,新源 目前我们研发出了一款AI视觉模组叫做VisionSeed,是一款提供AI算法+算 ...

  9. ESP32-CAM使用过程中可能会遇到的问题

    ESP32-CAM是一款基于ESP32的小尺寸<摄像头>开发板,集ESP32的WIFI+蓝牙于一体,该开发板可以作为最小系统独立工作. 这款开发板采用的是DIP封装,用户只需直接插上底板即 ...

最新文章

  1. FTP 主动、被动工作模式
  2. 如何查看长文本的标识和对象(读长文本)。
  3. ta是什么职位_想好了吗~你为什么来博智林
  4. Wpf 调用线程无法访问此对象,因为另一个线程拥有该对象,解决方案
  5. linux桌面环境应用
  6. [Java基础]接口组成(默认方法,静态方法,私有方法)
  7. P5488 差分与前缀和(多项式/生成函数)
  8. 解决shiro和quartz2 版本冲突问题
  9. linux tcp socket 接收的字节数与发送的字节数不符,TCP发送接口(如send(),write()等)的返回值与成功发送到接收端的数据量无直接关系...
  10. 安装redis3.0.5
  11. CentOS配置history记录每个用户执行过的命令
  12. 使用insightface进行人脸识别批量下载图片
  13. 中兴C93E全光网配置
  14. 如何恢复计算机永久删除文件,回收站删除文件如何恢复
  15. php中的refresh,PHP mysqli_refresh() 函数用法及示例
  16. 什么是数据可视化技术
  17. 解决chm文档字体太小的问题
  18. CIKM 2021 | 推荐系统相关论文分类整理
  19. 2019网易校园招聘 - 算法平台开发工程师
  20. 跟大家聊聊计算机实验室的脱坑经历

热门文章

  1. 大龄程序员的出路在哪里!40岁50岁你还有精力每天抱着电脑写程序吗?
  2. teraterm乱码linux,[Unity3D][转] 关于Assets资源目录结构管理
  3. 并购当当是海航自编自导的一场大戏
  4. http 405 错误
  5. Xshell 7下载、安装步骤与使用教程
  6. Android源码分析 - Framework层的Binder(客户端篇)
  7. CRM客户关系管理系统源码跟单销售公司订单跟进客户公海合同管理办公erp客户管理(小程序+APP+H5)
  8. markdown 转 html c,STATA中的Markdown转换命令markstat
  9. oracle官网下载JDK速度很慢的解决方案
  10. 解决windows 2000无法安装vmtool的问题