【Camera Sensor Driver笔记】三、点亮指南之Sensor DTS

== camera sensor 接口配置
xxsensor.cpp  -> xxxsensor.so

CalculateExposure 函数
    pCalculateExposure函数

        (平台)输入参数:
        pCalculateExposureData
            realgain :total gain,ae算法传过来的值或者手动曝光的值
            linecount:经过平台已经转换过的曝光时间
            middlerealgain
            middlelinecount
            shortrealgain
            shortlinecount
             ::作用于shdr
            sensorResolutionIndex
            ...

        输出参数:
        pExposureInfo
            analogRealGain:sensor的模拟gain
            analogRegisterGain:sensor的模拟gain对应的寄存器的值
            digitalRealGain:sensor的数字gain
            digitalRegisterGain:sensor的数字gain对应的寄存器的值
            ISPDigitalGain isp的数字gain
            ...

        
        LineCount = ExposureTime / Tline
        
        
        Tline = HTS * 1 / vt_clk , lineLengthPixelClock(一行要处理多少个pixel) * 1 / VTPixelClock(处理一个pixel的时间)
        
        
        vt_clk = VTS * HTS * FPS, frameLengthLines * lineLengthPixelClock * FPS
        
        
        Tline  = 1 / (VTS * FPS),1/ (frameLengthLines * FPS)
        

FillExposureSettings 函数
    pFillExposureSettings函数

        输入参数:
        pExposureData
            曝光寄存器信息
            analogRealGain:sensor的模拟gain
            digitalRealGain:sensor的数字gain
            ...

        输出参数:
        pRegSettingsInfo
            regSettingCount:sensor的寄存器数量
            regSetting[]:sensor的寄存器数组
            

== Camera Sensor KMD DTS 配置


什么是DTS:DTS是一种用于描述硬件信息的数据结构和语言,它是树状结构的。


bengal-camera-sensor-qrd.dtsi
    camera模组相关硬件描述(sensor,eeprom,actuator,flash,etc)
bengal-camera.dtsi
    平台相关camera硬件描述(ife,ipe,csiphy,csid,cci,etc)


soc 节点(flash,cam-res-mgr)
    &soc {
        led_flash_rear: qcom,camera-flash@0 {
            cell-index = <0>;                          //唯一标号  flash固定标号
            compatible = "qcom,camera-flash";       //和driver匹配,匹配后调驱动probe
                ::struct of_device_id cam_flash_dt_match[] = {
                ::   .compatible = "qcom,camera-flash"
                ::}
            
            flash-source  = <&pmi632_flash0 &pmi632_flash1>;     //引用flash节点,由BSP实现
            torch-source  = <&pmi632_torch0 &pmi632_torch1>;    //引用torch节点,由BSP实现
            switch-source = <&pmi632_switch0 &pmi632_switch1>;     //引用switch节点
            status = "ok"; //ok or disable
        };
        ,,,

        qcom,cam-res-mgr {    //管理GPIO资源,封装kernel API 接口
            compatible = "qcom,cam-res-mgr"; //和driver匹配,probe
            status = "ok"; //ok or disable
        };
    };

cam_cci 节点
actuator
&cam_cci0 {     //平台cci0 控制器
    actuator_rear: qcom,actuator0 {    
        cell-index = <0>;   //唯一标号
        compatible = "qcom,actuator";      //和driver匹配,匹配后调驱动probe
        cci-master = <0>;                 //cci index
        cam_vaf-supply = <&L5P>;        //电源引用节点,由BSP实现
        regulator-names = "cam_vaf";       //电源名称
        rgltr-cntrl-support;             //regulator 精确控制使能
        rgltr-min-voltage = <2800000>;     //最小电压值,单位µV
        rgltr-max-voltage = <2800000>;    //最大电压值,单位µV
        rgltr-load-current = <100000>;     //电流,单位µA
        status = "ok";
    };

    actuator_rear_aux: qcom,actuator1 {
        cell-index = <1>;
        compatible = "qcom,actuator";
        cci-master = <1>;
        cam_vaf-supply = <&L5P>;
        regulator-names = "cam_vaf";
        rgltr-cntrl-support;
        rgltr-min-voltage = <2800000>;
        rgltr-max-voltage = <2800000>;
        rgltr-load-current = <100000>;
        status = "ok";
    };

sensor
    qcom,cam-sensor0 {
        cell-index = <0>;                     //唯一标号slot id ,和 module xml id唯一匹配
        compatible = "qcom,cam-sensor";      //和driver匹配,匹配后调驱动probe
        csiphy-sd-index = <0>;                 //csiphy id, 绑定csiphy,这个sensor用的哪个phy
        sensor-position-roll = <270>;      //会被xml配置覆盖
        sensor-position-pitch = <0>;       
        sensor-position-yaw = <180>;
        actuator-src = <&actuator_rear>;    //绑定actuator节点
        led-flash-src = <&led_flash_rear>;  //绑定flash节点
        eeprom-src = <&eeprom_rear>;      //绑定eeprom节点
        cam_vio-supply = <&L7P>;         //引用IOvdd 节点,由BSP具体实现
        cam_vana-supply = <&L4P>;        //引用Avdd 节点,由BSP具体实现
        cam_vdig-supply = <&L2P>;         //引用Dvdd 节点,由BSP具体实现
        cam_vaf-supply = <&L5P>;          //引用AFvdd 节点,由BSP具体实现
        cam_clk-supply = <&gcc_camss_top_gdsc>; //引用gdsc 时钟,由BSP实现
        regulator-names = "cam_vio", "cam_vana", "cam_vdig",
            "cam_clk", "cam_vaf";            //和上面的cam_ 没有顺序关系
                                            //和下面的rgltr-  有顺序关系
        rgltr-cntrl-support;                //regulator 精确控制使能
        rgltr-min-voltage = <1800000 2800000 1050000 0 2800000>;
        rgltr-max-voltage = <1800000 2800000 1050000 0 2800000>;
        rgltr-load-current = <120000 80000 1200000 0 100000>;
        
        gpio-no-mux = <0>;  //gpio复用
        pinctrl-names = "cam_default", "cam_suspend";   //active, deactive
        pinctrl-0 = <&cam_sensor_mclk0_active
                     &cam_sensor_rear0_reset_active>;  //active  0对应 cam_default
                
        pinctrl-1 = <&cam_sensor_mclk0_suspend
                     &cam_sensor_rear0_reset_suspend>; //deactive  1对应cam_suspend
                
        gpios = <&tlmm 20 0>,  // 平台tlmm pin 20 作为mclk 默认输出低电平
                <&tlmm 18 0>;  // 平台tlmm pin 18 作为reset 默认输出低电平
            
        gpio-reset = <1>;       //指定上面哪一个作为GPIO RESET使用
        gpio-req-tbl-num = <0 1>;    // GPIO 数组index
        gpio-req-tbl-flags = <1 0>;  //GPIO direction, 0:输出,1:输入; mclk作为输入,gpio作为输出
        
        gpio-req-tbl-label = "CAMIF_MCLK0",
                            "CAM_RESET0";
        cci-master = <0>;     //cci总线
        clocks = <&gcc GCC_CAMSS_MCLK0_CLK>;  //引用MCLK节点,由BSP提供具体实现
        clock-names = "cam_clk";   //MCLK时钟名称
        clock-cntl-level = "turbo";   
        clock-rates = <19200000>;  //MCLK时钟频率,19.2M or 24M
        status = "ok";
    };

EEPROM
    eeprom_triple_rear_macro: qcom,eeprom@4 {
        cell-index = <4>;
        compatible = "qcom,eeprom";
        reg = <0x4>;
        cam_vio-supply = <&L6P>;
        cam_vana-supply = <&L4P>;
        cam_clk-supply = <&cam_cc_titan_top_gdsc>;
        regulator-names = "cam_vio", "cam_vana", "cam_clk";
        cci-device = <0>;
        cci-master = <0>;
        qcom,cam-sensor@4 {
            cell-index = <4>;
            compatible = "qcom,cam-sensor";
            reg = <0x4>;
            cam_vio-supply = <&L6P>;
            cam_vana-supply = <&L4P>;
            cam_clk-supply = <&cam_cc_titan_top_gdsc>;
            regulator-names = "cam_vio", "cam_vana", "cam_clk";
            sensor-mode = <0>;
            cci-device = <0>;
            cci-master = <0>;
        }
    }

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

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

相关文章

Python的round与Excel的round不一样?

Python四舍五入怎么做 round()奇进偶舍round函数既不是“四舍五入”的原则&#xff0c;也不是“四舍六入无成双”的原则。 decimal round() 偶然发现python的round函数和excel的round函数对某些数据的处理结果不一致。有看到博主提到是奇进偶舍的方法&#xff0c;但经过验证和…

【QT教程】QT6 Quick与QML

QT6Quick与QML 使用AI技术辅助生成 QT界面美化视频课程 QT性能优化视频课程 QT原理与源码分析视频课程 QT QML C扩展开发视频课程 免费QT视频课程 您可以看免费1000个QT技术视频 免费QT视频课程 QT统计图和QT数据可视化视频免费看 免费QT视频课程 QT性能优化视频免费看 免费Q…

49-PCIE转网口电路设计

视频链接 PCIE转网口电路设计01_哔哩哔哩_bilibili PCIe转网口电路设计 1、PCIE转网口电路设计基本介绍 pcie转网口的设计&#xff0c;一般有intel (i350)和网讯&#xff08;wx1860&#xff09;两种方案。 2、PCIE转网口的方案 2.1、I350 2.2、WX1860 (网迅) 国产化&#…

linux C -- 消息队列

linux C -- 消息队列 前言一、System V(IPC)消息队列接口调用主要涉及到 msgget、msgsnd、msgrcv 和 msgctl 四个接口&#xff1a; 1、创建消息队列 msgget2、发送消息到队列3、从队列接收信息4、控制消息队列 msgctl5、删除消息队列 二、代码编写1、发送部分的代码2、代码完成…

BYOL(NeurIPS 2020)原理解读

paper&#xff1a;Bootstrap your own latent: A new approach to self-supervised Learning third-party implementation&#xff1a;https://github.com/open-mmlab/mmpretrain/blob/main/mmpretrain/models/selfsup/byol.py 本文的创新点 本文提出了一种新的自监督学习方…

获取会话公钥

----------------------------------------------------举例 签到 接口开始--------------------------------------------------- 第一步&#xff1a;-----请求报文明文:{"body":{},"head":{"ywId":"GY0001"}} ODxdq2/WhHlCKoLIGNV2j…

uniapp picker 多列选择器用法

uniapp picker 多列选择器联动筛选器交互处理方法&#xff0c; uniapp 多列选择器 mode"multiSelector" 数据及筛选联动交互处理&#xff0c; 通过接口获取数据&#xff0c;根据用户选择当前列选项设置子列数据&#xff0c;实现三级联动效果&#xff0c; 本示例中处…

SEW减速机参数查询 2-2 实践

首先说说结论&#xff1a;在不和SEW官方取得沟通之前&#xff0c;你几乎无法直接通过查阅SEW官方文档得到相关减速机的所有技术参数&#xff1a;比如轴的模数和齿数&#xff0c;轴承的参数。我在周一耗费了一个上午&#xff0c;最终和SEW方面确认后才知晓相关技术参数需要凭借销…

Jenkins的安装和部署

文章目录 概述Jenkins部署项目的流程jenkins的安装启动创建容器进入容器浏览器访问8085端口 Jenkins创建项目创建example项目 概述 Jenkins&#xff1a;是一个开源的、提供友好操作界面的持续集成&#xff08;CLI&#xff09;工具&#xff0c;主要用于持续、自动构建的一些定时…

什么是Rust语言?探索安全系统编程的未来

&#x1f680; 什么是Rust语言&#xff1f;探索安全系统编程的未来 文章目录 &#x1f680; 什么是Rust语言&#xff1f;探索安全系统编程的未来摘要引言正文&#x1f4d8; Rust语言简介&#x1f31f; 发展历程&#x1f3af; Rust的技术意义和优势&#x1f4e6; Rust解决的问题…

GlobalRouting - FastRoute代码框架和功能(三)

文章目录 一、 顶层代码框架和功能(一)、总结(二)、各文件代码的概述&#xff1a;1. FastRoute\\src\\Box.h2. FastRoute\\src\\Coordinate.h3. FastRoute\\src\\DBWrapper.h4. FastRoute\\src\\FastRouteKernel.h5. FastRoute\\src\\Grid.h成员变量成员函数 6. FastRoute\\src…

python零基础入门 (9)-- 模块与包

文章目录 前言1. 什么是模块&#xff1f;1.1 模块的定义和作用1.2 内置模块和第三方模块 2. 如何使用模块&#xff1f;2.1 导入模块2.2 使用模块中的函数和变量 3. 什么是包&#xff1f;3.1 包的定义和作用3.2 包的结构和组织方式 4. 如何创建自定义模块&#xff1f;4.1 创建一…

Conmi的正确答案——ESP32获取MAC地址

ESP-IDF版本&#xff1a;v5.2.1 ESP32芯片型号&#xff1a;ESP32C3&#xff08;4M flash版本&#xff09; ESP支持的MAC地址有&#xff1a; typedef enum {ESP_MAC_WIFI_STA, /**< MAC for WiFi Station (6 bytes) */ESP_MAC_WIFI_SOFTAP, /**< MAC for WiFi Sof…

电商技术揭秘三十:知识产权保护浅析

电商技术揭秘相关系列文章&#xff08;上&#xff09; 相关系列文章&#xff08;中&#xff09; 电商技术揭秘二十&#xff1a;能化供应链管理 电商技术揭秘二十一:智能仓储与物流优化(上) 电商技术揭秘二十二:智能仓储与物流优化(下) 电商技术揭秘二十三&#xff1a;智能…

REACT+PHP课程项目血泪史

PHP php??老师让用php写后端。什么&#xff1f;写惯了java、python。这个看起来像html标签语言的东西写后端是个什么鬼&#xff0c;看起来想落后几千年的原始语言&#xff08;手动滑稽&#xff09;。 大概介绍一下&#xff0c;php主要是后端语言&#xff0c;用来连接数据库…

Day17-Java基础之综合案例

练习一&#xff1a;飞机票 需求: 机票价格按照淡季旺季、头等舱和经济舱收费、输入机票原价、月份和头等舱或经济舱。 按照如下规则计算机票价格&#xff1a;旺季&#xff08;5-10月&#xff09;头等舱9折&#xff0c;经济舱8.5折&#xff0c;淡季&#xff08;11月到来年4月…

deepinV23 Beta3安装cuda

文章目录 下载CUDA安装,以cuda11.6为例运行.run文件安装选项配置环境变量查看cuda版本重启计算机 卸载cuda deepinV23 Beta3对应的debian版本是12&#xff1a; bookworm指的是debian12&#xff0c; sid代表不稳定版。 下载CUDA 官网&#xff1a;https://developer.nvidia.com…

你为什么会成为一名程序员?

在当今数字化时代&#xff0c;程序员这一职业越来越受到人们的关注和追捧。许多人选择成为一名程序员&#xff0c;不仅是因为这个职业的前景广阔&#xff0c;还因为他们对编程和技术的兴趣。那么&#xff0c;选择成为一名程序员的原因究竟是出于兴趣还是职业发展呢&#xff1f;…

中华环保联合会获得国家“绿色制造体系” 第三方评价机构资格

近日&#xff0c;中华环保联合会成功获得工业和信息化部“绿色制造体系”第三方评价机构资格&#xff0c;可为企业、园区及相关机构提供全面的绿色制造体系评价服务&#xff0c;包括绿色工厂、绿色园区、绿色供应链等方面。 “绿色制造体系建设”是由工业和信息化部负责统筹推进…

Python3中的时间应用 (代码)

直接上python3代码 # 对时间类型的转换 from datetime import datetime import localelocale.setlocale(locale.LC_CTYPE, "chinese")# 字符串 -> datetime类型 text "2024年-4月-1日" res datetime.strptime(text, "%Y年-%m月-%d日") pr…