当前位置:首页 >> 信息与通信 >>

MTK 手机驱动培训资料 1

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 芯片的动作,只要不是文挡中 明确说明的都是不确定的, 芯片内部还有一定的漏电的情况, 没有加电的模块也是有一点电 压的。