高通Camera 驱动调试要点(一)

2023-05-16

本文主要介绍QCOM camera调试的重要参数;


(1)Lane_assign 和lane_mask

  现在摄像头基本都是mipi接口类型,因为前后摄都对应到平台这边不同的mipi接口,相应的数据lane需要一一对应;

  lane assign:

这里写图片描述

  lane_mask:

这里写图片描述

比如:

101       <LaneMask>0x1F</LaneMask>                                                                                                                    
102       <LaneAssign>0x4320</LaneAssign>

  0x1F:只有0~4表示有效,对应bit位置为1表示该位的lane或者clock有效,0x1F即表示该mipi接口上的4条data线和clk线都有效;
  0x4320:表示sensor这边几条data线对应到平台这边mipi接口的第几路接口端口映射;bit0~3表示lane0对应平台这边mipi的第0接口,bit12~15表示lane 3对应平台这边mipi的第4接口,那第1个接口就是为时钟clk对接的;


(2)combo_mode

  如该平台这边只有一个mipi phy设备,有时候就需要前后摄共用这个phy,此时combo_mode就要设为1,或者在双摄的情况下:主副摄会与前摄共用,这个值也会设为1,下面是两个camera分配情况:

这里写图片描述

  比如只有一个PHY interface 的msm8909平台就可以这样配置:

//前摄配置

151 static struct csi_lane_params_t csi_lane_params = {
152   .csi_lane_assign = 0x004,
153   .csi_lane_mask = 0x18,
154   .csi_if = 1, // not used
155   .csid_core = {0},
156   .csi_phy_sel = 0,
157 };

432   .csiphy_params = {
433     .lane_cnt = 1,
434     .settle_cnt = 0x1b,//0x1b,                                                                                                                                     
436     .combo_mode = 1,
438   },

//后摄配置

198 static struct csi_lane_params_t csi_lane_params = {
199   .csi_lane_assign = 0x4320,
200   .csi_lane_mask = 0x7,
201   .csi_if = 1, // not used
202   .csid_core = {0},
203   .csi_phy_sel = 0,
204 };

334   .csiphy_params = {
335     .lane_cnt = 2,                                                                                                                                  
336     .settle_cnt = 0x18,
338     .combo_mode = 1,
340   },


(3)pixel_clk

  像素时钟(pixel clk): 是经过主时钟MCLK(EXTCLK) 经过PLL得到的,决定了该sensor突出数据的速度;相关PLL设定需要查看sensor 寄存器的data sheet,以s5k2ya为例:

这里写图片描述

  如下为一个sensor的clk相关的配置:

static struct sensor_lib_out_info_t sensor_out_info[] = {
{
/* full size @ 24 fps*/
.x_output = 4208, 
.y_output = 3120,
.line_length_pclk = 4572,
.frame_length_lines = 3142,
.vt_pixel_clk = 360000000,
.op_pixel_clk = 360000000,
.binning_factor = 1,
.max_fps = 24.01,
.min_fps = 7.5,
.mode = SENSOR_DEFAULT_MODE,
},

  vt_pixel_clk(video timing clk value) – Virtual clock value used for calculating shutter time,and used by AEC for correcting banding artifacts
vt_pixel_clk = line_length_pclk * frame_length_lines * frame rate

  平台根据写入不同的曝光行来控制帧率,比如在暗处希望牺牲一点帧率,让Gain值更高,就用这个公式来计算,最后计算的 frame_length_lines 写入相应寄存器;

  注意一点的是不同的平台需要一个最小的blanking time,所以frame_length_lines是要大于真是有效数据行y_output,而且差值一般16对齐;

这里写图片描述

  op_pixel_clk – Represents how much data comes out of the camera over MIPI lanes to set the VFE clock op_pixel_clk = (total data rate from sensor)/bits-per-pixel

if the MIPI DDR clock value (speed of the clock lane of the MIPI camera
sensor) is 300 MHz, and the sensor transmits on 4 lanes, each lane has a 600 MHz data rate.Thus, the total data rate is 2400 MHz. For 10 bits per pixel Bayer data, this translates to the op_pixel_clk value of 2400/10 = 240 MHz. These values must be filled in accordance with the sensor specifications.

  这个时钟决定了sensor mipi data lane 吐出数据的带宽;不同的平台的处理能力不一样,所以这个值不能超过平台规范定义的值;

这里写图片描述


(4)settle_cnt

  settle_cnt(即稳定计数)–表示mipi开始切换到高速模式的一个稳定时间,必须根据传感器输出特性配置该值,以确保传感器的 PHY 发送器与 MSM 的 PHY 接收器无障碍同步;

  settle_cnt – For CSI_Tx (the sensor) and CRI_Rx (the device) to work properly, a period for syncing between them is required. This time is set here as number of timer clock ticks. It has to be between the MIN and MAX values calculated by the formulas:

MIN [Settle count * T(Timer clock)] > T(HS_SETTLE)_MIN
MAX [Settle count * T(Timer clock)] < T(HS-PREPARE)+T(HS_ZERO) - 4*T(Timer clock)

  settle_cnt(即稳定计数)– 必须根据sensor传感器输出特性配置该值,以确保传感器的 PHY 发送器与 MSM 的 PHY 接收器无障碍同步;对于 28 nm 以及更小的 MSM 芯片,使用以下公式计算稳定计数:

settle_cnt = T(HS_SETTLE)_avg /T(TIMER_CLK),

  其中 T(HS_SETTLE)_avg = (T(HS_SETTLE)_min + T(HS_SETTLE)_max) / 2,如传感器数据表所指示:

这里写图片描述

这里写图片描述

  其中 T(HS_SETTLE)_avg = (T(HS_SETTLE)_min + T(HS_SETTLE)_max) / 2,如传感器数据表所指示。

  TIMER_CLK 指摄像头传感器所连接的 PHY 接口的工作频率。(例如,PHY0 的CAMSS_PHY0_CSI0PHYTIMER_CLK)。该值在 kernel/arch/arm/boot/dts/msm/
msmXXXX-camera.dtsi 文件中设置,其中 XXXX 指正在使用 MSM 芯片组。另
外,也可在摄像头数据流传输期间确认,方法是通过 adb shell 检查相应的时钟信
息。例如,可通过命令提示窗口发出以下命令以确认 PHY0 定时器时钟值:

adb root
adb remount
adb shell
cd /sys/kernel/debug/clk/gcc_camss_csi0phytimer_clk
cat measure
200000146

  对于 45 nm MSM 芯片,使用与 28 nm MSM 芯片相似的公式,其中的 T(TIMER_CLK)替换为 T(DDR_CLK)。

  – DDR_CLK 指摄像头传感器的 MIPI CLK 通道的工作频率,该值由通过传感器摄像头驱动程序设置的摄像头传感器 PLL 配置确定。
  – T(DDR_CLK) 为工作频率等于 DDR_CLK 时的时钟周期持续时间,以纳秒为单位表示。例如,DDR_CLK 200 MHz 的 T(DDR_CLK) 为 (1 * (10^9)) / (200 * (10^6)) =5 ns。

  有关 T(HS_SETTLE) 的定义,可参见针对 D-PHY(版本 1.1)的 MIPI(R)联盟规范。为了防止上述系数在传感器工作时所处的不同数据流传输模式间发生变化,必须为摄像头传感器驱动程序中每个唯一的数据流传输模式单独配置 settle_cnt。


(5)Binning Mode

  Camera Binning Mode:像素合并模式,将相邻的像素单元电荷通过物理的方法叠加在一起作为一个像素输出信号;

 935         .binning_factor = 1,                                                                                                                      
 936         .binning_method = 0,

这里写图片描述

  水平方向Binning: 同列相邻行的电荷叠加;
  垂直方向Binning: 同行相邻列的电荷叠加;

  Binning Mode 优势:增加感光面积,提高暗处对光感应的灵敏度;应用:增加物理感光像素单元,采用像素合并模式,提升暗处对光感应的灵敏度;
  Binning Mode 劣势:降低输出分辨率;

额外补充:

  sensor 开窗的不同模式:ROI, BIN,SKIP;

  1. ROI :Region of interes在相机传感器分辨范围内定义一个或多个感兴趣的窗口区域,仅对这些窗口内的图像信息进行读出,只获取该局部区域的图像;
  2. BIN :这种模式就是按照一定的规律,把想要的数据采集上来,把其余的数据扔掉;
  3. SKIP:就是把相邻的像素合成一个像素,然后再输出。


(6)I2C CLK

  The available I2C frequency modes are defined in kernel/include/media/msm_cam_sensor.h:standard (100 kHz), fast (400 kHz), and Custom mode.

enum i2c_freq_mode_t {
I2C_STANDARD_MODE,
I2C_FAST_MODE,
I2C_CUSTOM_MODE,
I2C_MAX_MODES,
};

  高通平台上两条Camera I2C设备总线是专门为Camera用的,配置不同的i2c频率的参数值定义在dtsi里面;

479 &i2c_freq_100Khz {
480     qcom,hw-thigh = <78>;
481     qcom,hw-tlow = <114>;
482     qcom,hw-tsu-sto = <28>;
483     qcom,hw-tsu-sta = <28>;
484     qcom,hw-thd-dat = <10>;
485     qcom,hw-thd-sta = <77>;
486     qcom,hw-tbuf = <118>;
487     qcom,hw-scl-stretch-en = <0>;
488     qcom,hw-trdhld = <6>;
489     qcom,hw-tsp = <1>;
490 };

CCI clock = (src clock) / (hw_thigh + hw_tlow)  //src clock 19.2MHZ

解释如下:

  • qcom,hw-thigh : should contain high period of the SCL clock in terms of CCI
    clock cycle
  • qcom,hw-tlow : should contain high period of the SCL clock in terms of CCI
    clock cycle
  • qcom,hw-tsu-sto : should contain setup time for STOP condition
  • qcom,hw-tsu-sta : should contain setup time for Repeated START condition
  • qcom,hw-thd-dat : should contain hold time for the data
  • qcom,hw-thd-sta : should contain hold time for START condition
  • qcom,hw-tbuf : should contain free time between a STOP and a START condition
  • qcom,hw-scl-stretch-en : should contain enable or disable clock stretching
  • qcom,hw-trdhld : should contain internal hold time for SDA
  • qcom,hw-tsp : should contain filtering of glitches

i2c burst mode:

TODO

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

高通Camera 驱动调试要点(一) 的相关文章

  • 保存的图像方向错误

    我正在使用这段代码 https github com commonsguy cw advandroid blob master Camera Picture src com commonsware android picture Pictu
  • Three.js 在平面上旋转相机

    我的应用程序中有一个相机 camera new THREE PerspectiveCamera 75 window innerWidth window innerHeight 0 1 1000 camera position z 1 cam
  • iphone如何通过Xcode拍照后进入图片库

    大家好 我正在实施以下代码来通过我的应用程序拍照 UIApplication sharedApplication keyWindow setRootViewController picker picker sourceType UIImag
  • iOS 将照片保存在应用程序特定的相册中

    我正在创建一个 iOS 5 应用程序 我想将照片保存到设备中 我想将照片保存到我的应用程序特定的相册中 因此我需要创建相册 然后将照片保存到相册中 我知道如何创建相册 ALAssetsLibrary library ALAssetsLibr
  • Android:访问硬件相机预览帧数据而不绘制它们

    根据 Java SDK 端的 android 相机文档 必须为相机预览帧提供一个要绘制的 可见且活动的 表面 以便访问帧数据 我已经链接了我在这里遇到的一些内容 我是新人 所以最多有 2 个超链接 但是在最终在这里发布我自己的问题之前 我查
  • 调整生成的相机流的大小

    我试图让用户捕获图像并使用图像将其添加到屏幕上 然而 由于内存限制 我还需要将此图像的大小调整为大约一半大小 12x 5MP 图像在手机上永远不会很好 我正在正常启动相机任务 它调用 Completed 事件 但是 当我尝试使用 Decod
  • OpenCV 中的相机标定和鸟瞰投影

    我已经完成了相机校准 现在我想获得棋盘图片的鸟瞰图 如下所示 但结果很奇怪 看起来不是一个正方形 你可以看到图3 每个正方形都是7 95x7 95 有人知道为什么吗 gpsPoints 0 Point2f gpsPoints 1 Point
  • 如何使用摄像头直播作为活动背景?

    我正在尝试制作一个应用程序 其中我需要使用相机实时馈送作为背景 我知道这是一件愚蠢的事情 但无能为力 这是客户的要求 我尝试过使用SurfaceView但到目前为止还没有成功 到目前为止 我在 Stack Overflow 上发现的更多内容
  • 如何更改Vuforia AR相机对焦模式?

    我在用Vuforia 6 2 AR SDK对于在Unity中 但是当我在 Android 手机中测试该应用程序时 相机看起来像blurry 我在 Vuforia 的开发者网站中搜索并找到了一些相机对焦模式 但我无法实现 因为该指南适用于较旧
  • 从连接到计算机并在成像设备中列出的相机捕获图像

    我有一台佳能 EOS 1000D 当我将其连接到计算机时 它列在 控制面板 gt 成像设备 下 我想以编程方式拍照 我猜想成像设备中列出的所有设备都具有相同的接口 可能是 TWAIN 并且具有向它们发送命令的标准方法 TWAIN可以做到吗
  • AVLayerVideoGravityResize 在新设备、iOS 10 上不匹配?

    具有全屏实时预览功能的相机 previewLayer videoGravity AVLayerVideoGravityResize 制作图像 stillImageOutput captureStillImageAsynchronously
  • Android/iOS 上的相机远程快门如何工作?

    我最近在 Android iOS 上遇到了一个使用蓝牙的内置相机应用程序的远程快门 这是我找到的产品的示例链接 Link http www youtube com watch v cyVG76HDvh4 不是来打广告的 只是简单了解背后的技
  • 在无头模式下独立运行 Unity,同时捕获屏幕截图

    我需要创建一个在无头模式下运行的统一项目 使用 batchmode 命令 但它必须捕获屏幕截图 例如每一秒并将它们写到一个文件中 我知道在无头模式下 您需要强制调用 Camera Render 才能渲染任何内容 在捕获第一个屏幕截图后 时间
  • 相机 java.lang.RuntimeException:setParameters 失败

    我使用创建了一个自定义相机应用程序this https github com davidgatti dgCam源代码 但在少数设备上 例如高分辨率设备 我得到 RuntimeException setParameters failed 我面
  • PWA 可以访问联系人、GPS 或使用手机摄像头吗?

    PWA 可以访问联系人 GPS 或使用手机摄像头吗 这在任何系统 ios android 中都可能吗 是否有任何开发计划来实现这些功能 PWA 无法克服一些限制 you cannot访问电话上的联系人列表 另一方面 你can拍照并使用 GP
  • 相机预览的有效模糊

    到目前为止我尝试过的 将每一帧转换为位图 然后用library https github com wasabeef Blurry并将其放入ImageView这是在相机预览前 显然太慢了 就像1 fps 然后我开始使用渲染脚本这会模糊每一帧
  • java.lang.RuntimeException:release()后调用的方法

    If i am 不使用 相机 release in 表面被破坏 then 无法从另一个 Activity 再次启动 CameraActivity 简而言之 得到不幸的是应用程序已停止 错误 即使不释放相机 但如果我确实点击了 主页 按钮 来
  • iPhone AVFoundation 相机方向

    我一直在绞尽脑汁地试图让 AVFoundation 相机以正确的方向 即设备方向 捕获图片 但我无法让它工作 我看过教程 看过 WWDC 演示 还下载了 WWDC 示例程序 但即使这样也没有成功 我的应用程序的代码是 AVCaptureCo
  • 如何在 Ionic 3 中调整图像大小而不降低质量和目标宽度和高度?

    我想减小相机 API 拍摄的图像的大小 但质量降低不好 最好的办法是降低分辨率 但我不想对所有图像使用目标宽度和高度 例如 我希望图像宽度为 1280 图像高度按其比例自动变化 但在 API 中我应该使用精确的宽度和高度 如何通过图像比例更
  • cameraOverlayView 防止使用 allowedEditing 进行编辑

    在我的应用程序中 使用以下行在拍摄照片后对其进行编辑 移动和缩放 效果很好 imagePicker setAllowsEditing YES 但如果我还使用cameraOverlayView 则编辑模式将不再起作用 屏幕出现 但平移和捏合手

随机推荐

  • 变量命名规范

    本文转载于https blog csdn net ZCF1002797280 article details 51495229 是我见过的描述最精炼 最好懂的命名文档 xff0c 故收藏转载推荐 1 驼峰命名法 1 1 小驼峰法 除第一个单
  • C++实现websocket服务器握手协议(使用Qt)

    前提 xff1a 笔者在开发server程序时 xff0c 要求websocket与server连接 websocket的机制是在第一次连接时进行握手协议 xff0c 协议通过 xff0c 才可以进行正常的通信 xff0c 否则websoc
  • 00011__ARM和STM32的区别

    https blog csdn net qq 34385566 article details 79668280
  • linux中查看系统资源占用情况的命令

    size 61 large top size 主要参数 d xff1a 指定更新的间隔 xff0c 以秒计算 q xff1a 没有任何延迟的更新 如果使用者有超级用户 xff0c 则top命令将会以最高的优先序执行 c xff1a 显示进程
  • 关于PendSV异常和SVC异常

    这里先说什么是异常 xff0c 什么是中断 xff1f 请下这张图 颜色加深的表项为异常 xff0c 这些属于cm3内核自带的 其中 3 xff0c 2 xff0c 1异常的优先级固定 xff0c 是不可更改的 xff0c 其余的异常中断优
  • FreeRTOS学习4-任务创建和删除

    关于任务创建有3个函数 1 动态创建一个任务 可以自动分配任务堆栈和TCB FreeRTOSConfig h中 xff0c 需要定义 define configSUPPORT DYNAMIC ALLOCATION 1 支持动态内存申请 Ba
  • java里 equals和== 区别

    1 java中equals和 61 61 的区别 值类型是存储在内存中的堆栈 xff08 简称栈 xff09 xff0c 而引用类型的变量在栈中仅仅是存储引用类型变量的地址 xff0c 而其本身则存储在堆中 2 61 61 操作比较的是两个
  • VRPTW建模与求解—基于粒子群算法

    VRPTW建模与求解 基于粒子群算法 1 VRPTW简要描述 VRPTW xff08 Vehicle Routing Problem with Time Windows xff09 是指在经典VRP的前提上 xff0c 给每个客户增添时间窗
  • 伽马分布,指数分布,泊松分布的关系 -转自简书

    原文链接 xff1a https www jianshu com p 6ee90ba47b4a 伽马分布 xff0c 指数分布 xff0c 泊松分布的关系 thinkando 关注 2018 09 25 21 13 字数 714 阅读 29
  • 双轴驱动步进电机云台二自由度单片机控制程序PTU57

    高精度云台由两个电机驱动 xff0c 可控制方位角和高度角 xff0c 具有两自由度的机械电子设备 可用于机器视觉 摄影摄像 监控安防 天文观测 雷达扫描 DIY雕刻机 转盘转台 智能机械手臂 双轴跟踪太阳能定日镜等各类应用高精度云台的场合
  • php使用curl获取需要认证的https请求

    lt php php使用curl获取需要认证的https请求的方法 url 61 34 XXXXXX 34 arr header 61 34 Accept application json 34 arr header 61 34 Autho
  • i-vector本质剖析

    1 i vector的由来 基于因子分析理论 xff0c 句子h的超向量可以描述成 其中为ubm模型的均值超向量 xff0c 即为i vector 2 i vector的计算 2 1 T矩阵的估计 为句子h的观察特征 xff0c 可以对应于
  • C++程序设计基础实验-实验七 多态性

    实验七多态性 一 实验目的 掌握运算符重载的方法 xff1b 掌握使用虚函数的继承实现动态多态性 掌握纯虚函数及抽象类的使用 二 实验内容 设计复数类Complex xff08 请参照教材例题8 1的设计 xff09 xff0c 实现运算符
  • g2o_a_general_framework_for_graph_optimaization

    g2o A General Framework for Graph Optimization NONLINEAR GRAPH OPTIMIZATION USING LEAST SQUARES 机器人和计算机视觉中的许多问题都可以用下列方程的
  • P5644 [PKUWC2018]猎人杀

    P5644 PKUWC2018 猎人杀 题目大意 一开始有 n n n 个猎人 xff0c 第 i i i 个猎人有仇恨度
  • 【Linux基础系列之】platform虚拟总线

    linux当中大多数的设备都是以paltform虚拟总线挂载上去的 xff0c 这里以kernel drivers net dm9000 c为例子分析一下 xff0c platform设备挂在过程 xff1b xff08 1 xff09 d
  • ARMv8-AArch64简述

    ARMv8是ARM版本升级以来最大的一次改变 xff0c ARMv8的架构继承以往ARMv7与之前处理器技术的基础 xff0c 除了现有的16 32bit的Thumb2指令支持外 xff0c 也向前兼容现有的A32 ARM 32bit 指令
  • ARMv8-AArch64寄存器和指令集

    xff08 一 xff09 简述 AArch拥有31个通用寄存器 xff0c 系统运行在64位状态下的时候名字叫Xn xff0c 运行在32位的时候就叫Wn xff1b AArch32与AArch64寄存器对应关系 xff1a xff08
  • ION框架学习(一)

    第一章介绍 xff1a ION的框架和buffer的分配 xff1b 第二章介绍 xff1a 如何使用ION buffer xff1b ION是google在Android4 0 为了解决内存碎片管理而引入的通用内存管理器 用来支持不同的内
  • 高通Camera 驱动调试要点(一)

    本文主要介绍QCOM camera调试的重要参数 xff1b xff08 1 xff09 Lane assign 和lane mask 现在摄像头基本都是mipi接口类型 xff0c 因为前后摄都对应到平台这边不同的mipi接口 xff0c