当前位置:文档之家› 高通5M_camera在BMP1.0平台上总结

高通5M_camera在BMP1.0平台上总结

高通5M_camera在BMP1.0平台上总结
高通5M_camera在BMP1.0平台上总结

高通BMP1.0平台调试5M CMOS camera总结

摘要:

本文着重解决BMP1.0平台上的RAW data 输出数据的500万camera sensor的调试。包括驱动层,应用层代码和camera镜头的色彩校准。

我们按照调试的先后顺序进行步骤说明:

我们先说OEM层。OEM层继承了ICAMERA的所有功能,ICAMERA只是一个壳,实现会转到OEMCAMERA。AEE层介于两者之间,公开的代码只是让我们参考,修改无效。

在我们需要使用camera时候,调用CreateCamera,在Create Instance获得句柄后,我们得到一个应用的壳,然后得到具体的与camera应用相关的函数注册。然后通过OEMCamera_SetParm开始启动ACM相关资源,ACM简单的理解,就是图片和相关分支调用函数。详情看OEMCamera_ACMTransaction ()相关函数,这里不是重点,因此点到即止。因为高通在双camera的资源应用上还没有完善,日后和应用在ACM上可能遇上问题,因此才在这里顺带说一下。各位有兴趣可以和应用的多交流。

现在,我们可以从OEMCamera_New()开始,对驱动设计工程师而言,可以理解为camera代码应用的开始。

OEMCamera_New()中,camera_get_sensors所用到的变量,在代码启动的时候已经赋值,因此,并不是为空,这点需要注意,另外,这里还没有开始分配camera提供显示的内存空间,主要是对camera硬件相关进行初始化(想深入了解,看graph_task中的camera_init,这是在service层注册过的函数,再往下说,我怕会开始跑火车,就在这里点到即止,很多东西我们可以从代码中看到更多。我这里提点一下就好)

经常,我们需要trace看sensorInfo里面的信息。我们最关心的是sensor_width和sensor_height,这个是从底层获取的camera输出图像的尺寸。从代码的设计上看,AEECLSID_CAMERA1固定的表示主摄像头,AEECLSID_CAMERA2表示从摄像头(现在手机一般都是双camera,因此单camera的流程就不说了)

现在我们非常关心sevice层的camera应用,在这里涵盖了camera绝大多数的基础代码(指公共服务的接口,)这个文件里的函数,需要认真研究。

首先,我们研究preview的部分:camera_malloc_preview_buffers(),可以看到camera_preview_buffers.buffers[current_buffer].buf_ptr表示preview的buffer的指针,共5块,前3块是给VFE用的,后2块是显示overlay用的。

VFE处理video数据流,图像效果处理,raw数据解析(包括rolloff,gamma,ASF,AWB 相关),YCBCR格式拍照解析

显示overlay用途,包括录像buffer的缓冲,屏幕显示的重载。

在raw data buffer中,会带上buffer头标志"QCAMRAW ",只有带这个标志的raw buffer,才是合法的,可以参看qcamrawIsHeader()这个函数判断,具体头里面有多少内容,看qcamrawSetHeader()这个函数,很直观的就能解析,这里就不在赘述。

想看preview关于buffer的指针定义,有一个函数camera_set_preview_buffers()很方便,这里面还包括recoding部分的buffer指针定义。

这里提供一个函数camera_calculate_output1_framerate(),可以看到如何用软件的方式看camera preview的帧率,我用过,和实际用示波器查看的结果非常接近,考虑帧率的动态变化,实际用软件的方式比示波器更好。

如果我们想对camera的数据进行一些深入的修改,建议从两个函数入手去追溯:camera_process_qdsp_output1_msg和camera_process_qdsp_output2_msg,这里面有很多图像处理。Output1进行preview;output2进行snapshot。Snapshot的thumbnail放在output1处理。

图像的旋转,camera_svcs_blt_ex(0这个函数是需要的,注意Y 和CbCr是分开存放的。

若是还想向上追溯,可以参看camera_svcs_process_func(),这里是camera一些主要公共功能的消息派发点。具体看函数内部就明白,我就不多说了。

const camera_bestshot_config_type camera_bestshot_table[] = {

#include "camera_bestshot_config.h"}; 这个是场景模式的入口,从camera_svcs_bestshot_get_config这里开始,将场景的索引赋值给cam3a_awb_state.bestshot_config,从这个关键词,我们能搜索到后面所有的功能。

关于ZOOM的相关流程,这里说明一下:camera_svcs_set_dimensions()可以看到zoom 的放大倍率的计算。

ui_picture_width=FLOOR16(camsensor_static_params[camera_asi].full_size_width

- pad_pixels);

ui_picture_height=FLOOR16(camsensor_static_params[camera_asi].full_size_height

- pad_lines);

如果是raw data 格式的数据:

pad_pixels = 12;

pad_lines = 8;

这是预留的边框,防止后面计算出错,然后我们看到处理了ui_picture_width和ui_picture_height后,其值一定是偶数。

resize_factor=(camsensor_static_params[camera_asi].full_size_height*Q12

/ max_crop_height (或者max_crop_width,哪个数小取哪个,这样保证放大能填充整个屏幕)); 这里计算能够放大的倍率因子

if (camera_min_decimation < camera_zoom_table[i+1] && !found_min)

{

camera_parm_zoom_table.minimum_value = (int32)i;

found_min = TRUE;

}

if (resize_factor < camera_zoom_table[i+1])

{

camera_parm_zoom_table.maximum_value = (int32)i;

break;

}

通过camera_min_decimation 和camera_zoom_table[]的比较,确定最小的ZOOM起始位置,这个位置其实是zoom的最大值,一般我们得到的是0值,告诉VFE按照camera的原始尺寸处理图像。而camera_parm_zoom_table.maximum_value所表示的是zoom缩小的最大比例。

从上边的解释,我们看到,ZOOM所能放大,缩小的比率,和我们camera sensor能输出的最大尺寸,UI能设定的最大尺寸,还有屏幕能表现的尺寸有关系,通过改变这些值,我们能够按照需要放大,缩小图像。

通过上面的计算,我们得到camera_parm_zoom.minimum_value和

camera_parm_zoom.maximum_value和camera_parm_zoom.step_value,这是我们最后能利用的zoom范围和每一步zoom的步长。

接下来如何zoom,就不多说了,因为出错的可能性很小。

以上属于部分camera的应用,后面在色彩校准部分还会介绍3a方面的应用。

下面我们来讨论一下camera sensor驱动代码

我们按照函数调用顺序进行说明:

1.camsensor_xxx_init():顾名思义,其代表的功能定义就不用再说了,这里只需要解

释一下里面的一个变量camsensor_preview_resolution,它可以赋值

CAMSENSOR_QTR_SIZE 和CAMSENSOR_FULL_SIZE,QTR是预览尺寸,

FULL是拍照尺寸。我们在调试的时候,要是怀疑拍照相关参数问题,可以在预

览流程中看拍照的图片进行debug。发布出来给客户的,就只需要QTR的设置。

2.camsensor_xxx_start():这个函数太太太太太太重要了(我有点蛋疼了),这个函数

是驱动的灵魂,因为可以说的问题太多,一时之间都不知道怎么说(这话说的有

点招臭鸡蛋)。这样,望文生义的地方我就不说了,讲讲容易犯错的地方。

○1camif_config相关配置,其实已经没有用了,但是我们还是保留其设置

(谁知道以后会不会又需要用上)。

○2camsensor_params->chromatix_parms = &camsensor_chromatix_xxx_struct; 这

是tuning图像的所有参数的集合文件头。Tuning后面我们会说.

○3camsensor_params->raw_output_option = CAMSENSOR_8_BIT_DIRECT; 虽然

还有CAMSENSOR_10_BIT_DIRECT这个参数可以选择,但由于后端数据的存

储都是按照8Bit来处理,因此这个参数没有什么太大的意义(这个最终解释权在

我这里,以后高通会不会将其区别开来,这要用发展的眼光来看).

○4在这个函数里,有判断camsensor_preview_resolution变量,这是为了调试全

尺寸的需要而设置的,在正常流程中使用,我们只需要CAMSENSOR_QTR_SIZE

这个分支,在实际的调试中,我发现,利用好CAMSENSOR_FULL_SIZE这个参

数能方便解决拍照相关的很多问题。至于怎么利用,说起来头疼,简单的说,在

第一点使用camsensor_preview_resolution = CAMSENSOR_FULL_SIZE即可,至

于这样做会有什么问题,就要看驱动代码的健壮否了。这里无法做太多预测。

○5preview_dx_decimation:这个是VFE处理bayer格式数据给显示屏用的,这

个是太太太重要了(我真无聊)。有一个边界计算的问题(边界的意思,就是在数学

计算的时候,我们要保证图像处理时候,作为分母的数据不能取为0,否则有严

重的后果,嘿嘿,为什么会取为0呢?因为图片边界外面就是0了),其要求在

尺寸上,宽度预留12pixel,高度预留8pixel(VFE实际只需要高度裁边6pixel,但

是为了整齐,我们裁剪了5+3=8pixel),然后剩下的宽和高的尺寸各自还要能被4

整除。有人说不这样做行吗?太麻烦啦,我说可以,但是准备后面的色彩调整时

候,屏幕显示总偏色的代价。在6平台上特别是偏绿。

○6接下来是AF参数设置,这个放到AF中再说。AF对焦,只取屏幕的1/4尺

寸给VFE计算,可以减少计算量,提高对焦速度。

○7camsensor_params->pixel_clock和pixel_clock_per_line这个参数是如此的重

要,怎么说都是重点,这个重点中的重点,我只能用这种方式表达我对这个参数的尊重之情。它是用来计算flicker,也可以叫banding,一个意思。这参数属于tuning 范畴,因此如何确定这些参数,归在后面tuning进行解释,这里先提点一下。

○8pclk_invert:不同的厂家,pclk有效的极性可能不一样,因此我们需要判断,

设TRUE表示上升沿有效,FALSE表示下降沿有效,如何判断呢?规格书中看看一目了然,下面这张就是上升沿有效的示意图

○9camif_config.HsyncEdge和camif_config.VsyncEdge:有CAMIF_High和

CAMIF_Low两种选择,表示行场同步信号的有效电平,高或低有效,只要用示波器看看camera的数据线输出是在行场低还是在高的时候有,就能直观的判断。

当然,规格书中也会提及,下面这张就是行场高有效的典型示意图。

3.camsensor_xxx_snapshot_config() : 这个是拍照时候调用的设置函数。简单说一下

里面的一些参数好了:○1discardFirstFrame = TRUE,表示在将来需要切换到预览模式时,会将预览的

第一帧数据抛弃,这么做是为了防止第一帧数据残缺造成切换时候显示错乱的现象。但是仅仅这么做还不够(从中可以看到,高通虽然想到这个问题,但是其仅仅停留在实验室阶段),这样做,仅仅将数据传输的错误解决,但是分配显示buffer 时候的随机数(malloc并不清空Buffer内容)没有处理,这样将会在切换到预览模式的时候显示花屏。我们在service层,找到camera_malloc_preview_buffers(),需要在其中添加如下代码:

if (camera_preview_buffers.buffers[current_buffer].buf_ptr)

{

memset(camera_preview_buffers.buffers[current_buffer].buf_ptr,

0x7f,

camera_preview_buffer_size);

camera_set_preview_headers();

}

○2camif_window_width_config.firstPixel ,camif_window_height_config.firstLine

这是用来调整显示像素顺序不对,而bayer的format无法调整的时候,这里提供一个变相的调整format的机会,让显示的色彩正确,至于是减多少,需要实际调试判断,原理就不说了,找资料看去。

○3epoch_line,这是纠错处理,当一帧数据的行超出这个设定的最大行时候,会

有出错中断,提示帧错误。将这个值设置的很大,将永远不会发生这个事件,相当于disable。我建议最好disable,因为有一些变态的sensor,会输出很大的dummy line,看起来很变态,但是必须。

4.camsensor_xxx_raw_snapshot_config();这个函数是在后续tuning的时候,拍raw

data照片的时候需要,设置同上。

5.camsensor_xxx_video_config():预览配置函数。其实没什么好说的,要说的前面都

说了,要是这里还有什么不明白的,可以打114问。我就不在这里骗稿费了。6.camsensor_xxx_power_up();其实我不想说,这个函数真的很雷人,要是你相信

在这里进行power up的话,我相信你的camera永远都别正常工作。

7.camsensor_xxx_power_down():这个函数还算正常一些,但是不需要在这里close

mclk的操作。在退出camera模块的时候,系统会有流程关闭工作时钟。

8.camsensor_xxx_register():这个函数写这里,但是我不想说了(我看起来很欠揍)。

9.camsensor_xxx_real_to_register_gain()和camsensor_xxx_register_to_real_gain():这

两个函数才是重点。说起来有点意思:这两函数,是浮点数和寄存器表示的整数之间的转化关系。举个具体的例子比较容易说明。

OV5647:gain寄存器最大0x3FF,小数占用4bit,因此形象的表示浮点数为3F.F,整数0x3F,小数一个F。从曝光表中抽取一个数值

{912, 600}, /* Gain= 3.563 Exposure Index=259 */

下面的计算是real_to_register:

reg_gain = (uint16)real_gain; //real_gain = 3.563

reg_temp = reg_gain<<4; //只取整数部分

gain = reg_temp | (((uint16)((real_gain - (float)reg_gain)*16.0))&0x0f); //整数和小数部分合并

下面是register_to_real的计算部分:

real_gain = (float) ((float)(reg_gain>>4)+(((float)(reg_gain&0x0f))/16.0)); // reg_gain是寄存器整数表示的3.563.

10.camsensor_ov5647_truly_sensor_setting():这个是sensor的参数集合的函数,用来

对sensor初始化,预览和拍照参数的设定。具体的意义这里就不详细解说,一般由sensor厂家完成。

11.camsensor_xxx_get_snapshot_fps():将预览/拍照的图片尺寸比较,默认预览30fps,

得到拍照的速率,这个,用在ISO,计算曝光行,去除拍照的第一帧数据,防抖动处理。

12.camsensor_xxx_get_preview_lines_per_frame():计算ISO曝光时间用的,公式如

下:

preview_exposuretime = (forced_input.forced_line_count)/(preview_exposuretime * preview_linesPerFrame);

13.camsensor_xxx_get_preview_pixels_per_line():用来计算flicker,公式计算如下:

if(camctrl_tbl.get_preview_pixels_per_line) {

cam3a_aec_state.band_60hz_gap =

(float)( ((float)1/120) * ( ((float)(camsensorParamsPtr->pixel_clock)) / ((float)(camctrl_tbl.get_preview_pixels_per_line())) ) );

} else {

cam3a_aec_state.band_60hz_gap =

(float)( ((float)1/120) * ( ((float)(camsensorParamsPtr->pixel_clock)) / ((float)(camsensorParamsPtr->pixel_clock_per_line)) ) ); }

14.camsensor_xxx_get_snapshot_lines_per_frame()::用来计算拍照的曝光行:

output.snapshot_linecount = (uint32)(((snapshot_exposuretime*

snapshot_linesPerFrame * snapshot_fps)/Q8) + 0.5);

15.camsensor_xxx_get_snapshot_pixels_per_line():目前没有用处。

16.camsensor_xxx_get_snapshot_max_exposure_line_count():设定拍照的最大曝光行,

可以用来限制允许拍照的曝光行边界,这个边界是可以动态变化的,这样拍照的曝光时间就可以控制:限定代码如下:

output.snapshot_linecount = (uint32)(((snapshot_exposuretime

*snapshot_linesPerFrame*snapshot_fps)/(Q8*snapshot_fps_divider)) + 0.5);

17.camsensor_xxx_set_snapshot_frame_rate():没啥用,返回设为TRUE即可。

18.camsensor_xxx_set_snapshot_exposure_gain():这个函数是用来对拍照的gain 和

line进行写入sensor操作,我们为了防止拍照的时候噪声,一般会将gain/2,而line*2.

19.camsensor_xxx_setup_camctrl_tbl():几个标志要说明一下:

○1awb_low_light_CC_is_supported = TRUE; CC是color correction的缩写,为

色彩校正的意思,对bayer格式的数据而言,那是一定要设置的。

○2fast_convergence_is_supported:是对AEC进行是否快速计算的意思,如

果luma计算的进度在实际测试中发现偏差过大(超过2个点,2个点是默认设置,我们可以更改,这在后面的tuning中说明),就需要禁止这个标记。

○3enable_sensor_rolloff_correction:和set_lens_correction标记是一个意思,

这个标记要小心设置,当确定不用VFE进行后端rolloff计算,才可以使能这个设置,否则一定要关闭,要不tuning的时候,色彩无法校准。

○4enable_rolloff_correction:这个标记正好和上面的相反,需要VFE进行rolloff设置的时候,我们需要使能它。至于rolloff是啥东西,后面tuning再解释。

○5af_is_supported,af_use_isp,cam3a_af_state.is_enabled,这三个标记,是

用来激活Af功能的,要用isp的AF功能,上面三个标记都要设TRUE,要是用VCM通过i2c来激活af功能,af_use_isp设为FALSE,另外两设为TRUE.

20.aec_digital_gain_is_supported:这是用在CC的校验中,可以在WB中增强RGB色

彩矩阵的变化,另外在拍照ISO设置中,必须配合ISO使能iso_is_supported标

志才能起作用,

好了,到此driver的说明告一段落。下面我们来说AF的调试。先说VCM的调试。

1.camsensor_xxx_set_default_focus:我们一般将镜头设置在无穷远的位置。这样启

动camera的时候,看远处会比较清晰。

2.camsensor_xxx_move_focus:参数step_direction代表的是每一步对焦的步长,理

论上这个值越小,对焦越精确,当然,我们调试是不能完全按照理论来的。一

般我们会设置15~20。

AF对焦调整,有两种模式,下面介绍一下各个参数的意义

其一为通过VCM马达驱动

camsensor_params->

af_enable 使能此功能

num_steps_near_to_far 步长总数

num_steps_near_to_closest_infinity 默认值

num_gross_steps_between_stat_points 粗调步长

num_fine_steps_between_stat_points 细调步长

num_fine_search_points 在细调到位情况下,第二次对焦的步长数

af_process_type AF的数学模型

position_near_end 微距模式近端

position_default_in_macro 微距启动的默认位置

position_boundary 正常模式近端

position_default_in_normal 正常模式默认位置

position_far_end 远端位置

其二为通过ISP驱动:

camctrl_tbl_ptr->

af_is_supported 使能AF模块

af_use_isp 使能isp驱动

hjr_bayer_filtering_enable 防抖动,抛弃3帧图像

cam3a_af_state.is_enabled af定义状态允许

ISP驱动的方式有两种,一是自动模式,可以发一条指令让isp自己完成对焦的所有工作,另一种是手动模式,可以随时中断正在做的对焦过程,重新开始对焦。

以下为使用的三个函数接口:

camsensor_function_table_ptr->camsensor_set_default_focus 公共接口

camsensor_function_table_ptr->camsensor_move_focus VCM驱动接口

camctrl_tbl_ptr->isp_af_start isp接口

camctrl_tbl_ptr->isp_af_get_position isp接口

注意一点,在高通的代码中,camera_af_start()里,camera_af_config()要将af的数学模型类型重新输入,否则在底层驱动修改的参数,到这里会被截止。

(void)camera_af_config(camsensorParamsPtr,mode,

(int)camsensor_static_params[camera_asi].af_process_type );

完成af对焦动作,会有camera_af_done()来调用一个回调函数cam3a_af_state.callback,执行OEMCamera_CameraLayerCB()将结果告诉上层应用。

case CAMERA_FUNC_START_FOCUS:

switch (cb)

{

case CAMERA_EXIT_CB_FAILED:

nStatus = CAM_STA TUS_FAIL;

break;

case CAMERA_EXIT_CB_DONE:

nStatus = CAM_STA TUS_DONE;

break;

}

break;

对焦的精度,采用分辨率图表测试。距离大约10公分,光源采用日光或者钨丝灯,尽量避免反光。观察可以清晰分辨出来的条数。

上面的这些在遇上问题的时候,可以帮助提供思路。下面我用例子进行介绍如何调试AF,当然,我排除一切问题,默认所有功能都正常运行。

假设我们使用10bit宽度的VCM,如下图

R9~R0就是数据的宽度,这里为10bit。10位的宽度,用十进制表示就是1023,以正常模式举例,我们定义AF的行程从position_far_end到position_boundary,分割成num_steps_near_to_far个步长,每一步长的行程,我们定义step_direction,起始点定义xxx_current_lens_position,因此总的镜头跑的行程距离计算一下:total AF step=(xxx_current_lens_position + num_steps_near_to_far ×step_direction),total AF step必须

<1024,否则镜头会打到边界,会损毁娇贵的镜头。position_far_end和position_boundary可以设置为这个行程中的任意位置,当然任意仅仅是理论值。实际要根据效果来调整。num_gross_steps_between_stat_points将影响AF跑的精度和速度,设置小了,精度保证,但是速度太慢;设置大了,精度又有问题,因此才需要我们来调整到一个合适的数值。

/*-----------------------------------------------------------------------------------------------------------------*/ 上面的图片说明了两种AF移动模式,左边的是快速模式,也叫Direct mode(也许我翻译的不准确?大家将就一下)右边的是步进模式,也称Step mode。从保护镜头,延长使用寿命的角度,我们应该取步进模式(VCM厂家蛋疼发布快速模式,因为客户基本不可能用)。

下面我们开始Tuning的讲解:

知识点准备:

一.RAW 数据格式

RAW, 是按照RGB格式保存的sensor输出的原始图像数据,其开始的第一个像素由sensor决定。一个像素大小,取决于sensor的硬件输出能力,比如8Bit,10Bit的数据宽度,就是一个像素输出的数据长度。下面两张图可以很直观的表示,要是还有疑问,建议拨打114咨询。

这里有一个Binning的概念,如图,属于2×2矩阵,Binning是一种图像读出方式,采用这种方式,相邻的像元中感应的电荷被加在一起,以一个像素的方式读出.Binning分为水平方向和垂直方. 水平方向Binning是将相邻的行的电荷加在一起读出,而垂直方向Binning是将相邻的列的电荷加在一起读出. Binning这一技术的优点是能提高桢速,和增加灵敏度.当行和列同时采用Binning时,图像的纵横比并不改变.当采用2:1Binning时,图像的解析度,将减少50%. Binning可以实现图像的平滑,避免锯齿现象;Binning不影响我们后端接收的数据量;目前我们一般都会提出要求sensor厂家采用2×2的矩阵Binning来发送数据,将来是否还需要这个技术,各位可以密切关注。

二.Flicker,效果如图:

上面这张要是看不清楚,可以看下面这张图片:

Sensor在日光灯作为光源下获取图像数据时会产生flicker,其根本原因是照在不同pixel上光能量不同产生的,所接受的光能量的不同也就是图像的亮度的不同。电源的频率有两种标准:50Hz和60Hz的正弦波形。(题外话:其实任何光都是波的形式传播,只是由于自然界的光波频率太高,对sensor能量的采集影响微乎其微,因此我们避纹波只考虑人工光源。)

如上图,由于能量在时间方向上的波形,照在sensor上就使每一个pixel产生在时间方向上的相应波形,由于CMOS sensor的曝光方式是一行一行的方式进行的,任何一个pixel的曝光时间是一样的,也就是同一行上的每个pixel的曝光

开始点和曝光的时间都是一模一样的,所以同一行的所有点所接受到的能量是一样的,而在不同行之间虽然曝光时间都是一样的,但是曝光的开始点是不同的,所以不同行之间所接受到的能量是不一定相同的。由此产生sensor出来的图像可能在图像高度方向上会有相应的波形。

为了使不同行之间所接受的能量相同,就必须找一个特定的条件,使得每一行即使曝光开始点不同,但是所接受的光能量是相同的,这样就避开了flicker,这个特定的条件就是曝光时间必须是光能量周期的整数倍时间。

下面具体计算如何避免flicker。

取出曝光表中的曝光行:

{1966, 2200}, /* Gain= 7.680 Exposure Index=330 */

高通的曝光按照每步长1.03倍设计,这里的gain,是real gain,为数学计算准备,在最终需要生效的时候,会转化为register gain,具体的要根据sensor厂家规格确定,这在前面已经解释过了。

这之后,会调用camera_aec_core_build_band_table()对曝光表进行50Hz,60Hz的修正,camera_aec_core_init()函数中

if(camctrl_tbl.get_preview_pixels_per_line)

{

cam3a_aec_state.band_60hz_gap =

(float)( ((float)1/120) * ( ((float)(camsensorParamsPtr->pixel_clock)) /

((float)(camctrl_tbl.get_preview_pixels_per_line())) ) );

}

else

{

cam3a_aec_state.band_60hz_gap =

(float)( ((float)1/120) * ( ((float)(camsensorParamsPtr->pixel_clock)) /

((float)(camsensorParamsPtr->pixel_clock_per_line)) ) );

}

camera_aec_core_build_band_table()函数中:

antiband_start_line = (uint16)(antiband_gap_line * start_band_count);

我们可以得到曝光行的公倍因子antiband_start_line,假设我们得到的是327这个因子,前面的曝光表中的{1966, 2200},其中2200将通过公倍因子修改为1962,变成{1966, 1962}这就是避免flicker的流程。

在前面我有提到camsensor_params->pixel_clock和pixel_clock_per_line,重要!!!这个参数用来调整flicker的因子,以达到最佳效果。

当然,在sensor内部,有flicker寄存器相关也需要设置,这个很容易遗漏,需要提高警惕。

问题提出和解决:

以50Hz光源为例

AntiBandingCLK = PixelPerLine * TotalLine * n / 100 (n表示1 < n < 100)

●AntiBandingCLK:一般和PCLK一致,需和sensor厂家确认。

●PixelPerLine 和TotalLine:我们确定的是PixelPerLine的值,其由有效像素+dummy组

成。需和sensor厂家确认。

TotalLine,计算出来的是一个公倍数因子,为AEC Table的建立提供计算因子,这个就是曝光行的基本因子。

三、Shading优化:

Sensor自然的输出图像,由于凸透镜的聚焦原理,中心会比四边亮,因此sensor需要对周边的感光进行提升,以使整幅图片看起来亮度均匀。

这是未处理shading的图像:如何在后端进行shading,我会在chromatix的使用中介绍。

下面这张是色调分离后的照片,可以看到虽然同心圆度偏左,属于合格。

下面这张偏心了,可以打入不合格品。但是如果价格敏感,这个模组还是可以将就的使用。就是色彩误差会增大。

没什么好说的,下面这张属于残次品:

将右下角放大,可以看到有暗角

Shading: 将4个通道独立进行计算,R, RG, BG, B.每个通道分为17 * 13个区域,每个区域独立对色块进行shading计算。将每个区域按照总的调整能力的百分比,进行处理,目的是保证每个色块的Y分量基本一致。标准是边角Y至少达到中心点的80%

举例:

1.902122f, 1.936142f, 1.887789f, 1.826255f, 1.764815f, 1.724159f, 1.671194f, 1.613485f, 1.589752f, 1.591212f, 1.609030f, 1.663636f, 1.727334f, 1.795452f, 1.914581f,

2.074672f, 1.782558f,

以上数据为17 * 13的一行,其调整的是gain值。

四、图像噪点消除:

噪点产生的几个原因;

1.提高感光度容易形成噪点。提高感光度一般是在光线照度低的情况下。高感光度成像是依靠电子线路的增益来增强信号,在信号增强的同时,噪点也被增加了。因此,我们一般推荐gain值不大于8

2.长时间曝光容易产生图像噪音。在需要长时间拍摄的时候,处理较慢的快门速度所带来的巨大的工作量,致使一些特定的像素失去控制而形成比较多的噪点。这个需要sensor厂家在设置参数的时候,提高噪声的门限值,并且尽量注意不要对图像输出的对比度影响。

4.传感器的尺寸较小,而拍摄时设置的分辨率有很高,拍摄时容易产生噪点,这个考验sensor厂家的性能,这方面的噪声属于先天,我们只能评估,无法改善。

5.用JPEG格式对图像压缩产生图像噪音。由JPEG格式压缩图像,压缩率越高,图像噪音就越明显。这需要综合评定存储的尺寸和噪声等级之间的平衡点。

五、图像#格子消除:

起因为sensor设定的输出预览尺寸和实际的不符合,或者不和4整除的关系,都会出现这种现象。(小知识点:实际经过VFE的处理,需要在高度上截去8 Pixel, 宽度截去12 Pixel)

六、帧率控制:

有两种方法可以控制raw data 数据输出的速度::,

Raw data的数据输出,都会在每个line后添加曝光行,利用曝光行,可以控制帧率。

另外,可以加入Dummy line,写无效数据的多少来控制帧率。

帧率= pclk / ( pixel_per_line * line_per_frame)

pixel_per_line = 有效像素+ 曝光行;

line_per_frame = 有效行+ demmy_line。

七、白平衡AWB:

这是在shading基础上做的色彩计算。

灰阶板:用来计算白平衡点

在不同的光源下切换,camera能自动的收敛,这需要camea能智能的判断现在处于哪种光源下,因为在不同的光源下,R,G,B的比值是不同的,换句话说,Y,U,V的数值落在二维空间的不同区域,将这个参考值定义为相关的光源,camera即可自动识别并且收敛到相关光源下的RGB修正参数下,这样,不论在何种光源下,都能不偏色的拍照。

例子如下:

/* D65 AWB Reference Point w/HW */

{

0.524000f, /* R/G ratio */

0.604000f, /* B/G ratio */

0.984000f, /* Red Gain Adjust */

0.970000f /* Blue Gain Adjust */

},

下面的参数是划定一个四边形区域进行计算。

{

/* Y-Min */

10,

/* Y-Max */

207,

/* Slope of neutral region and line number */

14,

-16,

16,

-16,

/* Cb intercept of neutral region and line number */

22,

131,

-55,

257

},

AWB收敛机制:

看camera_awb_core_run_agw_algorithm()函数,

通过camera_awb_core_convert_to_grid(),计算现在计算出来的RGB比值落在哪个区间,然后通过camera_awb_core_search_nearest_reference_point()寻找其所属光源区间,高通为了保险起见,引入参考点的历史记录:camera_awb_core_update_history()和camera_awb_core_adjust_rg_bg_by_history() 其原意是使参考点更加稳定,但是目前其引入一

个弊端,就是光源切换后,由于整幅画面没有剧烈的明暗变换,将使参考点无法自动转移。这个是需要注意的,

在这里,还有一点比较重要,camera_3a_select_rolloff_light(),

下面这张图片,属于ASF处理出错产生黑斑。由于其过亮,ASF直接将这区域图像数据转换为0。

两方面要注意会引起这问题:长时间的黑斑,是曝光表问题,当采用Lux 判断的时候,Lux Index Start和Lux Index End要调整好,当采用gain控制时候,Gain Start 和Gain End要调整好;另外黑斑瞬时产生现象,是锐化度引起的问题,在计算锐化度时候,在Outdoor和Indoor, Lowlight之间转换的时候,锐化度过度不能太陡,否则图像处理会不稳定而产生瞬间黑斑。

色彩偏差的矫正,采用标准色卡

8926平台GSM校准原理

8926平台GSM校准 Rx校准 8926 SGLTE GSM Rx校准和8610平台完全一样,只是NV项要写到SG通路(Rx Chain ID->2),并增加PCS频段校准。 下面以GSM900 Rx校准为例: 需要在8个信道上分别对4个等级进行校准 仪器分别发送-90,-90,-54,-54dBm的GMSK信号,分别用于Rx State0~3等级校准,获得校准数据写入NV。建议测试5 slots取平均值。 测试得的RSSI值最终通过如下计算,转换成校准值,写到NV中 RFNV_GSM_C2_GSM900_RX_CAL_DATA_I(NV24969) 8,//校准8个信道,通常低频校准8个信道,高频校准16个信道 1,31,62,92,122,975,1000,1023,0,0,0,0,0,0,0,0,//校准的绝对信号数 2280,2280,2287,2282,2270,2276,2289,2281,0,0,0,0,0,0,0,0,// Rx State0,最低接收功率2095,2096,2103,2098,2086,2090,2104,2096,0,0,0,0,0,0,0,0,// Rx State1 2094,2094,2101,2096,2084,2089,2102,2094,0,0,0,0,0,0,0,0,// Rx State2 1731,1734,1744,1736,1725,1726,1742,1733,0,0,0,0,0,0,0,0]// Rx State3,最高接收功率产线校准优化

通常GSM850/900需要校准8个信道,而高频1800/1900需要校准16个信道,比较费时(实验室校准一高(16信道)一低(8信道)频段需要约15秒钟)。 高通给出方法用于简化产线Rx校准(已提Case确认8610和8926平台均可以使用)。 在实验室中,测出校准信道间的Rx增益差值(多快板求均值)。产线上只需对每个Band校准一个中间信道,其他信道的参数通过补偿差值来完成: GSM Rx Cal参考文档: 80-NC398-5_B_GSM_Factory_RF_Rx_Calibration_SW_Training.pdf GSM Tx校准 8926 SGLTE GSM Tx校准原理和8610平台一样。只是8610平台时,没有快速校准,且对AMAM/AMPM部分没有校准,在8926平台新的仪器上,则能实现所有GSM Tx校准,但需要在SG通路上完成,相应NV也要写到C2中。目前我们S7三模八频,所以要增加PCS 的校准。 在进行GSM校准前,一定要先完成晶体校准。高通xtt中的晶体校准,是在TD-SCDMA校准中完成的,然后再进行GSM校准。 GSM校准过程分为三部分(详细说明参考8610平台射频校准说明): 1,DA校准:不同PA增益下,获得RGI和功率的对应关系,包括GSM和EDGE两种模式,三个测试信道,同时获得第二步Predistortion校准的RGI值。 2,在高PA增益模式,获得对EDGE下的AMAM/AMPM测试数据,共三个校准信道 3,优化拟合测试数据,完成Tx校准 最终写入: RFNV_GSM_C2_GSM900_TX_CAL_DATA_I(NV24977) RFNV_GSM_C2_GSM1800_TX_CAL_DATA_I(NV24978) RFNV_GSM_C2_GSM1900_TX_CAL_DATA_I(NV24979) 8610平台由于是在主通路上,所以相关NV是RFNV_GSM_C1_X,而S7上SGLTE的GSM通路是在辅助通路,所以相关NV是RFNV_GSM_C2_X 下面以GSM900来进行说明(NV24977共包含30组数据): 校准信道包括CH975,37和124三个信道,

高通平台充电方案

Qualcomm平台充电总结 1.锂离子电池充放电特性 1.1. 锂离子电池充电电压的上限必须受控制,一般不超过4.2V。(视具体情况,一般控制在4.10V-4.35V不等) 1.2.单体电池充电电流通常限制在1C以下。 1.3.单体电池放电电流通常控制在3C以下。 1.4.单体电池放电电压通常不能低于 2.2V。 电池电量与电压对照曲线 2.充电通路晶体管的控制和功率限制 外部通路晶体管的控制驱动器包含在了PM IC中;这个驱动的输出可以内部晶体管应用,也可以通过CHG-CTL-N脚供外部应用。如果需要的话,一般操作时PM IC使用通路晶体管的闭环控制来校准VDD电压,快速充电(恒流充电)时的检测电流(IDET),或者充电最后状态的电池电压。通路晶体管的阻抗也被增加以用来过流保护。 控制通路晶体管同样允许用来过热保护:PM IC通过电压和电流的测量来监控通路晶体管中消耗

的功率。如果计算出的功率超过设计限制,CHG-CTL-N控制信号就会减小通路晶体管的通路电流。 2.1.通路晶体管的功率消耗限制是可编程的: 1)晶体管的消耗功率是使用VCHG(或USB-VBUS)和ISNS-P脚上的电压测量以及基于敏感电阻两端(ISNS-P和ISNS-M脚)电压的电流测量来计算的。 2)可编程的管耗限制(单位为瓦特)为0.4,0.5,0.6,0.75,1.0,1.5,2.0和“无限制”。 这些可编程限制采取一个0.100ohm的敏感电阻。 2.2设计者需要考虑以下几点来帮助减少通路晶体管的功率消耗: 1)使用一个只比锂电池最高电压高一点的外部供应电压来使越过通路晶体管的电压最小化。 2)设计充电器电压,使它的输出电压在快速充电期间崩溃,从而减少越过通路晶体管的电压。 恒流充电期间要控制充电电流和通路晶体管管耗,因为这个阶段的充电电流较大,而充电三极管超过一定功率就容易发热甚至烧毁。所以通常情况下,恒流充电期间,我们都要求充电三极管处于饱和态,Vce很小以降低管耗,只有在usb充电或有特殊要求的wall充电中,才会让充电三极管工作在放大区,这个在5中会有讨论。 2.3.平台限流的影响。 1)如果平台限流大于wall charger额定电流,充电通路三极管状态由pm控制在饱和区(表现为恒流充电期间Vbus电压会被拉低,充电三极管处于饱和态,Vce很小,管耗很小); 2)如果平台限流小于wall charger额定电流,充电通路三极管状态由pm控制在放大区,以提高充电三极管CE极间阻抗,来降低通过的电流(表现为充电Vbus电压不会被拉低,三极管无法进入饱和态,Vce很大——管耗大,发热大)。 3.充电过程解析 PM IC提供了支持锂电池充电的线路,它利用了MSM使能的四种技术:涓流充电,恒流充电,恒压充电,脉冲充电。电池电压,外部供应电压和最大检测电流度量都可以通过一个模拟多路器供MSM使用。这就使得MSM设备可以监控充电参数,做决策和控制充电过程。

高通公司简介

高通公司简介 高通是全球3G、4G与下一代无线技术的领军企业,也是移动行业与相邻行业重要的创新推动者。30多年来,高通的技术驱动了智能手机的变革,将数十亿人连接起来。我们在3G和4G当中作出了开创性的贡献,现在正在引领5G之路,迈向智能联网终端的新时代。我们的产品正在变革汽车、计算、物联网、健康医疗、数据中心等行业,并支持数以百万计的终端以从未想象的方式相互连接。 高通创立于1985年,总部设于美国加利福尼亚州圣迭戈市,30,000多名员工遍布全球。高通是财富“世界500强”公司,并连续14年入选《财富》“美国500强”;自2000年起连续被《金融时报》评为“全球最有价值500强企业”之一。2016年,高通中国荣获“中国最受尊敬企业”称号,该项评选由《经济观察报》和北京大学联合主办,是体现企业运营、技术创新、社会责任及美誉度等多维度实力的权威奖项。 以创新为己任的高通多年来始终着眼未来,坚持在研发方面的巨额投入,通过“发明-分享-协作”的商业模式,以先进技术惠及产业,加速推动整个生态系统发展,从而帮助无线产业链上各方获得成功。公司每年在研发方面的投入约为财年收入的20%。截止目前,高通累计研发投入约为440亿美元。 秉承一贯的创新精神,依靠技术创新和进步,高通不断引领3G、4G以及下一代无线技术的演进,在推动无线通信产业发展的同时,让先进的无线数字技术能够更好的造福人类。高通从2006年就已经开始5G前瞻性研究,在5G基础技术、原型测试等多个方面开展了大量

工作,并已成功发布多个原型测试平台,以及业界首款商用5G调制解调器,引领全球5G之路。2016年11月,高通5G NR(新空口)原型系统和试验平台在第三届世界互联网大会上荣获“世界互联网领先科技成果”。除此之外,高通还正在为3GPP的5G NR标准化进程做出积极贡献,并积极参与全球有影响力的试验与测试,与包括中国在内的全球行业参与者紧密协作。 Qualcomm Technologies, Inc. (QTI)为高通的全资子公司,与其子公司一起运营高通所有的工程、研发活动以及所有产品和服务业务,其中包括其半导体业务QCT。2016财年QTI 的MSM芯片出货量达8.42亿片,充分体现了在核心芯片领域的领先优势。高通Technologies的骁龙?移动智能处理器是业界领先的全合一、全系列移动处理器,具有高性能、低功耗、逼真的多媒体和全面的连接性。截至2014年11月,搭载骁龙处理器的Android 智能手机出货量已经超过10亿部。QTI的产品和服务不仅仅局限于移动智能终端,目前公司的产品和业务已经拓展至医疗、汽车、物联网、智能家居、智慧城市等多个领域,并已推出超过25款专门设计和面向大众市场的物联网智能平台。截至目前,采用高通技术的物联网终端出货量已超过10亿部。 高通在九十年代进入中国市场,迄今已经二十余载,先后在北京、上海、深圳和西安开设了四家分公司,在北京和上海设立了研发中心,并在深圳设立其全球首个创新中心。秉承“植根中国,分享智慧,成就创新”的理念,高通致力于在中国向下一代无线技术演进的过程中,为中国的运营商、制造商和开发商合作伙伴提供全力支持。在高通中国区全体员工的不懈努力下,中国在全球业务发展中扮演的角色越来越重要,是全球最重要的市场之一。

基于Unity3D和高通Vuforia SDK的AR开发

基于Unity3D和高通Vuforia SDK的AR开发 发表时间:2017-12-13T09:47:20.257Z 来源:《科技中国》2017年8期作者:刘伟杨希文盼向兴婷 [导读] 摘要:本文基于Unity3D这一专业游戏引擎和高通Vuforia SDK制作一款简单的AR,模型通过3d max等三维建模软件进行制作。本文主要介绍基于Unity3D如何制作出一款适合教育领域的AR应用软件,并对AR的研究方向与前景做出探讨。 摘要:本文基于Unity3D这一专业游戏引擎和高通Vuforia SDK制作一款简单的AR,模型通过3d max等三维建模软件进行制作。本文主要介绍基于Unity3D如何制作出一款适合教育领域的AR应用软件,并对AR的研究方向与前景做出探讨。 关键词:增强现实(Augmented Reality),Unity 3D,教育领域 一、概述及研究现状 增强现实(Augmented Reality),简称AR技术。一种实时的记算摄影机摄影位置及角度并加上相应图形的技术,在显示屏中把虚拟世界叠加到现实世界中,用户可以通过设备与其进行交流互动。 目前,国内的AR技术发展迅速,在教育领域的应用也备受关注,具有广阔的发展前景。国内的AR多应用于儿童教育(出版物)等,随着移动手机性能的提升和AR技术(特别是图片识别技术)的发展,未来AR一定会在教育领域蓬勃发展,并且还会在社交、旅游、军事、医疗、游戏等诸多领域实现成功应用。 二、设计与实现模块 AR制作流程主要有:模型导入Unity—基于高通网站制作识别图——导入SDK,在Unity3D中完成后期制作(动画,模型渲染,脚本驱动,特效,声音等)——打包发布到安卓(Android)平台,下面具体进行介绍。 开发工具的准备:1、基于Unity 3D,所以先安装Unity3D,案例所用的版本是Unity3D5.6.1f(64位)的,安装SDK和JDK,保证后续可以发布到Android平台进行测试与应用。2、登录高通Vuforia网站注册账号。 三、识别图模块 制作识别图,首先登录高通Vuforia网站,点击Develop按钮,单击License Manager下的Add License Key,在Project Type选择Development。在Project Details下添加App name:AR Demo,点击Next,出现刚刚填写的信息,确认无误后,勾选下面的许可确定。点击Confirm,License Manager下面会有AR Demo,点击它出现License Key,后期在Unity里面会用到,所以将它复制下来。 再点击Target Manager,点击Add Database,在弹出的Create Database中填写Name:AR _Demo,Type选择默认的Device即可,点击Create。在Database出现刚刚创建的AR_Demo,后面有它的信息(Name,Type,Targets,Date Modified),Targets为0,要添加图片,点击它,点击Add Target,在弹出的Add Target下,我们选择Type为Single Image,点击File后面的Browse,选择准备好的图片,设置宽度:400,最后点击Add,这是出现Uploading Target,只需要等待几秒钟,就会看到Target制作完成,这时可以看到选择的图片复杂的Rating (等级),它的值越高代表可识别的点越多,识别也更加容易和准确。制作好后,勾选我们制作的Target,点击Download Database,在弹出的Download Database窗口中,选择开发平台(Select a development platform)为Unity Editor,然后点击Download进行下载。下载好后,识别图就制作完成,这时还需要下载Vuforia SDK。点击上面的Downloads按钮,点击Download for Unity,在弹出的Software License下点击I Agree。 四、Unity 3D实现AR模块 打开Unity,新建工程,导入两个*.unitypackage:AR _Demo和vuforia-unity-6-2-10,我们可以直接点击两个带有Unity图标的文件进行导入,也可在Unity菜单栏中选择Asset下的Import Package进行导入。删除unity自带的主摄像机Main Camera,在资源Assets目录下找到Vuforia—Prefabs—ARCamera,拖到项目场景中,再将Image Target也拖放到场景中,将右侧检视面板中Image target Behaviour下的Type选择AR_Demo),将模型放置在识别图上,调整模型大小和位置,让它处于摄像机中央。设置ARCamera:点击ARCamera右侧的Inspector下的Open Vuforia configuration,将刚刚复制的的License Key粘贴到App License Key中,并且勾选上Datasets下的Load AR_Demo Database 和Activate。 五、发布到Android平台模块 点击菜单栏File—Build and settings,选择发布平台Android,点击player settings,修改Package Name后参数Company,点击Add Open Scenes,然后Build,Unity生成apk可执行文件。最后,通过将生成的apk文件传到Android手机上并进行安装运行,实现预期效果。 六、结论与展望 本文的AR制作基于在Unity3D中完成相关测试,最后打包发布成APP安装到Android手机上,运行APP通过手机摄像机即可实现增强现实的效果,完美展示模型与现实的叠加。本文为从事AR相关开发的工作人员提供指导,也为在教育领域苦苦寻找更加高效的教学模式的教

高通平台常用调试Tool介绍1

高通平台的常用的调试tool: QPST, QRCT, QXDM, Trace32(use JTAG) 2013年09月07日?综合?共 4410字?字号小中大?评论关闭 OverView: QPST 综合工具, 传输文件, 查看device的EFS文件系统, 代码烧录 QRCT 测试RF QXDM 看log JTAG trace32调试 QPST,QXDM的使用说明,具体的可以看我上传到csdn的资源文件,我都是看它,看了那个user guide就完全会了,很简单的 QPST是一个针对高通芯片开发的传输软件。简单的说就是用高通处理芯片的手机理论上都可以用 QPST传输文件,可以修改C网机器内部参数的软件。 一次可以track多台电脑 QPST还可进行代码烧入 包括: 5个 client applications ? QPST Configuration monitor the status of: Active phones Available serial ports Active clients To start QPST Configuration, from the Start menu, select Programs → QPS T → QPST Configuration. ? Service Programming provide service programming for CDMA phones that contain Qual comm ASICs. With it, you can save SP data to a file, then download the data in that file to multiple pho nes. The SP application accesses settings regardless of the phone’ s internal memory implementation. It is feature- aware and displays settings pages appropriate to the phone being programmed. To start SP, from the Start menu, select Programs → QPST → Service Programming.

MTK,展讯,高通处理器介绍

1---MTK: MTK在移动领域CPU目前可以分为3个系列:1、MT62xx系列(功能手机);2、MT65xx系列(智能手机);3、MT83xx系列(平板)。 MT62xx系列,先看下图: 该系列属于功能手机产品线,主要采用ARM7、ARM9、ARM11三种架构,ARMv5T、ARMv6L指令集,这些功能手机芯片并不羸弱,应该说很有特点。有的性能规格甚至操过了09年顶级智能机的性能水准,如:MT6276。有的在省电造诣上独步天下:如MT6250,耗电仅为MT8389的1/10。目前的MTK比较新的安卓智能芯片也普遍延续着功能手机设计优势。注意,在MT62xx系列中,并非CPU架构越先进主频越高,手机越好,原因很简单,功能手机和智能机不同,追求的并非只是单纯的性能,而是功能、速度、价格及待机等特性的结合体,所以即便是MTK最低端的功能机都有着全能的心态,MTK可以实现用规格较低的硬件,做出很全面的机子。比如,ARM7架构的MT6250,虽然主频只有260MHz但可以在上面搭载智能化的Nucleus3.2.2系统,可以实现类似智能机的花俏界面,类似安卓的智能软件扩展和功能手机的超长待机,这些功能原本需要ARM11处理器才能完成的功能,而如今在ARM7上都可以实现了,用ARM7的好处非常明显,芯片授权费低廉,辐射最低,功耗超低,代表机型:联想MA309。在ARM9架构上MTK也有发力,比如MT6268,在246MHz的频率下就能处理联通3G的高额网络吞吐数据,WIFI数据等,代表机型:联想I62、P717、P650WG。ARM11的MT6276处理器造出来的功能机,几乎和智能机无异了,可以实现类似智能机的软件扩展和全3D界面,代表机型有:联想概念机ZK990。四两拨千斤是MTK功能手机芯片的特色。MTK功能手机的卖点不在于硬件是否强大,系统占主导地位,系统功能越多,功能越全面则手机越强,硬件却成为了附属品。不追求顶级性能,但要做全面,这一特性已经延续到智能平台上了,用MTK智能机的朋友往往会发现,它们性能并不是最强,反而很追求细节功能,比如超长待机(省电),比如外部接驳能力(USB-OTG),裸眼3D(英特图3D显示技术)等。MTK是很聪明的,在能保证和高通几乎一致的用户体验前提下,也就是在保证系统基本不卡,顺滑的前提下,追求一些附加功能,来产生卖点,这些启发一般都是来自功能机的,因为功能机是更加追求功能,在智能机上也追求功能,是寻求安卓系统差异化的有力表现。就以超长待机这一卖点打个比方,联想主打超长待机的P系列手机:P70(MT6573)、P700(MT6575)、P700i(MT6577)、P770(MT6577T)、P780(MT6589)整个系列全被MTK占领了,高通没

高通平台之GSM Rx校准原理_简中

GSM Rx Calibration
GSM Rx Structure
在探讨 GSM Rx Calibration 前,我们先了解一下 GSM Rx 架构。 以 Rx (Receiver)而言,LNA ( Low noise amplifier ) 的 Gain,会影响整体电路的 NF ( Noise Figure )。NF 公式如下 :
(1)
f 为各级电路的 NF, 则是各级电路的 Gain。 G 由于第二级电路之后的 NF 与 Gain, 对整体电路性能影响不大, 故多半只取前两级做计算。 由(1)式得知, 若提升 LNA 的 Gain,便可使整体电路的 NF 下降。
然而,若 LNA 的 Gain 过大,会使后端电路饱和,导致线性度下降。因此 LNA 的 Gain 必须适中,才能使整体电路的 NF 与线性度优化。
但是, 消费者在使用手机时, 很可能会因为处于移动状态, 导致与基地台间的Path loss一直更动,加上附近周遭环境的Shadowing effect,导致手机所接收的讯号强弱 不一。也就是LNA的输入讯号强度,会有很大范围的变动。
1

Path loss 与 Shadowing effect 示意图
(2)
由(2)知当 LNA 的输入讯号不固定时,若 Gain 为单一固定值,则输出讯号也会 不固定。很可能当输入讯号过大时,后端电路饱和,线性度下降。或输入讯号过 小时,后端电路 SNR 下降,NF 上升。因此要有 AGC ( Automatic gain control ) 的机制,如此即便输入讯号的动态范围过大,也能尽可能缩减输出讯号的动态范 围,使整体电路的 NF 与线性度优化。因此 GSM 四个频带的 LNA,都采用 Gain-stepped 架构,其 Gain 皆非单一固定值,即 VGA(Variable gain amplifier) 架 构。
2

高通android平台开发

问题描述: 对于有过开发高通android系统的人来说,获取代码构建开发环境并不是难事,但对于刚刚接触这一块内容的人,如果没有详细的说明很容易走弯路,本文档就是根据本人的实践总结的一些经验教训。 1.代码获取 高通的android代码分为两部分,一部分是开源的,可以从网站https://https://www.doczj.com/doc/a516622104.html,/xwiki/bin/QAEP/下载,需要知道要下载的代码的分支及build id。另一部分是非开源的,需要从高通的另一个网站https://https://www.doczj.com/doc/a516622104.html,/login/上下载,这个下载是有权限限制的,晓光的帐号可以下载代码。后面这部分代码需要放到第一部分代码的vendor指定目录下,可能是vendor/qcom-proprietary或vendor/qcom/proprietary,根据版本的不同有所区别。 高通平台相关的东西基本都在vendor/qcom/proprietary下或device/qcom下 2.编译环境构建(ubuntu 10.04 64位) Android2.3.x后的版本需要在64位下进行编译 更新ubuntu源,要加上deb https://www.doczj.com/doc/a516622104.html,/ lucid partner 这个 源用来安装java。 apt-get install git-core gnupg flex bison gperf build-essential zip curl zlib1g-dev x11proto-core-dev libx11-dev libxml-simple-perl sun-java6-jdk gcc-multilib g++-multilib libc6-dev-i386 lib32ncurses5-dev ia32-libs lib32z-dev lib32readline5-dev 研发主机不能更新java,需要让IT安装sun-java6-jdk。 在命令行执行sudo dpkg-reconfigure dash 选择no,否则编译时会报一下脚本语法错误 编译的过程中https://https://www.doczj.com/doc/a516622104.html,/xwiki/bin/QAEP/和版本的 release notes中都有介绍,首先source build/envsetup.sh,然后choosecombo选择需要的选项,最后make或make –j4。-j4用来指定参与编译的cpu个数,指定了编译会快些。编译单个模块的时候只需要在make后面跟 上模块的名字 为了简化可以使用以下脚本 export TARGET_SIMULATOR=fasle export TARGET_BUILD_TYPE=release export TARGET_PRODUCT=msm7627a export TARGET_BUILD_VARIANT=eng set_stuff_for_environment make $1 编译的中间结果在out/target/product/平台/obj目录下,有时候为了完全

Android智能手机软件开发概述

第1章Android智能手机软件开发概述 随着移动设备的普及,其功能越来越完善,移动设备的系统平台也日渐火热。 本章首先介绍智能手机及其操作系统平台(如Symbian、Android、Windows Mobile、IOS等),并对学习Android手机软件开发的必要性进行阐述。之后, 介绍Android平台的总体架构,并对完成Android应用程序软件开发的SDK及 其组成进行简要说明。最后,对通过Android Market发布自己应用程序的方法 进行介绍。学习本章内容时,要求重点掌握如下内容: ●了解常见的智能手机操作系统平台。 ●了解Android的总体结构及主要功能。 ●了解Dalvik虚拟机、AVD等。 ●了解Android Market及发布应用程序的方法。 1.1 智能手机及其操作系统 据中国互联网络信息中心于2011年7月19日发布的统计《中国互联网络发展统计报告》显示,2011年上半年,我国手机网民规模继续稳步扩大。截至2011年6月底,我国手机网民达3.18亿,较2010年底增加1495万人(如图1.1所示)。可以说,智能手机正在快速走进人们的生活。就目前来看,已经有越来越多的人开始把智能手机当作日常看视频、办公的首选设备。随着A9架构、双核概念的问世,智能手机能更广泛、轻松地接管生活和工作中的大小事务[1]。因此,学习和研究智能手机软件开发,具有广阔的社会需求和工程实践意义。 图1.1 手机上网网民规模 智能手机一般指像个人电脑一样具有独立操作系统,可由用户自行安装软件等第三方服务商提供的程序,并且,用户能对手机功能进行扩充。目前,全球多数手机厂商都有智能手

手机高通平台BUIW简介

BUIW Training 01/07 2008

Content ?预备知识 ?Dialog框架(历史回顾) ?BUIW概述 ?BUIW基本原理 ?BUIW的使用(用BUIW构建app的UI)

预备知识 ?高通平台的mmi由许多app组成,每个app可分为logic和ui,app的ui由一系列的界面组成,每个界面由多个界面元素组成,比如一个图标,一个字符串,都是界面元素。在Dialog体制框架下,一个界面就是一个Dialog,一个或多个相关的界面元素构成一个Control,在BUIW下,它们分别叫做Form和Widget。

预备知识 ?IDisplay对象 类似MFC里的CDC对象,每个app有自己IDisplay对象,重要的函数如下 IDISPLAY_DrawText绘制文本 IDISPLAY_MeatureTextEx测量文本宽度 IDISPLAY_SetColor设置颜色(比如文的前背景色) IDISPLAY_SetClipRect设置剪切区域 IDISPLAY_Update更新屏幕 IDISPLAY_FillRect以指定颜色填充矩形 ?IImage对象 IImage_Draw绘制图片 IImage_SetOffset设置源图的偏移(画源图的一部分) IImage_SetDrawSize设置图的剪切大小 画图的一般方法 P_img=ISHELL_LoadResImage(); IImage_Draw(P_img); IImage_Release(P_img); UI框架就是对上述函数的封装,app程序员可以只用上述函数实现一个app的ui,但工作量很大,不易扩展,维护。

美国高通(QUALCOMM)

美国高通公司 目录[隐藏] 高通公司简介 高通公司发展历程 高通公司商业模式 高通公司的商业模式及为客户带来的益处 开放许可和通用许可 授权方式概述 第三方权利融入高通公司的芯片中 不断加入新知识产权 高通公司简介 高通公司发展历程 高通公司商业模式 高通公司的商业模式及为客户带来的益处 开放许可和通用许可 授权方式概述 第三方权利融入高通公司的芯片中 不断加入新知识产权 ?高通公司将大有作为 ?在上海成立研发中心 [编辑本段] 高通公司简介 美国高通公司以其CDMA(码分多址)数字技术为基础,开发并提供富于创意的数字无线通信产品和服务。如今,美国高通公司正积极倡导全球快速部署3G网络、手机及应用。公司总部驻于美国加利福尼亚州圣迭戈市,高通公司的股票是标准普尔5 00指数的成分股,公司业务涵盖技术领先的3G芯片组、系统软件以及开发工具和产品,技术许可的授予,BREW应用开发平台,QChat、BREWChatVoIP解决方案技术,QPoint定位解决方案,Eudora电子邮件软件,包括双向数据通信系统、无线咨询及网络管理服务等的全面无线解决方案,MediaFLO系统和GSM1x技术等。美国

高通公司拥有所有3000多项CDMA及其它技术的专利及专利申请,这些标准已经被全球制定标准机构普遍采纳或建议采纳。高通已经向全球125家以上电信设备制造商发放了CDMA专利许可。 作为一项新兴技术,CDMA正迅速风靡全球并已占据20%的无线市场。目前,全球CDMA用户已超过2.56亿,遍布70个国家的156家运营商已经商用3GCDM A业务。2002年,高通公司芯片销售创历史佳绩;1994年至今,高通公司已向全球包括中国在内的众多制造商提供了累计超过15亿多枚芯片。 在中国向下一代无线技术演进的过程中,高通公司致力于向中国的运营商、制造商和开发商提供支持。作为中国第二大无线通信运营商,中国联通率先于2002年初启动了其全国CDMA网络。截至2005年6月,中国联通已拥有超过3100多万CD MA用户——这得益于其先进的无线话音与数据业务、不断扩大的网络覆盖,以及在全国范围推出了高通公司提供的基于BREW平台的数据业务。到2004年底,中国联通公司活跃的BREW用户已经超过100万,BREW应用的下载量已经超过1000万次,国内支持BREW的手机机型也已超过50种。BREW正在给中国的用户带来非凡的体验。 2004年8月,中国联通与高通公司联手推出“世界风”双模手机,用户可以通过该手机同时享受到高速、高性能的CDMA1X话音与数据业务和GSM语音服务。多模多频终端设备已经成为3G发展的未来趋势,这使中国的运营商第一次走在了全世界的前面。 为满足用户在个人导航、儿童安全保障、销售人员管理和物流跟踪服务等方面的需求,1999年,高通公司开始了专门针对无线设备的个人定位技术的研发,即gps One。从2003年开始,中国联通在BREW平台上推出了基于高通公司gpsOne技术的定位业务——“定位之星”,该项业务目前已覆盖全国。 2003年6月,高通公司宣布,将投资1亿美元以资助那些从事CDMA产品、应用与服务开发及商业化的中国初创企业。这笔投资正在逐渐兑现中。截至目前,已有三家中国企业获得投资。高通公司相信,这笔面对中国市场的投资,会促进CDMA 在全球范围的应用。 [编辑本段] 高通公司发展历程 1985年7月,七位有识之士聚集在圣迭戈Irwin Jacobs博士的家中共商大计。这几位富有远见的人-Franklin Antonio、Adelia Coffman、Andrew Cohen、Klein Gilhousen、Irwin Jacbos、Andrew Viterbi和Harvey White最终达成一致,决定创建“QUALity COMMunications”,他们的宏伟蓝图造就了20年后电信业中最耀眼的新星QUALCOMM高通公司。 高通公司成立之初主要为无线通讯业提供项目研究、开发服务,同时还涉足有限的产品制造。公司的先期目标之一是开发出一种商业化产品。由此而诞生了OmniTR

高通平台分析步骤

一,下载分析步骤: 高通软件分为烧录部分(ARM9)和下载部分(ARM11),MEMORY在贴片前要先烧录ARM9部分。 高通7227平台为例,当软件只有AMR9部分时开机电流会跑到150mA左右才正常(其它平台电流不一定一样)。 正常下载方式夹具需要VBAT(电池电压,设置为通道1)和VCHG(充电电压,设置为通道2)两路电压同时设置为3.8V供电。当电脑设备管理器能找到ADB interface(fastboot mode)端口就能下载ARM11软件。 正常下载时手机不能找到ADB端口时,故障分析步骤如下: (1)小电流(70mA以下)和大电流(200mA以上)请考虑贴片或物料问题,参考原理图分析问题。 (2)固定不动电流(70mA)较大可能是MEMORY里没有ARM9软件或软件不能运行造成。正常的板子拆下MEMORY,开机电流就是固定在70mA。固 定不动电流(100 mA)可能是ARM9软件错误或CPU不能正常工作造成。 (3)电流在70至150 mA间跳动,但连接到PC不能找到ADB端口。此时需要加LCD看板子的状态,正常是开机后进入fastboot mode(LCD显示纯黑色 背景,有三行英文字符);不正常的大多是开机白屏,多是CPU或软件问 题。 备注:当一块板子在下载位不能下载时,要清楚知道板子的状态。以上描述针对从未下载过ARM11软件的板子。当下载ARM11失败的(开机白屏或定在开机LOGO不动的),要重新下载软件只能通过强行进入下载模式去下载软件,因为用正常下载方式只能进入关机充电模式;如果强行进入下载模式无效则只能拆下MEMORY重新烧录。 二,校准分析(BT1): ->A00001 Serial Connect:开机后,PC识别手机端口。如果PC在设备管理器上识别端口,但测试程序还是不能连接端口,此时要检查QPST有没有把端口加入。 ->A00002 Change Mode to FTM:转化模式进入工程测试模式(BT1时是在FTM模式下运作) ->A00003 SWVersion1201-151-286-562-M76XX-TFNCKNLYM-60301

【一指禅神功●手机操作教程】┊高通平台IMEI串号、MEID码写入操作教程

【一指禅神功●手机操作教程】┊高通平台IMEI串号、MEID 码写入操作教程 高通平台手机IMEI串号丢失怎么办?打开后盖记录下IMEI串号和MEID码,按下列操作即可。1、启动写号工具计算机启动后,双击工具的运行图标,进入运行界面。下载:本帖隐藏的内容QESNInfoV1.00.05_setup.exe (2.19 MB, 下载次数: 467)2、登录工具启动后,请出现登录界面,如下图所示:登录权限分为Operator 和Administrator 两级。Operator权限针对操作工,没有配置权限;Administrator 权限针对产线管理员,可以对工具进行配置。通过点击右侧的”!”按钮,可切换至Administrator 身份,Administrator的登录密码为htcdmaesn。Operator 身份没 有密码,按“OK”键可以直接进入。3、数据库工具运行时, 会在D:\Uniscope Test Data Store\Database 目录生成数据库UniscopeTestData.mdb,所写号码将记录至该数据库。 如需手动查看数据库,需要使用Microsoft 的Office Access 工具打开,数据库密码是mstest.如果工具启动时提示数据 库生成失败,请检查电脑是否有D 盘分区。4、工具配置点击主界面上的”Setup”按钮,进入设置界面。设置界面分为“系统设置(Setting)”和“信息设置(Information)”两个页面。⑴系统设置系统设置界面如所示。“Choose Input or scanitem” 中,

“Input or scan ESN”:该项目选中后,可以输入及写入 ESN/MEID(CDMA为主卡的情况)” Input or scan IMEI”:该 项目选中后,可以输入及写入IMEI 号。对于G+C 以及G+G 手机的写号,需要选中该项。“Input subIMEI”:对于G+G 手机,要写入两个IMEI号,因此需要选中该项以写入副卡IMEI。“Choose Write ESN orMEID” 栏中,可根据需要,选择写入ESN 还是MEID。“Service ProgrammingItem” “Test Verify Item” “Incremental Change byESN”这几栏暂时不支持,不 需要设置。⑵信息设置信息设置页主要是设置一些相关信息的检测,如图3 所示。目前需要设置下面几项:ESN Header: 输入ESN 的前几位。如果所输入的ESN 或MEID 与其不一致,将给出信息提示。IMEI Header: 输入IMEI 的前几位。如果所输入的IMEI 与其不一致,将给出信息提示。Mobile Model: 所写手机的型号。手机型号会和所写手机的SN 号 /IMEI号以及存入数据库。SN Header,NAL Header, S/Wversion,PRL Version,Default SPC,RTRE Config 这几项目前没有使用。⑶写号操作写号前,请确认手机未插入任何SIM 卡,否则会导致写号不稳定。进入工具操作界 面后,显示如图所示。首先选择端口为“USB”(图4中红圈1 所示),在手机未连接状态下,图中红圈2 区域显示黄色的Searching 图标,并且MEID状态栏显示”???????”。对于8X25 平台,手机开机后连接电脑,电脑会自动出现Diag

半导体产业介绍

半导体整个生态链 主要分为:前端设计(design),后端制造(mfg)、封装测试(package),最后投向消费市场。 不同的厂商负责不同的阶段,环环相扣,最终将芯片集成到产品里,销售到用户手中。半导体厂商也分为2大类,一类是IDM (Integrated Design and Manufacture),包含设计、制造、封测全流程,如Intel、TI、Samsung这类公司;另外一类是Fabless,只负责设计,芯片加工制造、封测委托给专业的Foundry,如华为海思、展讯、高通、MTK(台湾联发科)等。 前端设计是整个芯片流程的“魂”,从承接客户需求开始,到规格、系统架构设计、方案设计,再到Coding、UT/IT/ST(软件测试UT:unit testing 单元测试IT: integration testing 集成测试ST:system testing 系统测试),提交网表(netlist或称连线表,是指用基础的逻辑门来描述数字电路连接情况的描述方式)做Floorplan,最终输出GDS(Graphics Dispaly System)交给Foundry做加工。由于不同的工艺Foundry提供的工艺lib库不同,负责前端设计的工程师要提前差不多半年,开始熟悉工艺库,尝试不同的Floorplan设计,才能输出Foundry想要的GDS。 后端制造是整个芯片流程的“本”,拿到GDS以后,像台积电,就是Foundry 厂商,开始光刻流程,一层层mask光刻,最终加工厂芯片裸Die。 封装测试是整个芯片流程的“尾”,台积电加工好的芯片是一颗颗裸Die,外面没有任何包装。从晶圆图片,就可以看到一个圆圆的金光闪闪的东西,上面横七竖八的划了很多线,切出了很多小方块,那个就是裸Die。裸Die是不能集成到手机里的,需要外面加封装,用金线把芯片和PCB板连接起来,这样芯片才能真正的工作。 台积电是目前Foundry中的老大,华为麒麟系列芯片一直与台积电合作,如麒麟950就是16nm FF+工艺第一波量产的SoC芯片。 半导体行业的公司具主要分为四类: 集成器件制造商IDM (Integrated Design and Manufacture):指不仅设计和销售微芯片,也运营自己的晶圆生产线。Intel,SAMSUNG(三星),东芝,ST(意法半导体),Infineon(英飞凌)和NXP(恩智浦半导体)。 无晶圆厂供应商Fabless:公司自己开发和销售半导体器件,但把芯片转包给独立的晶圆代工厂生产。例如:Altera(FPL),爱特(FPL),博通(网路器件),CirrusLogicCrystal(音频,视频芯片),莱迪思(FPL),英伟达(FPL),

高通case提交指南2015Oct(4)(1)

高通CASE提交指南 2015. Oct. 1. 高通CASE提交注意事项 1.1 Platform 指明基带芯片型号,如8996,8994,8992, 8936, fusion3,8974等,即使认为是芯片平台无关的,也尽量指明目前发现问题的,或最容易重现的平台,手头有调试板的平台。 涉及到射频(RF)和电源管理(PMIC)芯片, 同时也指明这两款芯片型号以及射频平台配置,如RF configuration APAC, NA717, SV_VZ, CMCC SGLTE. 1.2 关于硬件design review 一般的case类型为wireless support大类,wireless support下面再分为硬件和软件类型。 design review类型为单独的大类,在提交硬件design review时(包括原理图/PCB/PDN) 请选择design review case类型。 提交design review的时候,对于原理图请提供pdf格式并且是可搜索的,同时填写文档80-V5756-3(文档内包括RF port mapping和框图) 1.3 Problem Area Code ●仔细的判断是软件问题还是硬件问题,以尽量符合实际情况,有助于加快问 题解决。 ●一定要仔细填写Problem Area Code,从初步的分析确定问题最有可能发生的 部分,轻率填写不准确或者错误的Problem Code有可能会大大延迟CASE 的处理进程,使简单的问题不能得到快速应答。 ●尽量不要使用模糊的Problem Area Code,如Other, Crash,这种往往需要更长 的时间分到正确的处理人 关于Problem Area Code的详细解释,见第四、五章。 1.4 Build id/version 一定要填写当前使用的版本号和配置ID,如M8916AAAAANLYD1030.2, M6290AKPRZL120020,其中AKPRZL是build id, 120020是版本号。有时高通的一个发布版本中包含有几种配置,也要指明用的是哪一个编译命令,如

相关主题
文本预览
相关文档 最新文档