Android:展锐T760平台camera驱动调试

news2024/9/20 9:30:41

一、模块平台框架

平台介绍

基于UMS9620x平台集成Camera时,共有四类信号需要了解:

1、MIPI CSI信号:该平台有DPHY和CPHY两种MIPI信号。

   DPHY配置:包括数对差分数据信号DP/N,和一对差分时钟信号CKP/N。

   CPHY配置:最多有3lane,每lane由ABC三条数据组成。

   Camera的连接方式受限于UMS9620x内部的CSI PHY、CSI Controller和DCAM模块。

2、I2C信号:UMS9620x作为Controller,通过I2C总线对Camera进行配置或者对Camera状态进行读取。

3、控制信号:控制信号通常有PWDN、RST、MCLK信号;双摄模式下还有FS_DUALCAM(V_SNYC)信号

用于多个Camera之间同步抓帧。

4、四组电源:

   Sensor模拟电源:AVDD

   核心数字部分电源:DVDD

   IO接口电源:IOVDD

   对焦马达电源:AFVDD

Camera功能框图

二、适配流程介绍

下面T760平台项目前后摄为例介绍,如前摄ov02b10,后摄ov16885。

camera相关目录

device/sprd/mpool/product/unisoc/usvi/violators/camera/msoc/qogirn6pro/qogirn6pro.mk

device/sprd/qogirn6pro/ums9620_nb10/module/camera/md.mk

device/sprd/qogirn6pro/ums9620_nb10/module/camera/sensor_config.xml

bsp/kernel5.4/kernel5.4/arch/arm64/boot/dts/sprd/ums9620-nb10-overlay.dts

vendor/sprd/modules/libcamera/libcam_device.mk

vendor/sprd/modules/libcamera/sensor/af_drv/vcm_lib_cfg.mk

vendor/sprd/modules/libcamera/sensor/its_param/qogirn6pro/OmniVision/ov02b10

vendor/sprd/modules/libcamera/sensor/its_param/qogirn6pro/OmniVision/ov16885

vendor/sprd/modules/libcamera/sensor/sensor_cfg.c

vendor/sprd/modules/libcamera/sensor/sensor_drv/classic/OmniVision/ov02b10

vendor/sprd/modules/libcamera/sensor/sensor_drv/classic/OmniVision/ov16885

vendor/sprd/modules/libcamera/sensor/sensor_drv/sensor_lib_cfg.mk

vendor/sprd/modules/libcamera/kernel_module/flash/sc2703s

其中tuning参数,使用工具自动生成,具体在tuning文档中介绍。

图例:

1、修改device配置

device/sprd/mpool/product/unisoc/usvi/violators/camera/msoc/qogirn6pro/qogirn6pro.mk

device/sprd/qogirn6pro/ums9620_nb10/module/camera/md.mk

device/sprd/qogirn6pro/ums9620_nb10/module/camera/sensor_config.xml

修改参考方法如下:

device/sprd/mpool/product/unisoc/usvi/violators/camera/msoc/qogirn6pro/qogirn6pro.mk

TUNING_PARAM_LIST := "ov16885,ov02b10"

device/sprd/qogirn6pro/ums9620_nb10/module/camera/md.mk

CAMERA_SUPPORT_SIZE := s16

FRONT_CAMERA_SUPPORT_SIZE := s2

#BACK_EXT_CAMERA_SUPPORT_SIZE := s2

#FRONT_EXT_CAMERA_SUPPORT_SIZE := s8

#BACK_EXT2_CAMERA_SUPPORT_SIZE := s8

TARGET_BOARD_SW_GTM_SUPPORT := true

TARGET_BOARD_CAMERA_DUAL_SENSOR_MODULE := false

CAMERA_SENSOR_TYPE_BACK := ov16885

CAMERA_SENSOR_TYPE_FRONT := ov02b10

#CAMERA_SENSOR_TYPE_BACK_EXT := ov16885

#CAMERA_SENSOR_TYPE_FRONT_EXT := ov02b10

SENSOR_OV8856_TELE := false

TARGET_BOARD_CAMERA_DUAL_SENSOR_MODULE := false

TUNING_PARAM_LIST := "ov16885,ov02b10"

TARGET_BOARD_CAMERA_4IN1 := false

#TARGET_BOARD_SENSOR_OV4C := false

TARGET_BOARD_SENSOR_SS4C := false

TARGET_BOARD_CAMERA_FLASH_LED_0 := false # flash led0 config

TARGET_BOARD_CAMERA_FLASH_LED_1 := false # flash led1 config

#TARGET_BOARD_CAMERA_FLASH_TYPE := ocp8137

TARGET_BOARD_MULTICAMERA_SUPPORT := false

device/sprd/qogirn6pro/ums9620_nb10/module/camera/sensor_config.xml

  <root>

  <!-->

  sensor id 1

  <-->

      <CameraModuleCfg>

        <SlotId>1</SlotId>

        <SensorName>ov16885</SensorName>

        <Facing>FRONT</Facing>

        <Orientation>270</Orientation>

        <Resource_cost>55</Resource_cost>

        <ConflictingDevice>1</ConflictingDevice>

        <VCM>

            <AfName>dw9714v</AfName>

            <Mode>2</Mode>

        </VCM>

        <OTP>

            <E2prom>

                <OtpName>general</OtpName>

                <I2cAddr>0xa4</I2cAddr>

                <E2promNum>0</E2promNum>

                <E2promSize>8192</E2promSize>

            </E2prom>

        </OTP>

        <TuningParameter>

            <TuningName>ov16885</TuningName>

        </TuningParameter>

      </CameraModuleCfg>

  <!-->

  sensor id 0

  <-->

      <CameraModuleCfg>

        <SlotId>0</SlotId>

        <SensorName>ov02b10</SensorName>

        <Facing>BACK</Facing>

        <Orientation>90</Orientation>

        <Resource_cost>100</Resource_cost>

        <TuningParameter>

            <TuningName>ov02b10</TuningName>

        </TuningParameter>

      </CameraModuleCfg>

 </root>

2、修改驱动

添加驱动文件目录:

vendor/sprd/modules/libcamera/sensor/sensor_drv/classic/OmniVision/ov02b10

vendor/sprd/modules/libcamera/sensor/sensor_drv/classic/OmniVision/ov16885

调试时,需要注意i2c地址,打开驱动头文件,修改i2c地址,比如:

sprd/modules/libcamera/sensor/sensor_drv/classic/OmniVision/ov02b10/sensor_ov02b10_mipi_raw.h

sprd/modules/libcamera/sensor/sensor_drv/classic/OmniVision/ov16885/sensor_ov16885_mipi_raw.h

#define I2C_SLAVE_ADDR 0x20 /* 8bit slave address*/

sprd/modules/libcamera/sensor/sensor_drv/sensor_lib_cfg.mk

PRODUCT_PACKAGES += libsensor_imx351 \

    libsensor_ov5675_dual \

    libsensor_ov7251 \

    libsensor_ov8856_shine \

    libsensor_ov8856_shine_front \

    libsensor_ov02b10 \

    libsensor_ov16885

3、配置设备树

设备树路径:根据原理图,sensor datasheet等配置。

bsp/kernel5.4/kernel5.4/arch/arm64/boot/dts/sprd/ums9620-nb10-overlay.dts

&i2c0 {

        status = "okay";

        clock-frequency = <400000>;

        #address-cells = <1>;

        #size-cells = <0>;

        sensor_main: sensor-main@20 {

                 compatible = "sprd,sensor-main";

                 reg = <0x20>;

                 clock-names = "clk_src","sensor_eb",

                         "clk_96m","clk_64m",

                         "clk_51m2","clk_48m","clk_26m";

                 clocks = <&mm_clk CLK_SENSOR0>,<&mm_gate CLK_SENSOR0_EN>,

                                  <&g5l_pll CLK_TGPLL_96M>,<&g5l_pll CLK_TGPLL_64M>,

                                  <&g5l_pll CLK_TGPLL_51M2>,<&g5l_pll CLK_TGPLL_48M>,<&ext_26m>;

                 vddio-supply = <&vddcamio>;

                 vddcama-supply = <&vddcama0>;

                 vddcamd-supply = <&vddcamd0>;

                 vddcammot-supply = <&vddcammot0>;

                 reset-gpios = <&ap_gpio 39 0>;

                 power-down-gpios = <&ap_gpio 45 0>;

                 sprd,phyid = <0>;

                 csi = <&csi0>;

                 power-domains = <&mm_domain>;

        };

};

&i2c1 {

        status = "okay";

        clock-frequency = <400000>;

        #address-cells = <1>;

        #size-cells = <0>;

        sensor_sub: sensor-sensor_sub@78 {

                 compatible = "sprd,sensor-sub";

                 reg = <0x78>;

                 clock-names = "clk_src","sensor_eb",

                         "clk_96m","clk_64m",

                         "clk_51m2","clk_48m","clk_26m";

                 clocks = <&mm_clk CLK_SENSOR1>,<&mm_gate CLK_SENSOR1_EN>,

                         <&g5l_pll CLK_TGPLL_96M>,<&g5l_pll CLK_TGPLL_64M>,

                         <&g5l_pll CLK_TGPLL_51M2>,<&g5l_pll CLK_TGPLL_48M>,<&ext_26m>;

                 vddio-supply = <&vddcamio>;

                 vddcama-supply = <&vddcama1>;

                 vddcamd-supply = <&vddcamio>;

                 reset-gpios = <&ap_gpio 40 0>;

                 power-down-gpios = <&ap_gpio 46 0>;

                 sprd,phyid = <1>;

                 csi = <&csi1>;

                 power-domains = <&mm_domain>;

        };

};

修改方法参考如下:

根据硬件原理图配置,i2c总线、供电、GPIO、PHY、CSI等等。

4、OTP驱动配置

vendor/sprd/modules/libcamera/sensor/otp_drv/driver/

展锐OTP方案:按照展锐平台OTP烧录规范,数据存储在E2prom中,建议使用general驱动。

个性化OTP方案:需另行编写OTP驱动xxx_yyy,并将OtpName配置为xxx_yyy。

NB1.0项目采用展锐的OTP方案,注意i2c地址,大小即可。

device/sprd/qogirn6pro/ums9620_nb10/module/camera/sensor_config.xml

      <CameraModuleCfg>

        <SlotId>1</SlotId>

        <SensorName>ov16885</SensorName>

        <Facing>FRONT</Facing>

        <Orientation>270</Orientation>

        <Resource_cost>55</Resource_cost>

        <ConflictingDevice>1</ConflictingDevice>

        <VCM>

            <AfName>dw9714v</AfName>

            <Mode>2</Mode>

        </VCM>

        <OTP>

            <E2prom>

                <OtpName>general</OtpName>

                <I2cAddr>0xa4</I2cAddr>

                <E2promNum>0</E2promNum>

                <E2promSize>8192</E2promSize>

            </E2prom>

        </OTP>

        <TuningParameter>

            <TuningName>ov16885</TuningName>

        </TuningParameter>

      </CameraModuleCfg>

5、AF驱动配置

vendor/sprd/modules/libcamera/sensor/af_drv/vcm_lib_cfg.mk

vendor/sprd/modules/libcamera/sensor/af_drv/dw9714/

vendor/sprd/modules/libcamera/sensor/af_drv/vcm_lib_cfg.mk

PRODUCT_PACKAGES += libvcm_dw9714p \

                    libvcm_dw9714v \

                    libvcm_lc898213 \

                    libvcm_dw9768v \

                    libvcm_dw9800 \

                    libvcm_dw9825a \

                    libvcm_dw9714 \

6、Flash驱动配置

vendor/sprd/modules/libcamera/kernel_module/flash/sc2703s/

本项目用的默认驱动,不需要额外的配置,用默认的即可。

7、配置otp

和马达驱动一样,otp可以使用展锐的平台otp驱动,在sensor_cfg.c中添加。

8、Tuning参数配置

vendor/sprd/modules/libcamera/libcam_device.mk

vendor/sprd/modules/libcamera/sensor/its_param/qogirn6pro/OmniVision/ov02b10

vendor/sprd/modules/libcamera/sensor/its_param/qogirn6pro/OmniVision/ov16885

vendor/sprd/modules/libcamera/libcam_device.mk

ifneq ($(filter $(TARGET_BOARD_PLATFORM), ums9620), )

PRODUCT_COPY_FILES += $(call find-copy-subdir-files,*,vendor/sprd/modules/libcamera/sensor/its_param/qogirn6pro/OmniVision/ov16885,vendor/firmware/ov16885) \

                      $(call find-copy-subdir-files,*,vendor/sprd/modules/libcamera/sensor/its_param/qogirn6pro/OmniVision/ov02b10,vendor/firmware/ov02b10)

endif

其中tuning参数,使用工具自动生成,具体在tuning文档中介绍。

9、编译

1、整编

source build/envsetup.sh

lunch <boardname>

kheader

进入BSP目录,设置BSP环境变量和编译选项

source build/envsetup.sh

lunch <boardname_bsp>

编译整个工程,返回根目录执行:

Make

   

    2、单独编译Camera模块

source build/envsetup.sh

lunch <boardname>

kheader

进入vendor/sprd/modules/libcamera目录:

mm或mma

   

    3、单独编译Flash ko

source build/envsetup.sh

lunch <boardname_bsp>

编译通用Flash驱动ko,在BSP下执行:

make modules -m sprd_flash_drv.ko

编译具体Flash驱动ko,在BSP下执行:

make modules -m flash_ic_ocp8137.ko

make modules -m flash_ic_sc2703.ko

   

    4、编译DTS

source build/envsetup.sh

lunch <boardname>

编译boot.img:

make bootimage

编译dtbo.img:

make dtboimage

10、下载

1、下载Sensor/AF/OTP驱动

out/target/product/ums9620_nb10/odm/lib/

2、下载sensor_config.xml

adb root

adb remount

adb push sensor_config.xml odm/etc

adb reboot

3、下载Sensor Tuning参数

adb root

adb remount

adb push ov16885 vendor/firmware/ov16885

adb reboot

也可使用IspTool工具下载参数,具体请参考IspTool工具包中的使用指导手册。

4、下载Flash驱动

bsp/out/androidt/ums512_1h10_Natv/dist/modules/archive/

5、下载DTS

修改DTS后,编译生成的image文件输出目录:

out/target/product/ums9620_nb10。

将DTS下载到设备:boot.img和dtbo.img存放在电脑本地。

adb reboot bootloader

fastboot flash boot boot.img

fastboot flash dtbo dtbo.img

fastboot reboot

也可使用展锐pac下载工具ResearchDownload下载image,具体请参考ResearchDownload工具包中的使用指导手册。

三、常见问题

1、互换前后摄ID

device/sprd/qogirn6pro/ums9620_nb10/module/camera/sensor_config.xml

把sensor id前后摄内容互换,如SlotId、Facing等选项内容,具体以实际为准。

bsp/kernel5.4/kernel5.4/arch/arm64/boot/dts/sprd/ums9620-nb10-overlay.dts

主要是红框内容互换:

&i2c0 {

    status = "okay";

    sensor_sub: sensor-sub@78 {

        compatible = "sprd,sensor-sub";

        reg = <0x78>;

        ... ...

        status = "okay";

    };

};

&i2c1 {

    status = "okay";

    sensor_main: sensor-main@20 {

        compatible = "sprd,sensor-main";

        reg = <0x20>;

        ... ...

        status = "okay";

    };

};

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1100781.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

超全面的前端工程化配置指南

前端工程化配置指南 本文讲解如何构建一个工程化的前端库&#xff0c;并结合 Github Actions&#xff0c;自动发布到 Github 和 NPM 的整个详细流程。 示例 我们经常看到像 Vue、React 这些流行的开源项目有很多配置文件&#xff0c;他们是干什么用的&#xff1f;他们的 Commit…

Typora+PicGo+Github+CSDN梦幻联动

文章目录 一、快速搭建个人免费图床二、Typora图片实现自动上传三、Typora图片上传到CSDN出现错误 一、快速搭建个人免费图床 之前写过一篇 快速搭建个人免费图床 的文章&#xff0c;但是每次都要把图片拖到PicGo里面才能生成链接很麻烦&#xff0c;而且在本地用Typora写的文章…

C++ —— Tinyxml2在Vs2017下相关使用2(较文1更复杂,附源码)

相关链接 C —— Tinyxml2在Vs2017下相关使用1&#xff08;附源码&#xff09; tinyxml2简介 TinyXML2是一个简单&#xff0c;小巧&#xff0c;高效&#xff0c;CXML解析器&#xff0c;可以很容易地集成到其他程序中。TinyXML-2解析一个XML文档&#xff0c;并从中构建一个 可以…

强化学习章节脉络

强化学习是在求解最优策略

Python爬虫:制作一个属于自己的IP代理模块

前言 在Python爬虫过程中&#xff0c;为了避免被网站的反爬虫机制干扰&#xff0c;我们需要使用IP代理。所谓IP代理&#xff0c;就是通过修改网络请求中的IP地址&#xff0c;来达到隐藏真实IP地址的效果。本文将教你如何制作一个自己的IP代理模块&#xff0c;让你的爬虫更加稳…

网络库OKHttp(1)流程

序、慢慢来才是最快的方法。 背景 OkHttp 是一套处理 HTTP 网络请求的依赖库&#xff0c;由 Square 公司设计研发并开源&#xff0c;目前可以在 Java 和 Kotlin 中使用。对于 Android App 来说&#xff0c;OkHttp 现在几乎已经占据了所有的网络请求操作。 OKHttp源码官网 版…

8.14 PowerBI系列之DAX函数专题-分析客户购买行为

需求 实现 其实如果同时输出订单号的情况下&#xff0c;可以通过订单号出现的次数判断同一订单中同时购买与否的关系。 同时购买了A和B的客户 var v_cust_1 calculatetable(values(客户表[客户姓名]),filter(订单表,订单表[产品编号] "off-pa-10001970")) var v…

2016款奔驰C200车COMAND显示屏黑屏

作者&#xff1a;中鑫之宝鹤壁店 赵玉宾 赵玉宾&#xff0c;从事汽车维修工作9年&#xff0c;现任中鑫之宝汽车服务有限公司鹤壁分公司高级维修技师。 故障现象 一辆2016款奔驰C200车&#xff0c;搭载274发动机&#xff0c;累计行驶里程约为7万km。车主反映&#xff0c;车辆行…

亚马逊、eBay,速卖通,国际站买家账号支付异常问题解决方法

如何解决下单被砍、封号问题&#xff0c;建议采取以下措施&#xff1a; 买家账号下单&#xff0c;不单纯只是解决支付卡、IP问题就可以了&#xff0c;因为平台大数据风控点很多&#xff0c; 我们防关联具体要解决几个问题 一&#xff1a;要硬件参数的关联、安全码、地区码、…

【定时开关机】windows 10 如何设置定时开关机

一、需求 二、场景 三、思路 四、实现 A. 设置来电开机 B. 设置及定时关机 一、需求 需要一台 win 10 的电脑在工作时间内自动开关机&#xff08;早 8:30 - 晚&#xff1a;6:05&#xff09; 二、场景 开机&#xff1a;早 8:30 关机&#xff1a;晚 6:05 三、思路 【开机…

github 终端克隆操作,以及对 https/ssh 的理解

前言 最近瞎搞 github 的一些配置&#xff0c;结果搞得有一段时间克隆不了仓库。不过经历了这次风波后&#xff0c;我对 github 的一些原理有了更清楚的了解。所以想稍微写一小篇文章总结输出一下&#xff0c;也欢迎有疑问的读者与博主进一步交流&#xff0c;我的理解还是有限…

2023年中国钢卷尺产量、销量、市场均价及市场规模分析[图]

卷尺是日常生活中常用的工量具&#xff0c;是家庭必备工具之一。鲁班尺、风水尺、文公尺同样属于钢卷尺。钢卷尺是建筑和装修常用工具。钢卷尺可分为&#xff0c;自卷式卷尺、制动式卷尺、摇卷式卷尺。钢卷尺的其他名称有&#xff1a;钢皮卷尺、钢盒尺。 钢卷尺市场已经告别了以…

什么是库存管理?无需Excel,2023年这几款大热库存管理软件你get了吗?

什么是库存管理&#xff1f;库存管理是什么意思&#xff1f;都有哪些好用的库存管理系统&#xff1f;相信这些都是大家非常关注的话题&#xff0c;这篇就跟大家详细唠唠什么是库存管理&#xff0c;都用什么系统可以进行库存管理&#xff0c;并且为大家盘点2023年这几款大热库存…

和硕首次参加展OCP 峰会,将发布多项AI合作项目产品 | 百能云芯

电子代工大厂和硕联合科技宣布&#xff0c;将参与今年的 OCP 全球峰会 (OCP Global Summit)&#xff0c;展示与英伟达 (NVIDIA) 合作成果&#xff0c;包含使用英伟达 GH200 Grace Hopper 超级芯片的 MGX AI 服务器&#xff0c;以及搭载 A100、L40 等服务器产品。 OCP 峰会于 10…

斯坦福JSKarel编程机器人使用介绍

斯坦福JSKarel编程机器人使用介绍 为了避免被编程语言固有的复杂性所困扰&#xff0c;有一个被称为卡雷尔&#xff08;Karel&#xff09;机器人的微型世界&#xff08;microworld&#xff09;的简化环境&#xff0c;可以让编程初学者从中学习理解编程的基本概念&#xff0c;而…

GaussDB for openGauss部署形态

前言 华为云数据库GaussDB是华为自主创新研发的分布式关系型数据库&#xff0c;具有高性能、高可用、高安全、低成本的特点&#xff0c;本文带你详细了解GaussDB数据库的部署形态。 1、GaussDB部署形态三种类型 GaussDB部署形态&#xff1a;单机 独立部署是将数据库组件部署…

10.17课上(七段显示器,递归异或与电路)

异或的递归与数电实现 用二选一选择器实现异或函数 在异或当中&#xff0c;如果有一项为0&#xff0c;就可以把那一项消掉&#xff1b;如果有一项为1&#xff0c;就是把剩下的所有项运算完的结果取反 &#xff08;由此在算法当中可以采用递归解决&#xff09; 当w1为0时&…

电脑蓝牙与ESP32蓝牙连接,让电脑发现ESP32

win11蓝牙默认只查看常见蓝牙设备。ESP32创建的蓝牙很有可能是看不到的。 再蓝牙设备发现一栏选择高级&#xff0c;才能查看所有蓝牙设备。 只要下面几行代码&#xff0c;就能让PC发现ESP32 #include <BLEDevice.h> // 引入相关库void setup() {BLEDevice::init("…

使用 PDB Alignment Tool 对 PDB 中多个蛋白结构进行比对

0. 说明&#xff1a; 利用 PDB 提供的在线工具 PDB Alignment Tool (https://www.rcsb.org/alignment) 对 PDB 中多个蛋白进行结构比对&#xff0c;并将比对结果输出&#xff0c;用于后续计算不同链上氨基酸之间的距离。 1. 步骤&#xff08;以 3GBM_A, 3FKU_A 和 2FK0_A 为例…

Linux学习——进程状态

目录 一&#xff0c;进程状态 1&#xff0c;进程状态的分类 2.状态的本质 3.进程状态详解 1.运行状态 2.阻塞状态 3.挂起状态 4.Linux内核中的状态分类 一&#xff0c;进程状态 1&#xff0c;进程状态的分类 如下图&#xff1a; 在计算机中我们的状态的分类便如下图所示…