MTK_手机驱动培训资料

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_uint32measure_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 voidcheck_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
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值