MTK手机驱动培训资料

1、LCD的调试:

一般LCD厂商在提供样品的时候,都会提供给初始化代码,服务更好的还会提供进入和退出SLEEP的代码,如果厂商不提供的话,就只有看着文档自己写了。我们的工作一般是调节显示效果以及和厂商沟通,还有就是把厂商给的代码整合进程序里面去。

Lcd驱动程序相关的文件主要包括lcd.c,lcd_sw.h以及lcd_sw_inc.h。

调节LCD的驱动程序,最先要在lcd_sw_inc.h中修改lcd的尺寸,就是LCD_WIDTH和LCD_HEIGHT,如果有小屏的话还要定义下面的小屏的lcd的尺寸。

然后,根据硬件的设计修改lcd_sw.h中的宏,来确定lcd是使用8位的还是16位的接口,比如使用16位的lcd接口,就定义宏MAIN_LCD_16BIT_MODE。

最后,移植厂商给的初始化代码进入到初始化函数里,还有进入和退出Sleep状态。进入和退出Sleep状态要求重新进入Sleep状态后屏幕能正常的显示,退出Sleep状态要求LCD的耗电小于0.1ma。

如果是CSTN的屏幕,那么还有一个对比度的参数需要设定。有2个对比度的值,一个是在初始化函数中写进去的一个值,还有一个是在nvram_user_config.c中的结构NVRAM_EF_CUST_HW_LEVEL_TBL_DEFAULT中定义。

 

2、GPIO的设定:

GPIO就是General purpose IO pin的意思,是一些能用做一般的功能控制的IO引脚。MTK芯片的引脚一般有四个功能选项,可以通过寄存器来控制各个引脚的功能,一般功能0就是表示这个引脚用做GPIO。

用函数   void GPIO_ModeSetup(kal_uint16 pin, kal_uint16 conf_dada)来控制GPIO的功能,pin表示引脚号,conf_dada控制引脚的功能。

用函数void GPIO_InitIO(char direction, char port)控制GPIO的方向,port表示引脚号,direction表示是输入还是输出。

用函数void GPO_WriteIO(char data,char port)控制GPIO的输出值,port表示引脚号,data表示输出的是高电平还是低电平。

在文件custom_equipment.c中有一个结构GPIO_MAP_ENTRY gpio_map_tbl[],其中定义了控制震动的GPIO,应该根据原理图来更改第4项震动的GPIO的设定。

 

3、信号量的控制:

信号量指的是在手机信号的强弱。通过修改SimDetectionDef.h中的SIGNAL_STRENGTH_NONE到SIGNAL_STRENGTH_LEVEL4的值来修改在不同信号下手机显示的信号格数。默认满格信号显示是4格,如果是其他的,比如5格的话,还要修改程序NetworkFunctions.c中的函数void NetWorkSignalLevelIndication(void *inMsg)。

 

4、电池格数的控制:

在bb中有一个ad转换的部件,每隔一定时间采样电池的电压,来控制电池显示的格数。具体在什么电压显示几格在文件nvram_user_config.c中的结构NVRAM_EF_CUST_HW_LEVEL_TBL_DEFAULT中定义。计算的算法在custom_equipment.c中的kal_uint8 custom_cfg_vbat_level_regulator( kal_uint32 measure_voltage, kal_uint8 *last_level, kal_uint8 *disp_level, kal_uint8 *hit_count )中。

 

5、lcd背光的控制:

一般lCD的背光是通过控制PWM1的占空比来实现,背光的级别一般有5级,在每一级别的占空比是由custom_hw_default.c文件中的kal_uint32 PWM1_Level_Info[PWM_MAX_LEVEL][2] 来控制,控制的实现在pwm.c中的函数void PWM_level(kal_uint8 level)中。

 

6、键盘背光的控制

键盘的背光由pwm2来控制,一般很少改动。键盘的背光是否亮起来可以作为判断一个机器是否开机的一个标志,一般板子做好后,只要cpu和flash以及pmic连好后就可以正常开机了,这时lcd可能没显示,可是键盘灯一定会亮的。

 

7、usb和充电器的区分:

一般在mtk平台下usb和充电器是提供一样的电源,使用同一个接口,判断是否是usb还是充电器是通过判断usb的d+线上是否为低来判断的,因为在计算机上这根线是被拉低的,如果插入的是usb,这个线就会被拉低,如果插入的是充电器,因为充电器没有接这个线,所有它被手机内部的一个很大的电阻给拉高,通过检测这个线上的电压就可以判断插入的是usb还是充电器,具体的判断的算法在Bmt_main.c文件中的static void check_charger_or_usb(kal_uint8 sche_id)中。

 

8、键盘的定义:

在文件keypad_def.c中根据原理图修改数组const keypad_struct  keypad_custom_def就可以了。

 

9、音频参数的修改:

根据硬件提供的用仪器测出来的值修改nvram_default_audio.c中的宏定义值。

 

10、外部中断的设定:

在文件eint_def.c中修改所使用的外部中断的号,比如USB_EINT_NO等。

 

11、待机电流控制:

一般要求手机的待机电流小于3ma,最小电流小于1ma,好的情况下能做到小于0.5ma,关机电流小于0.1ma。关机电流大一般是纯硬件问题,因为这时bb已经没有电了,软件完全不工作。待机电流大一般是lcd没有进入休眠、image sensor没有进入休眠或者cpu没有进入休眠。Cpu没有进入休眠一般是一直有个程序在工作,比如一个定时器一直工作或者一直来一个中断信号等。

 

 

12、image sensor的控制:

一般选用mtk推荐的image sensor的型号,这样在make文件中定义了型号以后就直接可以用了,需要注意的是i2c总线的定义,在sccb.h中定义,修改SCCB_SERIAL_CLK_PIN和SCCB_SERIAL_DATA_PIN的值到现在所用的gpio引脚,如果有多个i2c的设备的话就得修改程序了,默认的只支持一个i2c设备。image sensor的的驱动程序在image_sensor.c中。

 

13、FM芯片的控制:

一般选用mtk提供的fm芯片,在这样在make文件中定义了型号以后就直接可以用了。这里也需要注意i2c总线的定义。

 

14、手机开机过程:

开机以后,手机先进入到Boot Rom中去执行,等待150ms,如果在串口上接到特定的字符串就进入到和串口通讯的过程,在这时可以执行下载程序的过程了。如果没有接到特定的字符串,就进入到开机流程,首先执行的是bootarm.s,然后执行Nucleus的系统初始化,再执行init.c中的Application_Initialize,最后初始化任务,开始执行任务,mmitask.c中的MMI_TASK是最先要开始执行的任务。

 

15、FLASH芯片的设定:

根据硬件原理图,确定所使用的芯片的型号,然后到tools/MemoryDeviceList目录下,找到里面的EXCEL文件,找到对应的flash的型号,在Region栏下修改所需要的nvram的空间,这个栏目下的格式一般是类似于{0x10000,7}{0x2000,8}的形式,每个大括号中的前一个表示的是块的大小,后一个表示的是块的数量。在FLASH的文档中有块的分布的介绍,注意nvram不能跨越bank。

然后设置custom_MemoryDevice.h文件中的CS0_PART_NUMBER为对应的flash型号,要注意的是这里的flash的型号需要和excel文件中的flash型号完全一致。

 

16、一点体会:

在调试程序的时候,要注意不要假设BB芯片的动作,只要不是文挡中明确说明的都是不确定的,芯片内部还有一定的漏电的情况,没有加电的模块也是有一点电压的。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值