mtk怎么安装刷机驱动

mtk怎么安装刷机驱动,第1张

1 首先我们需要下载「mtk手机刷机驱动程序」。

2 驱动程序下载完成后解压,在解压的文件夹内找到「mdmcpq.inf」和「usbser.sys」文件,将其拷贝到电脑「C:\Windows\System32\drivers」文件夹下,如果系统存在文件的话覆盖和取消复制都可以。

3 然后我们安装驱动文件里的「点击安装by木子ROM.exe」文件,64位系统安装「installdrv64.exe」文件;驱动安装过程中系统可能提示警告,这里我们不必理会,选择始终安装...即可。

4 驱动安装成功后我们将手机处于关机状态下连接电脑,打开电脑的「设备管理器」注意会看到「MT65xx_Preloder」设备,鼠标右键选择「更新驱动程序软件...」。

5 然后我们选择手动安装「浏览计算机以查找驱动程序软件」选项。

6 然后点击「浏览」,选择我们解压的驱动文件目录。

7 这里我们需要选择电脑所对应的系统小编是Windows 7系统所以就选「Win7」。

8 驱动安装完成过程中系统可能出现警告提示,这里继续安装。

9 驱动安装成功。

10 驱动安装成功以后拔掉数据线,然后配置好刷机软件,在刷机过程中连接电脑,驱动此前正确安装,即可进入刷机状态。

1. makefile

MXX_GPRS.mak(mcu\make)

Option.mak(mcu\make)

对于同一个平台,不同的项目有着不同的功能配置。对于驱动调试来说,需要修改和添加一些宏开关控制;

基本格式和步骤:

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_XXX

endif

endif

代码中就使用XXX_XXX来控制相关代码

#if defined(XXX_XXX)

//add code here

#endif

Custominfo.pl(mcu\tools)

这个文件是当在mcu\custom\drv下添加与LCD,image_sensor等类似的模块时,需要修改此文件以便ADS编译系统能编译到此模块下的文件;

可以参考image_sensor。

if (($project ne "basic") &&($project ne "l1s") &&defined($cmos_sensor)) {

if ($cmos_sensor ne "NONE") {

push(@thatdirs, "drv\\image_sensor\\$cmos_sensor")

}

}

2. LCM;Backlight;Vibrator

以SUNRISE_0255_LCM为例

步骤1:

MXX_GPRS.mak中配置LCD_MODULE和MAIN_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的型号;

COLOR_LCD,TFT_MAINLCD,QVGA_MAINLCD为LCD的类型

QVGA_MAINLCD:240X320

QCIF_MAINLCD: 176X220

QQVGA_MAINLCD: 120X160

如在SUNRISE_0255_LCM的基础上添加兼容屏;则在HX8312后面顺序加入LCD的型号

如果有Sub LCD;则需要顺序加入DUAL_LCD;COLOR_SUBLCD以及型号名称;

步骤2:

Mcu\custom\drv\LCD目录下添加SUNRISE_0255_LCM模块;目录以SUNRISE_0255_LCM为名。

可以参考其他LCM;加入和修改5个文件分别为:

lcd.c

lcd_hw.h

lcd_sw.h

lcd_sw_inc.h

lcd_sw_rnd.h

lcd.c:实现LCD的驱动接口

一般有init; sleep in;sleep outblock write等

lcd_hw.h: 一般不需要修改;

lcd_sw.h: 配置data address;command address和output format;

lcd_sw_inc.h:配置LCD WIDTH和HEIGHT

lcd_sw_rnd.h: 一般不需修改;

步骤3:

加入背光控制代码;

Mcu\custom\drv\misc_drv\custom_equipment.c

kal_bool custom_cfg_gpio_set_level(kal_uint8 gpio_dev_type, kal_uint8 gpio_dev_level )

{

//用SUNRISE_0255_LCM来控制代码

}

GPIO模式和PWM模式;(函数默认是PWM模式)

如果是GPIO模式;则在上述函数中加入模拟代码;

如果是PWM模式;则需要根据实际情况在Mcu\custom\drv\misc_drv\custom_hw_default.c文件中修改PWM1_Level_Info;即频率和占空比;

另外在mcu\plutommi\mmi\gpio\gpioSrc\GeneralDeviceInterface.c中有详细的MMI对背光的控制代码;

另外还需熟悉lcd_if.c(mcu\drv\src)对上述接口的调用;

3.Camera module;Sensor

外挂DSP暂不讨论;以OV9650为例:

步骤1:

MXX_GPRS.mak中配置ISP_SUPPORT和CMOS_SENSOR;

ISP_SUPPORT = TRUE

CMOS_SENSOR = OV9650

CAMERA_PIXEL = ONE_MEGA_PIXEL

注:(一般30万象素可以插值到100万;130万可以插值到200万象素)

步骤2:

Mcu\custom\drv\image_sensor下添加OV9650目录;

添加或修改文件:

camera_hw.c:Module Power on/off 控制;(GPIO分配要看硬件的资源分配表)

camera_para.c: ISP、Sensor相关寄存器配置;在实际调试中对比效果来修改;

image_sensor.c:timing;sensor init;power on/off;preview;capture等接口实现;

image_sensor.h:有关sensor一些属性设置(一些宏定义);

camera_info.c: 一般不需修改;

在完成所有的功能之后;效果调试是主要工作;

主要工具:META;CCT等;

关于ISP Address可参考MTK平台的DataSheet;

步骤3:

需对以下目录的文件有一定的了解!

media\camera\;

media\video\;

plutommi\mtkapp\Camera\

plutommi\mtkapp\Video\

plutommi\mtkapp\MDI\

对于特定项目的键盘的定义和映射以及其他一些特殊的处理;代码用PHONE_TYPE和PLATFORM_NAME的组合来控制;

如 PHONE_TYPE = SLIDE

PLATFORM_NAME = M678

则代码控制如下:

custom\drv\misc_drv\M678_BB\keypad_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) //旋转机型

//

#elif defined(__PHONE_CLAMSHELL) //翻盖机型

//

#endif

}

如果除了平台提供的基本的按键外还需添加特定的按键定义;则除了上述外还需修改以下几处:

interface\hwdrv\kbd_table.h

定义DEVICE_KEY_XX;注意顺序

#define DEVICE_KEY_XX顺序值

plutommi\mmi\Framework\Osl\OslSrc\KeyBrd.c

假设DEVICE_KEY_XX为特定的按键

//定义特定的按键

const U16 PresentAllKeys[]=

{

KEY_0,

KEY_1,

KEY_2,

KEY_3,

KEY_4,

KEY_5,

……

//定义特定的按键

#if defined(__SLIDE_M678)

,KEY_XX

#endif

}

//键盘映射(注意加入顺序要与PresentAllKeys[]一致)

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},

……

……

//映射特定的按键

#if defined(__SLIDE_M678)

{DEVICE_KEY_XX, KEY_XX, KEY_TIMER_IDXX, TONE_DTMF_1, DEVICE_AUDIO_PLAY_INFINITE},

#endif

};

//定义TIMER ID即KEY_TIMER_IDXX

plutommi\mmi\Inc\TimerEvents.h

顺序加入KEY_TIMER_IDXX;

另外在drv\src\kbdmain.c

中可以修改debounce time; Long press Time; Repeat Time等参数来满足特殊的需要;

5.耳机检测;线控

custom\drv\misc_drv\M678_BB\auxmain.c

对于耳机检测;一般只需关心AUX_EINT_NO(一般平台默认)和SENDKEY_ADC(见auxmain.c)

可根据硬件的实际情况作一些相关的调整;

对于线控来说;需要配置REMOTE_EINT_NO、 REMOTE_ADC以及按键Press/Release对应的ADC值;

具体的处理过程可参考26平台__LINE_CONTROL_EARPHONE_SUPPORT__控制的代码;

6.ADC

MT6226平台可用资源ADC0-ADC6;

以线控为例,介绍一下修改或者添加流程:

interface\hwdrv\Bmt.h

typedef enum {

vbat_adc_channel=0,

visense_adc_channel,

vbattmp_adc_channel,

……

#if defined(__LINE_CONTROL_EARPHONE_SUPPORT__)

remote_adc_channel,

#endif

……

} adc_channel_type

custom\drv\misc_drv\M678_BB\adc_channel.c

#if defined(__LINE_CONTROL_EARPHONE_SUPPORT__)

const kal_uint8 ADC_REMOTE=6 //假设硬件接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

}

custom\drv\misc_drv\M678_BB\auxmain.c

void aux_task_main( task_entry_struct * task_entry_ptr )

{

#if defined(__LINE_CONTROL_EARPHONE_SUPPORT__)

kal_uint8remote_adc_logic_id

kal_uint8 remote_adc_no

#endif

……

……

//创建

#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, KAL_TRUE)

#endif

……

while(1)

{

receive_msg_ext_q(task_info_g[task_entry_ptr->task_indx].task_ext_qid, &current_ilm)

switch(current_ilm.msg_id)

{

……

//读ADC

case MSG_ID_READ_ALL_ADC_CHANNEL_REQ:

……

#if defined(__LINE_CONTROL_EARPHONE_SUPPORT__)

aux_read_adc_channel(remote_adc_logic_id)

#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)mea_done_ptr->volt

aux_remove_adc_channel(remote_adc_logic_id)

}

#endif

……

}

}

}

CLAMSHELL中断的REGISTOR可以在上述函数中添加

7.EINT

关于EINT的描述请参考平台的datasheet

以线控为例,介绍一下修改或者添加流程:

interface\hwdrv\Eint.h:

typedef enum

{

……

#if defined(__LINE_CONTROL_EARPHONE_SUPPORT__)

remote_eint_chann,

#endif

……

} eint_channel_type

custom\drv\misc_drv\M678_BB\Eint_def.c

#if defined(__LINE_CONTROL_EARPHONE_SUPPORT__)

const kal_uint8 REMOTE_EINT_NO=3 //假设硬件配置为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

……

}

}

custom\drv\misc_drv\M678_BB\auxmain.c

//中断处理函数

void REMOTE_EINT_HISR(void)

{

if (remote_state) //高电平

{

//相关处理代码

}

else//低电平

{

//相关处理代码

}

}

//中断注册

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)

EINT_Registration(remote_eint_no,KAL_TRUE,remote_state,REMOTE_EINT_HISR, KAL_TRUE)

#endif

……

}

在注册中断时要注意:

中断触发方式:电平触发/边沿触发?

debounce: Enable/Disable?

电平触发高电平有效还是低电平有效等问题。

对于Eint0 - Eint3;可以通过下面的文件来修改debounce time;而Eint4 - Eint7没有debounce机制

custom\drv\misc_drv\M678_BB\Eint_def.c

kal_uint8 custom_eint_sw_debounce_time_delay[EINT_MAX_CHANNEL] =

{

50,/*EINT0*/

25,/*EINT 1*/

50,/*EINT2*/

50 /*EINT3*/

}

单位:50ms

也可通过下述方法来修改

EINTaddr()

EINT_Set_HW_Debounce()

EINT_SW_Debounce_Modify()

等函数来修改

8. Charger/USB

可参考Customer_BMT_V0.1.pdf

相关文件:

custom\drv\misc_drv\M678_BB\chr_parameter.c 关注点:

bmt_customized_struct bmt_custom_chr_def[] = {}

此为充电相关电压和电流的设置;

static const kal_int32 chr_usb_detect_volt;

此为CHARGER/USB检测的电压值;

Mcu\bmt\*.*

Mcu\drv\src\pwic.c

9.Touch panel

custom\drv\misc_drv\M678_BB\touch_panel_custom.c

custom\drv\misc_drv\M678_BB\touch_panel_custom.h

custom\drv\misc_drv\M678_BB\touch_panel_spi.c

custom\drv\misc_drv\M678_BB\touch_panel_spi.h

drv\src\touch_panel.c

drv\src\touch_panel_main.c

修改点包括:

GPIO分配;ADC值;坐标值;中断配置;压力检测等

具体修改可参考代码;

10. AFE

custom\audio\M678_BB\afe.c(模拟开关、PA切换等)

custom\audio\M678_BB\audcoeff.c(FIR Input/Output参数)

custom\audio\M678_BB\nvram_default_audio.c(GAIN值)

l1audio\afe2.c (AFE管理代码)

以上根据硬件给出的数据来进行调整!

11.Task

如何在MTK平台使用Task?

以DMB项目为例;请参照下述文件;DMB_SUPPPORT控制

custom\system\M678_BB\custom_config.c

custom\system\M678_BB\custom_config.h

custom\drv\DMB\TCC78X\dmb_hw.c

12 Nor/Nand FlashT-Flash

添加新的NAND:

Drv\src\NAND_MTD.c

static const flash_list NAND_ID_Table[] =

{

//{ ID, planesize in MB, blocksize in KB, pagesize in B, address cycle, IO bus width, mtd sub driver}

//添加新的NAND的相关信息(参考芯片Spec)

}

DA(Download Agent)部分代码(一般不需修改)

DA_SRC\src\nand_dev_tbl.c

Const NAND_Device_S g_NandFlashDevTbl[] =

{

//加入新的NAND信息(参考芯片Spec)

}

添加新的Nor Flash

DA_SRC\src\flash_dev_tbl.c

Const Nor_Device_S g_FlashDevTbl[] =

{

//加入新的Nor信息(参考芯片Spec)

}

对于DA的修改;需重新生成DA文件用于Flash Download Tool


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/bake/11642559.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-17
下一篇 2023-05-17

发表评论

登录后才能评论

评论列表(0条)

保存