MTK平臺驅(qū)動調(diào)試介紹.ppt_第1頁
MTK平臺驅(qū)動調(diào)試介紹.ppt_第2頁
MTK平臺驅(qū)動調(diào)試介紹.ppt_第3頁
MTK平臺驅(qū)動調(diào)試介紹.ppt_第4頁
MTK平臺驅(qū)動調(diào)試介紹.ppt_第5頁
已閱讀5頁,還剩32頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

1、Agenda,一、驅(qū)動調(diào)試開發(fā)周期 (一)給出EVT貼片軟件 (二)EVT至MP驅(qū)動調(diào)試 (三)MP后項目維護 二、驅(qū)動調(diào)試步驟 (一)掌握資料 (二)EVT貼片軟件的整合 (三)各模塊調(diào)試優(yōu)化 三、各模塊調(diào)試介紹,一. 驅(qū)動調(diào)試開發(fā)周期,(一)給出EVT貼片軟件 接手新項目后需要根據(jù)硬件資源配置表和機器的配置整合一版軟件,用于EVT試產(chǎn)主板貼片用,最低要求要能開機,背光能夠點亮。如果LCD能點亮正常顯示,則有利于產(chǎn)線測試,加快項目進度。 (二)EVT至MP驅(qū)動調(diào)試 拿到主板后調(diào)試各個模塊:調(diào)試LCD、 Camera效果等,保證各個模塊能夠正常工作。一直到量產(chǎn)前需要和硬件,測試工程師不斷溝通解

2、決出現(xiàn)的問題。 (三)MP后項目維護 量產(chǎn)后需要跟進產(chǎn)線出現(xiàn)的問題及客戶反映的問題。,二. 驅(qū)動調(diào)試步驟,(一)掌握資料 通常開始一個新項目的驅(qū)動調(diào)試的時候,需要掌握以下資料。 1.硬件資源配置表(Hardware resource table) 它包括BB上所有硬件資源的用法: GPIO/GPO Interface Interrupt setting Keypad setting ADC setting Chip Select/Audio setting/T-Flash Card Interface 2.硬件原理圖 詳細的硬件接法,便于調(diào)試時參考用。 3.產(chǎn)品規(guī)格書/產(chǎn)品定義 了解項目定義:

3、機器的結(jié)構(gòu)形式、LCD像素大小、sensor類型等。 以上資料由項目經(jīng)理和硬件工程師給出。,(二)EVT貼片軟件的整合,1.配置 makefile xxx_GPRS.mak(mcumake) Option.mak(mcumake) 不同的項目需求不同,需要修改和添加一些宏開關(guān)控制。 基本格式和步驟: MXX_GPRS.mak: XXX_XXX = XXX XXX_XXX= NONE XXX_XXX = TRUE XXX_XXX = FALSE Option.mak: ifdef XXX_XXX ifneq ($(strip $( XXX_XXX),FALSE) COM_DEFS += XXX_

4、XXX endif endif 代碼中就使用XXX_XXX來控制相關(guān)代碼; #if defined(XXX_XXX) /add code here #endif,驅(qū)動常用的一些宏開關(guān): RF_MODULE = SIMC25_06B_MT6139E # MT6129D AFC_VCXO_TYPE = VCXO# VCTCXO PMIC = MT6305 # Charge Function, NONE, MT6305 or MT6318 PLATFORM = MT6225 LCD_MODULE = TRULY_1N2007_LCM MSDC_CARD_SUPPORT_TYPE = MSDC_SD_

5、MMC FM_RADIO_CHIP = TEA5760UK # NONE , TEA5767HN, NAND_SUPPORT = FALSE USB_IN_NORMAL_MODE_SUPPORT = TRUE ISP_SUPPORT = TRUE# TRUE, FALSE CMOS_SENSOR = OV7670 BLUETOOTH_SUPPORT = BTMTK_MT6601 TOUCH_PANEL_SUPPORT = TRUE # TRUE or FALSE PHONE_TYPE = BAR # BAR, CLAMSHELL, SLIDE PLATFORM_NAME = XX MAIN_L

6、CD_SIZE = 240X320 WEBCAM_SUPPORT = TRUE # TRUE, FALSE for WEB CAMERA support YUV_SENSOR_SUPPORT = TRUE # TRUE, FALSE,2.根據(jù)Hardware resource table配置硬件資源,配置GPIO/GPO:GPIO/GPO的初始化設(shè)置; 配置中斷號:藍牙中斷號、Charger DRV_WriteReg(GPIO_MODE2,0 x5555); DRV_WriteReg(GPIO_MODE3,0 x1555); DRV_WriteReg(GPIO_MODE5,0 x5680);

7、DRV_WriteReg(GPIO_MODE6,0 x5515); DRV_WriteReg(GPIO_MODE7,0 x1555); DRV_WriteReg(GPO_MODE,0 x0005); /GPO0 for EA24 #if defined(_BAR_K28_) GPIO_ModeSetup(2,0); GPIO_InitIO(1,2); GPIO_WriteIO(0,2); #elif defined(_BAR_S50_)/LK 2007-06-27 GPIO_ModeSetup(0,0); GPIO_InitIO(1,0); GPIO_WriteIO(0,0); #endif

8、,模塊調(diào)試:Backlight,mcucustomdrvmisc_drvSIMC25_06B_BBcustom_equipment.c kal_bool custom_cfg_gpio_set_level(kal_uint8 gpio_dev_type, kal_uint8 gpio_dev_level ) switch(gpio_dev_type) case GPIO_DEV_LED_MAINLCD: /用屏的宏開關(guān)來控制代碼 break; ,注意事項:需根據(jù)硬件接法區(qū)分背光芯片使能端控制是脈沖計數(shù)還是PWM方式。 脈沖計數(shù):在GPIO端輸出高低電平來模擬脈沖,連續(xù)發(fā)送一定數(shù)量的脈沖到背光芯

9、片使能端,在其限 定的范圍之內(nèi),脈沖數(shù)越多,背光越亮,反之越暗。用此方式可以節(jié)省PWM資源用于其他用途。 if(gpio_dev_level) switch(gpio_dev_level) case 1:temp=4;/7 break; case 2:temp=11;/13 break; case 3:temp=16;/19 break; case 4:temp=20;/25 break; case 5:temp=25;/27 break; default:temp=16; break; for(i=0;itemp;i+) GPIO_WriteIO(0,7); for (j =0;j 100;

10、j+) GPIO_WriteIO(1,7); for(j=0;j20;j+) else GPIO_WriteIO(0,7); ,PWM模式:需要根據(jù)實際情況在Mcucustomdrvmisc_drvcustom_hw_default.c文件中 修改PWM_Level_Info;即頻率和占空比。 MMI對背光的控制: mcuplutommimmigpiogpioSrcGeneralDeviceInterface.c; 關(guān)鍵的幾個函數(shù): void TurnOffBacklight(void):打開背光計時的timer。 Static void BacklightTimerHdlr(void):背光

11、timer調(diào)用處理函數(shù)。 Void TurnOnBacklight(gpio_backlight_time_enum time_enum):打開的背光函數(shù)。 注意: 當(dāng)time_enum=0時,即調(diào)用TurnOnBacklight(0),作用是關(guān)閉背光的timer,使背光保持常 亮不滅。如果需要恢復(fù)正常需要先調(diào)用一下TurnOffBacklight()函數(shù)使timer正常工作。 背光、鍵盤燈的亮滅和lcd sleep in/sleep out在以上函數(shù)里有同步的處理。,模塊調(diào)試:LCM,以SUNRISE_0255_LCM為例 步驟1: XXX_GPRS.mak中配置LCD_MODULE和MAI

12、N_LCD_SIZE; LCD_MODULE = SUNRISE_0255_LCM MAIN_LCD_SIZE = 240X320 Option.mak中加入: COM_DEFS_FOR_SUNRISE_0255_LCM = SUNRISE_0255_LCM HX8312 COLOR_LCD TFT_MAINLCD QVGA_MAINLCD 其中HX8312為LCD driver IC的型號; COLOR_LCD,TFT_MAINLCD,QVGA_MAINLCD為LCD的類型 QVGA_MAINLCD:240X320 QCIF_MAINLCD: 176X220 QQVGA_MAINLCD: 1

13、28X160 如果有Sub LCD;則需要順序加入DUAL_LCD;COLOR_SUBLCD以及 型號名稱。,步驟2: McucustomdrvLCD目錄下添加SUNRISE_0255_LCM模塊; 目錄以SUNRISE_0255_LCM為名。 加入和修改5個文件分別為: lcd.c lcd_hw.h lcd_sw.h lcd_sw_inc.h lcd_sw_rnd.h lcd.c:實現(xiàn)LCD的驅(qū)動接口; 關(guān)鍵函數(shù):init,sleep in,sleep out,block write,init_lcd_interface 等。 lcd_sw.h: 配置data address;command

14、 address和output format等; lcd_sw_inc.h:配置LCD WIDTH和HEIGHT; lcd_sw_rnd.h: 一般不需修改; lcd_hw.h: 一般不需要修改;,關(guān)鍵函數(shù)介紹: Void init_lcd_interface(void):LCD讀寫時序的設(shè)置,參考driver ic的spec,一般 差異不大,較穩(wěn)定; Void LCD_Init_xxxx(void):加入供應(yīng)商給的初始化設(shè)置代碼。需要注意開始部 分的Reset信號設(shè)置,延時要滿足IC的要求。LCD的顯示效果基本上就在這段代 碼里調(diào)整。如果要兼容其它屏,需要在reset后讀取IC的ID來區(qū)分不

15、同的屏; Void LCD_EnterSleep_xxxx(void)和Void LCD_ExitSleep_xxxx(void):加入廠商 給的sleep代碼; void LCD_BlockWrite_HX8312A(kal_uint16 startx,kal_uint16 starty,kal_uint16 endx,kal_uint16 endy):刷屏函數(shù),設(shè)置刷屏?xí)r的起始、結(jié)束地址。 Kal_bool ESD_check(void):ESD措施,防止靜電干擾使寄存器數(shù)據(jù)亂掉,定時 去檢測LCM的IC寄存器數(shù)據(jù),如果數(shù)據(jù)亂了,則重新寫入,保證LCD能正常顯 示。 幾個關(guān)鍵指令(Lcd_

16、sw.h): 寫寄存器:LCD_CtrlWrite_xxxx() 寫數(shù)據(jù):LCD_DataWrite_xxxx() 讀數(shù)據(jù):LCD_DataRead_xxxx(),LCD常見問題及調(diào)試方法 水波紋(flicker): 正負電壓不對稱導(dǎo)致,需要調(diào)整Vcom值。 白屏或花屏: 可能是init寄存器設(shè)置有問題,在初始化代碼中調(diào)試,刷一屏紅黃藍三色,如果正常則可以排除初始化設(shè)置的問題。 送數(shù)據(jù)的方式有問題,分清8bit/9bit/16bit/18bit。 Blockwrite地址寄存器設(shè)置錯誤。 顏色失常:需要調(diào)整gamma值,需要廠家調(diào)試。 整體色調(diào)偏暗或是偏淡:對比度有問題,調(diào)整涉及到電壓的 幾個

17、相關(guān)寄存器。,模塊調(diào)試:Vibrator,mcucustomdrvmisc_drvSIMC25_06B_BBcustom_equipment.c kal_bool custom_cfg_gpio_set_level(kal_uint8 gpio_dev_type, kal_uint8 gpio_dev_level ) switch(gpio_dev_type) case GPIO_DEV_VIBRATOR: /add code here break; 馬達控制方式: 1.GPIO直接控制:只有高低電平的切換。 2.PWM方式:可以調(diào)整占空比和頻率來調(diào)節(jié)馬達的振感。,模塊調(diào)試:Touch pan

18、el,customdrvmisc_drvM678_BBtouch_panel_custom.c customdrvmisc_drvM678_BBtouch_panel_custom.h customdrvmisc_drvM678_BBtouch_panel_spi.c customdrvmisc_drvM678_BBtouch_panel_spi.h drvsrctouch_panel.c drvsrctouch_panel_main.c 修改點包括: GPIO分配、ADC值、坐標(biāo)值、中斷配置、壓力檢測等。 經(jīng)常調(diào)試用到的函數(shù): IsPressureValid:壓力檢測,檢測計算出Rtouch

19、值,可用來去除飛筆。 Tp_read_adc:讀取當(dāng)前pen down的adc值,可以改變算法,調(diào)整touch panel的 效果。 其他的諸如:touch_panel_HISR、touch_panel_init、touch_panel_down_hdr, 可以在這些函數(shù)里加一些延時處理,可以改善斷筆飛筆。,模塊調(diào)試: Camera,以O(shè)V9655為例: 步驟1: XXX_GPRS.mak中配置ISP_SUPPORT和CMOS_SENSOR: ISP_SUPPORT TRUE CMOS_SENSOR = OV9655 CAMERA_PIXEL = ONE_MEGA_PIXEL 注:(一般30萬

20、象素可以插值到100萬;130萬可以插值到200萬象素) 如果是YUV sensor,需要設(shè)置: YUV_SENSOR_SUPPORT = TRUE 步驟2: Mcucustomdrvimage_sensor下添加OV9655目錄; 添加或修改文件: camera_hw.c:Module Power on/off 控制;(GPIO分配要看硬件的資源分配表) camera_para.c: ISP、Sensor相關(guān)寄存器配置;在實際調(diào)試中對比效果來修改; image_sensor.c:timing;sensor init;power on/off;preview;capture等接口實現(xiàn); ima

21、ge_sensor.h:有關(guān)sensor一些屬性設(shè)置(一些宏定義); camera_info.c: 一般不需修改; 在完成所有的功能之后,效果調(diào)試是主要工作。 主要工具:META;CCT等;,關(guān)于分屏的一點說明: Camera 錄像時經(jīng)常碰到preview或者capture分屏的現(xiàn)象。 如果錄像后保存的片源放到電腦上看還是有分屏,說明問題出在sensor錄像這一塊。通常我們是降低錄像的幀率來解決問題,15fps-12fps。 如果是preview時移動手機在屏上看到的分屏,特別是QVGA的屏經(jīng)常碰到這種情形。則原因是sensor采集數(shù)據(jù)往屏的buffer里填數(shù)據(jù)的時序和LCD刷屏的時序不匹配的

22、導(dǎo)致。二者間缺少一個握手信號,所以經(jīng)常會出現(xiàn)兩幀圖像重疊的現(xiàn)象,即LCD上看到的分屏。 后續(xù)MTK會引出一個SYNC同步信號用于LCD和sensor的匹配,解決這個問題。 關(guān)于顯示效果的調(diào)試: RAW sensor 數(shù)據(jù)處理這一塊是BB的ISP處理,也需要CCT工具調(diào)試, 通常需要等mtk工程師過來支持; YUV sensor數(shù)據(jù)處理是在sensor 的IC里做的,所以一般是IC廠商過來支 持。但是缺少專業(yè)工具調(diào)試,有同事已經(jīng)做好了用AT command 寫寄存器數(shù) 據(jù)調(diào)sensor的方法,比較方便。,模塊調(diào)試: Keypad,鍵盤定義需要對照硬件資源配置表來設(shè)置。 customdrvmisc

23、_drvM678_BBkeypad_def.c const keypad_struct keypad_custom_def = #if defined(_PHONE_SLIDE_) /滑蓋機型 #if defined(_SLIDE_M678) /add m678 keypad define here /ROW 0(第一列) DEVICE_KEY_XX, /ROW 1(第二列) . / . #else #endif #elif defined(_PHONE_BAR_) /直板機型 / #elif defined(_PHONE_SPIN) /旋轉(zhuǎn)機型 / #elif defined(_PHONE_

24、CLAMSHELL) /翻蓋機型 / #endif ;,如果需要添加新鍵,除了上述外還需修改以下幾處: interfacehwdrvkbd_table.h 定義DEVICE_KEY_XX:注意順序 #define DEVICE_KEY_XX 順序值 plutommimmiFrameworkOslOslSrcKeyBrd.c 假設(shè)DEVICE_KEY_XX為特定的按鍵 定義特定的按鍵 const U16 PresentAllKeys = KEY_0, KEY_1, KEY_2, KEY_3, KEY_4, KEY_5, /定義特定的按鍵 KEY_XX, ;,鍵盤映射(注意加入順序要與Presen

25、tAllKeys 中一致) static const KeyPadMap nKeyPadMap = 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, ; 定義TIMER ID: 即K

26、EY_TIMER_IDXX 在plutommimmiIncTimerEvents.h中順序加入KEY_TIMER_IDXX; 在drvsrckbdmain.c中可以修改debounce time,Long press Time, Repeat Time等參數(shù)來滿足特殊的需要。,模塊調(diào)試: AFE,customaudioM678_BBafe.c(模擬開關(guān)、PA切換等) customaudioM678_BBaudcoeff.c(FIR Input/Output參數(shù)) customaudioM678_BBnvram_default_audio.c(GAIN值) l1audioafe2.c (AFE管

27、理代碼) 硬件給出的音頻參數(shù)在audcoeff.c和nvram_default_audio.c中修改。 Afe.c中切換PA開關(guān)的動作,通常是一個GPIO或GPO來控制。 Afe2.c 中都是afe的管理代碼,比如左右聲道切換的函數(shù)等等,一般比較 成熟,很少修改。可以關(guān)注一下里面函數(shù)的調(diào)用。,模塊調(diào)試: ADC,以MT6226平臺為例,可用資源有ADC0-ADC6。 通常用到ADC通道的有charger,customdrvmisc_drvM678_BBadc_channel.c #if defined(_LINE_CONTROL_EARPHONE_SUPPORT_) const kal_uin

28、t8 ADC_REMOTE=6; /假設(shè)硬件接ADC6 #endif kal_uint8 custom_adc_get_channel(adc_channel_type type) Switch(type) #if defined(_LINE_CONTROL_EARPHONE_SUPPORT_) case remote_adc_channel: return (kal_uint8)ADC_REMOTE); #endif #endif ;,customdrvmisc_drvM678_BBauxmain.c void aux_task_main( task_entry_struct * task_

29、entry_ptr ) #if defined(_LINE_CONTROL_EARPHONE_SUPPORT_) kal_uint8 remote_adc_logic_id; kal_uint8remote_adc_no #endif /創(chuàng)建 #if defined(_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,

30、KAL_TRUE); #endif while(1) receive_msg_ext_q(task_info_gtask_entry_ptr-task_indx.task_ext_qid, #endif, break; /銷毀 case MSG_ID_BMT_ADC_MEASURE_DONE_CONF: #if defined(_LINE_CONTROL_EARPHONE_SUPPORT_) else if (mea_done_ptr-adc_sche_id = remote_adc_logic_id) adc_measure_count+; remote_value = (kal_int32

31、)mea_done_ptr-volt; aux_remove_adc_channel(remote_adc_logic_id); #endif ,模塊調(diào)試: EINT,M6226平臺有Eint0 Eint7,Eint4 Eint7是GPIO復(fù)用過來的。 以線控為例,介紹一下修改或者添加流程: interfacehwdrvEint.h typedef enum #if defined(_LINE_CONTROL_EARPHONE_SUPPORT_) remote_eint_chann, #endif eint_channel_type; customdrvmisc_drvM678_BBEint_

32、def.c #if defined(_LINE_CONTROL_EARPHONE_SUPPORT_) const kal_uint8 REMOTE_EINT_NO=3; /假設(shè)硬件配置為EINT3 #endif kal_uint8 custom_eint_get_channel(eint_channel_type type) switch(type) #if defined(_LINE_CONTROL_EARPHONE_SUPPORT_) case remote_eint_chann: return (kal_uint8)REMOTE_EINT_NO); #endif ,customdrvmi

33、sc_drvM678_BBauxmain.c /中斷處理函數(shù) void REMOTE_EINT_HISR(void) if (remote_state) /高電平 /相關(guān)處理代碼 else/低電平 /相關(guān)處理代碼 /中斷注冊 void aux_task_main( task_entry_struct * task_entry_ptr ) kal_uint8 remote_eint_no; #if defined(_LINE_CONTROL_EARPHONE_SUPPORT_) remote_eint_no = custom_eint_get_channel(remote_eint_chann)

34、; EINT_Registration(remote_eint_no,KAL_TRUE,remote_state,REMOTE_EINT_HISR, KAL_TRUE); #endif 在注冊中斷時要注意:中斷觸發(fā)方式:電平觸發(fā)/邊沿觸發(fā)? debounce: Enable/Disable? 電平觸發(fā)高電平有效還是低電平有效等問題。,Debounce time 對于Eint0 Eint3,可以通過下面的文件來修改debounce time; 而Eint4 Eint7沒有debounce機制。 customdrvmisc_drvM678_BBEint_def.c kal_uint8 custom

35、_eint_sw_debounce_time_delayEINT_MAX_CHANNEL = 50, /*EINT0*/ 25, /*EINT 1*/ 50, /*EINT2*/ 50 /*EINT3*/ ; 也可通過下述函數(shù)來修改 EINTaddr() EINT_Set_HW_Debounce() EINT_SW_Debounce_Modify(),模塊調(diào)試: Charger/USB,customdrvmisc_drvM678_BBchr_parameter.c 充電相關(guān)電壓和電流的設(shè)置: bmt_customized_struct bmt_custom_chr_def = ; 里面包括一些重要的電壓電流值的設(shè)置。 電池格數(shù)的算法: custom_equipment.c中 custom_cfg_vbat_level_regulator函數(shù)處理 每格電壓的設(shè)置: nvram_user_config.c(06B)/custom_hw_default.c(05C) /* Battery voltage Level */ 3500000, /* Low Battery Power off */ 3550000, /* Low Battery */ /* battery level 1 8 */ 3580000, 3630000, 3740000, 3840000, 3950

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論