camera 驱动 mipi计算

时间:2024-04-06 08:34:59

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,

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

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

camera 驱动 mipi计算

上面是高通官方文档,对这个参数有明确的规定,我们这颗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

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

下面再列出计算方法

1    159         302    Mbps     
2    318         32    588     
4    636                    
6    954              869    894
8    1272              925    960
10    1590              1575    1602
12    1908              1565    1610
14    2226              1805    1880
16    2544              1930    1990
18    2862              1880    1920
20    3180              2110    2170
22    3498              2300    2400
24    3816              2555    2655
26    4134              2400    2482
28    4452                    
30    4770                    
32    5088                    
34    5406                    
36    5724                    
 

可以看出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      测一下这个实际的是多少