我是靠谱客的博主 悲凉蜗牛,最近开发中收集的这篇文章主要介绍camera 驱动 关于mipi的一些计算,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

static struct sensor_lib_out_info_t sensor_out_info[] = {
    /*RES 0*/
  {
    .x_output = 3264,
    .y_output = 2448,
    .line_length_pclk = 1932,
    .frame_length_lines = 2482,
    .vt_pixel_clk = 144000000,
    .op_pixel_clk = 254400000,
    .binning_factor = 1,
    .max_fps = 30.0,
    .min_fps = 7.5,
    .mode = SENSOR_DEFAULT_MODE,
  },
    /* RES 1*/
  {
    .x_output = 640,
    .y_output = 480,
    .line_length_pclk = 1932,
    .frame_length_lines = 7446,
    .vt_pixel_clk = 144000000,
    .op_pixel_clk = 254400000,
    .binning_factor = 1,
    .max_fps = 10.0,
    .min_fps = 7.5,
    .mode = SENSOR_HFR_MODE,
  },
  /* RES 2*/
  {
    .x_output = 1632,
    .y_output = 1224,
    .line_length_pclk = 1932,
    .frame_length_lines = 2482,
    .vt_pixel_clk = 144000000,
    .op_pixel_clk = 254400000,
    .binning_factor = 1,
    .max_fps = 30.0,
    .min_fps = 7.5,
    .mode = SENSOR_DEFAULT_MODE,
  }

};

高通camera 驱动里面的数组sensor_out_info,一共有3组size。分别是RES0 RES1 RES2

    .x_output = 3264,   这里的x和y是sensor实际输出的宽和高
    .y_output = 2448,
    .line_length_pclk = 1932,
    .frame_length_lines = 2482,
    .vt_pixel_clk = 144000000,
    .op_pixel_clk = 254400000,  这个的解释是VFE 时钟,表示每秒 VFE 处理的数据量(in pixel),就是一个表示处理数据快慢的单位,如果是全尺寸的话,那么就要配置的大一些。如果是小尺寸的话,就没必要配置很大。
    .binning_factor = 1,
    .max_fps = 30.0,
    .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对齐;

è¿éåå¾çæè¿°

 

三星sensor 参数计算

lineLengthPixelClock: 你去对应的setting中找下0342 寄存器,看下它后面写的值是多少,然后转化成十进制就可以了。比如我发给你的文件里面搜索到:0342 13A0, 你就把13A0 转换成十进制5024 就可以了。

frameLengthLines: 这个值对应的寄存器是0340 寄存器, 跟上面的方式一样。

minhorizontalBlanking: 这个值是用lineLengthPixelClock - output_width, Output_width就是输出的一行的大小,比如现在你的是4000x3000, 那40000就是output_width.

minVerticalBlanking: 这个值是用frameLengthPixelClock - output_height, output_height就是输出的一列的大小,对应 4000x3000 的话, 就是3000.

----------------------------------------------------

.op_pixel_clk = 254400000,    这个是camera mipi的clock,我们这里配置的是254.4MHz,单位一定要注意,有一次FAE把这个值误写,造成camera功耗增大,功耗测试了很久才发现是这个地方写错了,真的是坑死人。

上面是高通官方文档,对这个参数有明确的规定,我们这颗sensor假如是4lane的,并且是10bpp,这里有一个计算方法,以full size为例,

  .x_output = 3264,   这里的x和y是sensor实际输出的宽和高
    .y_output = 2448,
    .line_length_pclk = 1932,
    .frame_length_lines = 2482,
    .vt_pixel_clk = 144000000,
    .op_pixel_clk = 254400000,    重点看这个东东
    .binning_factor = 1,
    .max_fps = 30.0,
    .min_fps = 7.5,
    .mode = SENSOR_DEFAULT_MODE,

total data = op_pixel_clk * 10;

each lane data = ( op_piexl_clk * 10)  / 4 ;

以3264x2448这一组size为例;

total data = 254.4 * 10 = 2554;注意这里平台限制的是2660;

each lane data = (254.4 / 4)  * 10 = 636;   

total data = each lane data * 4; 如果是4lane的话

---------------------------------------------------------------------

这个op_pixel_clk会影响功耗,注意这个配置不能和天线初一同一个频段,或者说这个频率的倍数不能落到天线的频段里面去,否则就会对天线干扰。

接下讲解怎样判断camera设置的clock有没有对天线造成干扰?

首先天线那边会有很多频段,有wifi的,打电话的频段等等。怎样才算是camera的clock没有对天线造成干扰呢?

如果camera配置的op_pixel_clk基频或者是倍频没有落在天线的任意一个频段内,那么就是没有干扰的。这中间要经过一个计算。

计算方法是这样子的:比如说,我们的op_pixel_clk配置的是254.4,那么each lane data就是(254.4 * 10) / 4 = 636,接下来对636这个值除2,这个值就是硬件工程师测量出来的那个值,这个值的倍频不能落在下面的区间内,1  2 3 4 5 6 7 8 9 等等倍数,下面列出天线的所有频段。

869-894M
925-960M
1575-1602M
1565-1610M
1805-1880M
1930-1990M
1880-1920M
2110-2170M
2300-2400M
2555-2655M
2400-2482M

---------------------------------------------------------------------------------------

下面再列出计算方法

1159 302Mbps 
2318 32588 
4636    
6954  869894
81272  925960
101590  15751602
121908  15651610
142226  18051880
162544  19301990
182862  18801920
203180  21102170
223498  23002400
243816  25552655
264134  24002482
284452    
304770    
325088    
345406    
365724    

 

可以看出954和1590这2个倍频落在了区间内,其他的都没有。这个op_pixel_clk的配置要和FAE进行确认,对那个size的哪些寄存器进行修改,都是要经过计算的。

三星:全尺寸配的是   280    算出来   (280/4)*10 = 700     700/2 = 350      实际测试的是350MHZ
           小尺寸配的是   259.2   算出来     (259.2/4)*10 = 648    648/2 = 324  实际测试出来的是325MHZ   
   
 ov:  全尺寸配的是   283.2    算出来   (283.2/4)*10 = 708     708/2 = 354      实际测试的是354MHZ
           小尺寸配的是   259.2   算出来     (259.2/4)*10 = 648    648/2 = 324      测一下这个实际的是多少   

 

 

 

最后

以上就是悲凉蜗牛为你收集整理的camera 驱动 关于mipi的一些计算的全部内容,希望文章能够帮你解决camera 驱动 关于mipi的一些计算所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(68)

评论列表共有 0 条评论

立即
投稿
返回
顶部