首页 MTK平台驱动调试介绍PPT课件

MTK平台驱动调试介绍PPT课件

举报
开通vip

MTK平台驱动调试介绍PPT课件Agenda一、驱动调试开发周期(一)给出EVT贴片软件(二)EVT至MP驱动调试(三)MP后项目维护二、驱动调试步骤(一)掌握资料(二)EVT贴片软件的整合(三)各模块调试优化三、各模块调试介绍一.驱动调试开发周期(一)给出EVT贴片软件接手新项目后需要根据硬件资源配置表和机器的配置整合一版软件,用于EVT试产主板贴片用,最低要求要能开机,背光能够点亮。如果LCD能点亮正常显示,则有利于产线测试,加快项目进度。(二)EVT至MP驱动调试拿到主板后调试各个模块:调试LCD、Camera效果等,保证各个模块能够正常工...

MTK平台驱动调试介绍PPT课件
Agenda一、驱动调试开发周期(一)给出EVT贴片软件(二)EVT至MP驱动调试(三)MP后项目维护二、驱动调试步骤(一)掌握资料(二)EVT贴片软件的整合(三)各模块调试优化三、各模块调试介绍一.驱动调试开发周期(一)给出EVT贴片软件接手新项目后需要根据硬件资源配置表和机器的配置整合一版软件,用于EVT试产主板贴片用,最低要求要能开机,背光能够点亮。如果LCD能点亮正常显示,则有利于产线测试,加快项目进度。(二)EVT至MP驱动调试拿到主板后调试各个模块:调试LCD、Camera效果等,保证各个模块能够正常工作。一直到量产前需要和硬件,测试工程师不断沟通解决出现的问题。(三)MP后项目维护量产后需要跟进产线出现的问题及客户反映的问题。二.驱动调试步骤(一)掌握资料通常开始一个新项目的驱动调试的时候,需要掌握以下资料。1.硬件资源配置表(Hardwareresourcetable)它包括BB上所有硬件资源的用法:GPIO/GPOInterfaceInterruptsettingKeypadsettingADCsettingChipSelect/Audiosetting/T-FlashCardInterface2.硬件原理图详细的硬件接法,便于调试时参考用。3.产品规格书/产品定义了解项目定义:机器的结构形式、LCD像素大小、sensor类型等。以上资料由项目经理和硬件工程师给出。(二)EVT贴片软件的整合1.配置makefilexxx_GPRS.mak(mcu\make)Option.mak(mcu\make)不同的项目需求不同,需要修改和添加一些宏开关控制。基本格式和步骤:MXX_GPRS.mak:XXX_XXX=XXXXXX_XXX=NONEXXX_XXX=TRUEXXX_XXX=FALSEOption.mak:ifdefXXX_XXXifneq($(strip$(XXX_XXX)),FALSE)COM_DEFS+=XXX_XXXendifendif代码中就使用XXX_XXX来控制相关代码;#ifdefined(XXX_XXX)//addcodehere#endif驱动常用的一些宏开关:RF_MODULE=SIMC25_06B_MT6139E#MT6129DAFC_VCXO_TYPE=VCXO#VCTCXOPMIC=MT6305#ChargeFunction,NONE,MT6305orMT6318PLATFORM=MT6225LCD_MODULE=TRULY_1N2007_LCMMSDC_CARD_SUPPORT_TYPE=MSDC_SD_MMCFM_RADIO_CHIP=TEA5760UK#NONE,TEA5767HN,NAND_SUPPORT=FALSEUSB_IN_NORMAL_MODE_SUPPORT=TRUEISP_SUPPORT=TRUE#TRUE,FALSECMOS_SENSOR=OV7670BLUETOOTH_SUPPORT=BTMTK_MT6601TOUCH_PANEL_SUPPORT=TRUE#TRUEorFALSEPHONE_TYPE=BAR#BAR,CLAMSHELL,SLIDEPLATFORM_NAME=XXMAIN_LCD_SIZE=240X320WEBCAM_SUPPORT=TRUE#TRUE,FALSEforWEBCAMERAsupportYUV_SENSOR_SUPPORT=TRUE#TRUE,FALSE2.根据Hardwareresourcetable配置硬件资源配置GPIO/GPO:GPIO/GPO的初始化设置;配置中断号:蓝牙中断号、Charger&USB中断检测号等;键盘定义:设置对power键才能正常开机;ADC通道设置:Charger&USB检测通道等;其他设置:T卡,音频PA开关设置等。3.整合LCD代码及背光代码调试LCD和背光也需要从供应商处拿到以下资料:LCM型号,例如:TRULY_1N2007_LCM模组驱动IC型号及spec,例如:R61513Initialcode/sleepcode背光芯片spec背光代码的整合需要注意的是脉冲计数方式还是PWM方式控制EN脚。LCD代码整合需要注意:数据传输的位数、blockwrite刷屏时起始、结束坐标的寄存器设置等等。后面再详细介绍。到这里为止EVT软件就可以整合出来,提供给产线贴片用了。(三)各模块调试优化拿到主板后需要开始各模块的调试和优化,比如LCD显示效果等。三、各模块调试介绍主要包括:GPIO/GPOBacklightLCMVibratorTouchpanelCameraKeypadAFEADCEINTCharger/USBFlashBTOthers模块调试:GPIO/GPO\mcu\custom\drv\misc_drv\SIMC25_06B_BB\gpio_drv.cvoidGPIO_init(void){……/*GPIO0-7配置为GPIO模式*/DRV_WriteReg(GPIO_MODE1,0x0000);DRV_WriteReg(GPIO_MODE2,0x5555);DRV_WriteReg(GPIO_MODE3,0x1555);DRV_WriteReg(GPIO_MODE5,0x5680);DRV_WriteReg(GPIO_MODE6,0x5515);DRV_WriteReg(GPIO_MODE7,0x1555);……DRV_WriteReg(GPO_MODE,0x0005);//GPO0forEA24……#ifdefined(__BAR_K28__)GPIO_ModeSetup(2,0);GPIO_InitIO(1,2);GPIO_WriteIO(0,2);#elifdefined(__BAR_S50__)//LK2007-06-27GPIO_ModeSetup(0,0);GPIO_InitIO(1,0);GPIO_WriteIO(0,0);……#endif}模块调试:Backlight\mcu\custom\drv\misc_drv\SIMC25_06B_BB\custom_equipment.ckal_boolcustom_cfg_gpio_set_level(kal_uint8gpio_dev_type,kal_uint8gpio_dev_level){……switch(gpio_dev_type){caseGPIO_DEV_LED_MAINLCD:……//用屏的宏开关来控制代码……break;……}}注意事项:需根据硬件接法区分背光芯片使能端控制是脉冲计数还是PWM方式。脉冲计数:在GPIO端输出高低电平来模拟脉冲,连续发送一定数量的脉冲到背光芯片使能端,在其限定的范围之内,脉冲数越多,背光越亮,反之越暗。用此方式可以节省PWM资源用于其他用途。if(gpio_dev_level){……switch(gpio_dev_level){case1:temp=4;//7break;case2:temp=11;//13break;case3:temp=16;//19break;case4:temp=20;//25break;case5:temp=25;//27break;default:temp=16;break;}for(i=0;i 目录 工贸企业有限空间作业目录特种设备作业人员作业种类与目录特种设备作业人员目录1类医疗器械目录高值医用耗材参考目录 下添加SUNRISE_0255_LCM模块;目录以SUNRISE_0255_LCM为名。加入和修改5个文件分别为:lcd.clcd_hw.hlcd_sw.hlcd_sw_inc.hlcd_sw_rnd.hlcd.c:实现LCD的驱动接口;关键函数:init,sleepin,sleepout,blockwrite,init_lcd_interface等。lcd_sw.h:配置dataaddress;commandaddress和outputformat等;lcd_sw_inc.h:配置LCDWIDTH和HEIGHT;lcd_sw_rnd.h:一般不需修改;lcd_hw.h:一般不需要修改;关键函数介绍:Voidinit_lcd_interface(void):LCD读写时序的设置,参考driveric的spec,一般差异不大,较稳定;VoidLCD_Init_xxxx(void):加入供应商给的初始化设置代码。需要注意开始部分的Reset信号设置,延时要满足IC的要求。LCD的显示效果基本上就在这段代码里调整。如果要兼容其它屏,需要在reset后读取IC的ID来区分不同的屏;VoidLCD_EnterSleep_xxxx(void)和VoidLCD_ExitSleep_xxxx(void):加入厂商给的sleep代码;voidLCD_BlockWrite_HX8312A(kal_uint16startx,kal_uint16starty,kal_uint16endx,kal_uint16endy):刷屏函数,设置刷屏时的起始、结束地址。Kal_boolESD_check(void):ESD措施,防止静电干扰使寄存器数据乱掉,定时去检测LCM的IC寄存器数据,如果数据乱了,则重新写入,保证LCD能正常显示。几个关键指令(Lcd_sw.h):写寄存器:LCD_CtrlWrite_xxxx()写数据:LCD_DataWrite_xxxx()读数据:LCD_DataRead_xxxx()LCD常见问题及调试方法水波纹(flicker):正负电压不对称导致,需要调整Vcom值。白屏或花屏:可能是init寄存器设置有问题,在初始化代码中调试,刷一屏红黄蓝三色,如果正常则可以排除初始化设置的问题。送数据的方式有问题,分清8bit/9bit/16bit/18bit。Blockwrite地址寄存器设置错误。颜色失常:需要调整gamma值,需要厂家调试。整体色调偏暗或是偏淡:对比度有问题,调整涉及到电压的几个相关寄存器。模块调试:Vibrator\mcu\custom\drv\misc_drv\SIMC25_06B_BB\custom_equipment.ckal_boolcustom_cfg_gpio_set_level(kal_uint8gpio_dev_type,kal_uint8gpio_dev_level){……switch(gpio_dev_type){caseGPIO_DEV_VIBRATOR:……//addcodehere……break;……}}马达控制方式:1.GPIO直接控制:只有高低电平的切换。2.PWM方式:可以调整占空比和频率来调节马达的振感。模块调试:Touchpanelcustom\drv\misc_drv\M678_BB\touch_panel_custom.ccustom\drv\misc_drv\M678_BB\touch_panel_custom.hcustom\drv\misc_drv\M678_BB\touch_panel_spi.ccustom\drv\misc_drv\M678_BB\touch_panel_spi.hdrv\src\touch_panel.cdrv\src\touch_panel_main.c修改点包括:GPIO分配、ADC值、坐标值、中断配置、压力检测等。经常调试用到的函数:IsPressureValid:压力检测,检测计算出Rtouch值,可用来去除飞笔。Tp_read_adc:读取当前pendown的adc值,可以改变算法,调整touchpanel的效果。其他的诸如:touch_panel_HISR、touch_panel_init、touch_panel_down_hdr,可以在这些函数里加一些延时处理,可以改善断笔飞笔。模块调试:Camera以OV9655为例:步骤1:XXX_GPRS.mak中配置ISP_SUPPORT和CMOS_SENSOR:ISP_SUPPORT=TRUECMOS_SENSOR=OV9655CAMERA_PIXEL=ONE_MEGA_PIXEL注:(一般30万象素可以插值到100万;130万可以插值到200万象素)如果是YUVsensor,需要设置:YUV_SENSOR_SUPPORT=TRUE步骤2:Mcu\custom\drv\image_sensor下添加OV9655目录;添加或修改文件:camera_hw.c:ModulePoweron/off控制;(GPIO分配要看硬件的资源分配表)camera_para.c:ISP、Sensor相关寄存器配置;在实际调试中对比效果来修改;image_sensor.c:timing;sensorinit;poweron/off;preview;capture等接口实现;image_sensor.h:有关sensor一些属性设置(一些宏定义);camera_info.c:一般不需修改;在完成所有的功能之后,效果调试是主要工作。主要工具:META;CCT等;关于分屏的一点说明:Camera录像时经常碰到preview或者capture分屏的现象。如果录像后保存的片源放到电脑上看还是有分屏,说明问题出在sensor录像这一块。通常我们是降低录像的帧率来解决问题,15fps->12fps。如果是preview时移动手机在屏上看到的分屏,特别是QVGA的屏经常碰到这种情形。则原因是sensor采集数据往屏的buffer里填数据的时序和LCD刷屏的时序不匹配的导致。二者间缺少一个握手信号,所以经常会出现两帧图像重叠的现象,即LCD上看到的分屏。后续MTK会引出一个SYNC同步信号用于LCD和sensor的匹配,解决这个问题。关于显示效果的调试:RAWsensor数据处理这一块是BB的ISP处理,也需要CCT工具调试,通常需要等mtk工程师过来支持;YUVsensor数据处理是在sensor的IC里做的,所以一般是IC厂商过来支持。但是缺少专业工具调试,有同事已经做好了用ATcommand写寄存器数据调sensor的方法,比较方便。模块调试:Keypad键盘定义需要对照硬件资源配置表来设置。custom\drv\misc_drv\M678_BB\keypad_def.cconstkeypad_structkeypad_custom_def={#ifdefined(__PHONE_SLIDE__)//滑盖机型#ifdefined(__SLIDE_M678)//addm678keypaddefinehere//ROW0(第一列)DEVICE_KEY_XX,……//ROW1(第二列)…….//…….#else#endif#elifdefined(__PHONE_BAR__)//直板机型//#elifdefined(__PHONE_SPIN)//旋转机型//#elifdefined(__PHONE_CLAMSHELL)//翻盖机型//#endif};如果需要添加新键,除了上述外还需修改以下几处:interface\hwdrv\kbd_table.h定义DEVICE_KEY_XX:注意顺序#defineDEVICE_KEY_XX顺序值plutommi\mmi\Framework\Osl\OslSrc\KeyBrd.c假设DEVICE_KEY_XX为特定的按键定义特定的按键constU16PresentAllKeys[]={KEY_0,KEY_1,KEY_2,KEY_3,KEY_4,KEY_5,……//定义特定的按键KEY_XX,};键盘映射(注意加入顺序要与PresentAllKeys[]中一致)staticconstKeyPadMapnKeyPadMap[]={{DEVICE_KEY_0,KEY_0,KEY_TIMER_ID0,TONE_DTMF_0,DEVICE_AUDIO_PLAY_INFINITE},{DEVICE_KEY_1,KEY_1,KEY_TIMER_ID1,TONE_DTMF_1,DEVICE_AUDIO_PLAY_INFINITE},…………//映射特定的按键{DEVICE_KEY_XX,KEY_XX,KEY_TIMER_IDXX,TONE_DTMF_1,DEVICE_AUDIO_PLAY_INFINITE},};定义TIMERID:即KEY_TIMER_IDXX在plutommi\mmi\Inc\TimerEvents.h中顺序加入KEY_TIMER_IDXX;在drv\src\kbdmain.c中可以修改debouncetime,LongpressTime,RepeatTime等参数来满足特殊的需要。模块调试:AFEcustom\audio\M678_BB\afe.c(模拟开关、PA切换等)custom\audio\M678_BB\audcoeff.c(FIRInput/Output参数)custom\audio\M678_BB\nvram_default_audio.c(GAIN值)l1audio\afe2.c(AFE管理代码)硬件给出的音频参数在audcoeff.c和nvram_default_audio.c中修改。Afe.c中切换PA开关的动作,通常是一个GPIO或GPO来控制。Afe2.c中都是afe的管理代码,比如左右声道切换的函数等等,一般比较成熟,很少修改。可以关注一下里面函数的调用。模块调试:ADC以MT6226平台为例,可用资源有ADC0-ADC6。通常用到ADC通道的有charger&USB检测、耳机检测等等,也可以添加新的设备检测。以线控为例,介绍一下修改或者添加流程:interface\hwdrv\Bmt.htypedefenum{vbat_adc_channel=0,visense_adc_channel,vbattmp_adc_channel,……#ifdefined(__LINE_CONTROL_EARPHONE_SUPPORT__)remote_adc_channel,#endif……}adc_channel_type;custom\drv\misc_drv\M678_BB\adc_channel.c#ifdefined(__LINE_CONTROL_EARPHONE_SUPPORT__)constkal_uint8ADC_REMOTE=6;//假设硬件接ADC6#endifkal_uint8custom_adc_get_channel(adc_channel_typetype){Switch(type){………#ifdefined(__LINE_CONTROL_EARPHONE_SUPPORT__)caseremote_adc_channel:return((kal_uint8)ADC_REMOTE);#endif………}#endif};custom\drv\misc_drv\M678_BB\auxmain.cvoidaux_task_main(task_entry_struct*task_entry_ptr){#ifdefined(__LINE_CONTROL_EARPHONE_SUPPORT__)kal_uint8remote_adc_logic_id;kal_uint8remote_adc_no#endif…………//创建#ifdefined(__LINE_CONTROL_EARPHONE_SUPPORT__)remote_adc_no=custom_adc_get_channel(remote_adc_channel)remote_adc_logic_id=adc_sche_create_object(MOD_AUX,remote_adc_no,40,1,KAL_TRUE);#endif……while(1){receive_msg_ext_q(task_info_g[task_entry_ptr->task_indx].task_ext_qid,¤t_ilm);switch(current_ilm.msg_id){……//读ADCcaseMSG_ID_READ_ALL_ADC_CHANNEL_REQ:……#ifdefined(__LINE_CONTROL_EARPHONE_SUPPORT__)aux_read_adc_channel(remote_adc_logic_id);#endif……break;……//销毁caseMSG_ID_BMT_ADC_MEASURE_DONE_CONF:……#ifdefined(__LINE_CONTROL_EARPHONE_SUPPORT__)elseif(mea_done_ptr->adc_sche_id==remote_adc_logic_id){adc_measure_count++;remote_value=(kal_int32)mea_done_ptr->volt;aux_remove_adc_channel(remote_adc_logic_id);}#endif……}}}模块调试:EINTM6226平台有Eint0-Eint7,Eint4-Eint7是GPIO复用过来的。以线控为例,介绍一下修改或者添加流程:interface\hwdrv\Eint.htypedefenum{……#ifdefined(__LINE_CONTROL_EARPHONE_SUPPORT__)remote_eint_chann,#endif……}eint_channel_type;custom\drv\misc_drv\M678_BB\Eint_def.c#ifdefined(__LINE_CONTROL_EARPHONE_SUPPORT__)constkal_uint8REMOTE_EINT_NO=3;//假设硬件配置为EINT3#endifkal_uint8custom_eint_get_channel(eint_channel_typetype){switch(type){……#ifdefined(__LINE_CONTROL_EARPHONE_SUPPORT__)caseremote_eint_chann:return((kal_uint8)REMOTE_EINT_NO);#endif……}}custom\drv\misc_drv\M678_BB\auxmain.c//中断处理函数voidREMOTE_EINT_HISR(void){if(remote_state)//高电平{//相关处理代码}else//低电平{//相关处理代码}}//中断注册voidaux_task_main(task_entry_struct*task_entry_ptr){kal_uint8remote_eint_no;……#ifdefined(__LINE_CONTROL_EARPHONE_SUPPORT__)remote_eint_no=custom_eint_get_channel(remote_eint_chann);EINT_Registration(remote_eint_no,KAL_TRUE,remote_state,REMOTE_EINT_HISR,KAL_TRUE);#endif……}在注册中断时要注意:中断触发方式:电平触发/边沿触发?debounce:Enable/Disable?电平触发高电平有效还是低电平有效等问题。Debouncetime对于Eint0-Eint3,可以通过下面的文件来修改debouncetime;而Eint4-Eint7没有debounce机制。custom\drv\misc_drv\M678_BB\Eint_def.ckal_uint8custom_eint_sw_debounce_time_delay[EINT_MAX_CHANNEL]={50,/*EINT0*/25,/*EINT1*/50,/*EINT2*/50/*EINT3*/};也可通过下述函数来修改EINTaddr()EINT_Set_HW_Debounce()EINT_SW_Debounce_Modify()模块调试:Charger/USBcustom\drv\misc_drv\M678_BB\chr_parameter.c充电相关电压和电流的设置:bmt_customized_structbmt_custom_chr_def[]={};里面包括一些重要的电压电流值的设置。电池格数的算法:custom_equipment.c中custom_cfg_vbat_level_regulator函数处理每格电压的设置:nvram_user_config.c(06B)/custom_hw_default.c(05C)/*BatteryvoltageLevel*/3500000,/*LowBatteryPoweroff*/3550000,/*LowBattery*//*batterylevel1~8*/3580000,3630000,3740000,3840000,3950000,9999999,9999999,9999999,CHARGER/USB检测的电压值:staticconstkal_int32chr_usb_detect_volt;因为charger和usb的检测是共用一个中断和adc通道,所以要靠一个电压值来区分是插入的是charger还是usb。以10pinminiusb接口来说,插charger的时候adc检测到的电压是3v左右;而插usb是1v左右。所以设定chr_usb_detect_volt为2V,高于2V判定为charger,代码走charger的处理流程;低于2V走usb的处理流程。注意:10pin的接口因为插拔方便,所以容易出现快速插拔时由于碰到接口弹片导致电压不稳而误报的现象。解决办法:延长此中断响应的时间。custom\drv\misc_drv\M678_BB\Eint_def.ccustom_eint_sw_debounce_time_delay[EINT_MAX_CHANNEL]另外此模块可以关注一下以下文件Mcu\bmt\*.*Mcu\drv\src\pwic.模块调试:Flash添加新的NAND:Drv\src\NAND_MTD.cstaticconstflash_listNAND_ID_Table[]={//{ID,planesizeinMB,blocksizeinKB,pagesizeinB,addresscycle,IObuswidth,mtdsubdriver}//添加新的NAND的相关信息(参考芯片Spec)}DA(DownloadAgent)部分代码(一般不需修改)DA_SRC\src\nand_dev_tbl.cConstNAND_Device_Sg_NandFlashDevTbl[]={//加入新的NAND信息(参考芯片Spec)};添加新的NorFlashDA_SRC\src\flash_dev_tbl.cConstNor_Device_Sg_FlashDevTbl[]={//加入新的Nor信息(参考芯片Spec)};对于DA的修改,需重新生成DA文件用于FlashDownloadTool模块调试:BTMTK开放代码较少。Driver基本上设置一下中断号和几个功能引脚就OK了。如果是MTK6601的蓝牙。需要在以下文件中设置:\mcu\custom\common\Bt_common_config.c\mcu\custom\drv\bluetooth\SIMC25_06B_BB\Btmtk_config.c如果是其他蓝牙在以下文件中设置:\mcu\custom\app\SIMC25_06B_BB\Bt_user_config.c模块调试:Others新需求,新功能调试:转盘、指纹识别、GPS、手机电视等等。
本文档为【MTK平台驱动调试介绍PPT课件】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
机构认证用户
爱赢
公司经营范围:网络软件设计、制作、图文设计、影视制作(编辑)
格式:ppt
大小:682KB
软件:PowerPoint
页数:0
分类:教育学
上传时间:2021-02-24
浏览量:8