MTK_Touch_panel_Driver(MTK平台触摸屏驱动)
电容触摸屏调试
驱动调试经验总结总结人:李伟博1.硬件平台:WGROBOT DEMO大板2.软件平台:ALPS.GB.FDD2.MP.V13.问题描述:调试汕超TP,IC为ATMXT2244.解决问题方法与具体步骤:1)此TP为MTK没有认证过的TP,需要首先熟悉MTK的TP架构和厂家给的参考代码2)MTK的TP架构为:TP作为一个平台设备申请并注册驱动,驱动中为TP设备申请一个输入设备,所有适配在这个平台上的触摸屏驱动都使用这个输入设备来上报数据3)使用触摸屏驱动厂家给的参考代码进行适配:首先修改参考代码的架构来符合MTK的TP框架适配过程需要注意三个方面:1)关于I2C理解和修改:触摸屏芯片驱动是通过I2C总线来控制的,所以把这个作为一个i2c从设备来对待,i2c主设备为mt6573的i2c控制器mt6573的方案中i2c设备和驱动的注册流程是这样的:上匹配force形式中的probe函数2)中断与线程mt6573平台中断分内部中断和外部中断。
内部中断为mt6573芯片内部的一些控制器终端,例如USB相关中断,SD 卡的相关中断等,内部中断通过request_irq申请中断处理外部中断指GPIO配置为中断管脚连接外部器件,外部器件在一定条件下产生中断,中断控制器从GPIO获取中断,进入中断处理程序。
外部中断通过mt65xx_eint_registration来申请中断处理。
中断处理程序要求短小精悍,不可做过多的任务事情,可以做一些简单的赋值和触发线程运行的动作。
通过kthread_run来创建一个线程,设置线程的调度方式SCHED_RR,进线程设置线程状态为可中断运行,开始等待等待队列事件,而等待队列事件的释放是在中断处理中做的,所以一旦发生中断,线程开始向下运行,调用kthread_should_stop()来停止线程。
起。
MTK驱动
MTK驱动总结一、编译环境编译需要三个软件:ads以及patch、perl和分布式编译工具。
二、编译命令make 工程名umts/gprs new (remake, clean, bootloader, resgen, emiclean, emigen …)三、CODE驱动设计的代码集中在如下几个目录:MakeCustomDrvBmtFm_drvInitInterfacebootloader1.设置BBPLATFORM = MT6268# Hardware Platform, MT6208, FPGA, MT6218, MT6218B, MT6219, MT6226, MT6227, MT6228, MT6229 ...etc.BOARD_VER = BROADMO BI68_09B_BB# Baseband main board description, SHOULD BE ONE OF THE FOLLOWINGS #MT6208_EVB,MT6208_CEVB,MT6205_CEVB,ORDNANCE,KLM2003_BB,CHICAGO200 3_BB,# MT6218_MW001, CANNON, MT6218B_EVB, JUPITER_EVB, MT6219_EVB,# MT6226_EVB, MT6227_EVB, MT6228_EVB, MT6229_EVBMCU_CLOCK = MCU_245_76M# MCU clock setting, MCU_13M, MCU_26M, MCU_39M, MCU_52M, MCU_104M MCU_DCM = DCM_ENABLE# DCM_ENABLE, DCM_DISABLE# Dynamic Clock Management# Available BB chip:MT6217,MT6226,MT6226M,MT6227,MT6228,MT6229...etc.EXT_CLOCK = EXT_26M# External clock source setting, EXT_13M, EXT_26M2设置RF ModuleRF模块:UMTS_RF_MODULE = CUSTOM_MT6160RF_MODULE = AD6546_CUSTOM晶振类型:AFC_VCXO_TYPE = VCTCXO# VCTCXO : VCTCXO# VCXO : VCXO# VCXO_SC : VCXO with 7 area slope control# VCXO_TC : VCXO with temperature compensation# VCXO_SC_TC : VCXO with 7 area slope control & temperature compensationCOM_DEFS_FOR_CUSTOM_MT6160 = MT6160_RF CUSTOM_MT6160UMTS_BAND_I = TRUE# TRUE, FALSEUMTS_BAND_II = TRUE# TRUE, FALSEUMTS_BAND_III = FALSE# TRUE, FALSEUMTS_BAND_IV = FALSE# TRUE, FALSEUMTS_BAND_V = TRUE# TRUE, FALSEUMTS_BAND_VI = FALSE# TRUE, FALSEUMTS_BAND_VII = FALSE# TRUE, FALSEUMTS_BAND_VIII = FALSE# TRUE, FALSEUMTS_BAND_IX = FALSE# TRUE, FALSEUMTS_BAND_X = FALSE# TRUE, FALSE驱动代码:GSM:custom\l1_rf\AD6548_CUSTOM\l1d_custom_rf.hcustom\l1_rf\AD6548_CUSTOM\m12193.cWCDMA\custom\ul1_rf\CUSTOM_MT6160\u12193.c\custom\ul1_rf\CUSTOM_MT6160\ul1d_custom_rf.h3设置PMIC –电源管理模块PMIC = MT6326# Charge Function, NONE, MT6305 or MT6318驱动文件:\drv\src\pmic6326.c\drv\src\pmic_custom.c\custom\drv\misc_drv\HUAQIN68_09B_BB\chr_parameter.c4设置LCDLCD_MODULE = BROADMOBI68_09B_LCM# Based on the LCM solutions (even multiple LCM modules for this project) # SHOULD BE ONE OF THE FOLLOWINGS, based on the LCM# MTKLCM - Mono, 102x64# MTKLCM_COLOR - Color, 120x160, for MT6218_MW001 or MT6205_CEVB# ORDNANCELCM - Mono, 112x64# KLMLCM - Color, 128x128# INFOLCM - Color, 128x128# TOPPOLY_LCM - Color, 128x160, for MT6218B_EVB# SONY_LCMMAIN_LCD_SIZE = 320X240# To distinguish the main lcd size.# We can use it to copy the matching resources, such themecomponents.h, Fontres.c, L_xxx.h, etc, to PLUTO_MMI folderSUB_LCD_SIZE = NONE# NONE, 48X64BW, 64X96, 96X64BW, 96X64, 128X128COM_DEFS_FOR_BROADMOBI68_09B_LCM = BROADMOBI68_09B_LCM TFT_MAINLCD # TFT_MAINLCD – LCD类型驱动代码:custom\drv\LCD\$( LCD_MODULE)\lcd.ccustom\drv\LCD\$( LCD_MODULE)\lcd_hw.hcustom\drv\LCD\$( LCD_MODULE)\lcd_sw.hcustom\drv\LCD\$( LCD_MODULE)\lcd_sw_inc.hcustom\drv\LCD\$( LCD_MODULE)\lcd_rnd.h参考其中一个屏的代码即可添加新屏。
MTK驱动基本介绍
MTK驱动基本介绍MTK(Mediatek Inc.)是台湾联发科技股份有限公司的一个子公司,是一家全球领先的半导体芯片设计公司。
MTK驱动(Mediatek Driver)是联发科技开发的一款设备驱动程序,用于支持和管理MTK系列芯片的硬件设备。
MTK驱动的目的是为了提供对MTK芯片的各种硬件设备的支持,使其能够在计算机系统中正常工作。
MTK芯片广泛用于智能手机、平板电脑、智能家居、物联网等领域的设备,而MTK驱动则起到了连接和协调计算机系统和硬件设备之间的桥梁作用。
1.提供设备识别和连接:MTK驱动可以识别MTK芯片的硬件设备,并与计算机系统进行连接,完成设备的初始化和配置工作。
2.实现设备通信和数据传输:MTK驱动通过与设备之间的通信接口,实现了设备和计算机之间的数据传输和交互,包括文件的读写、音视频的传输和图像的显示等。
3.支持设备管理和控制:MTK驱动可以对MTK芯片的硬件设备进行管理和控制,包括设备的开关、功能设置、驱动安装和升级等。
4.提供系统稳定性和兼容性:MTK驱动经过严格的测试和验证,能够保证在不同的计算机系统环境下的稳定性和兼容性,确保硬件设备能够正常工作。
5.支持开发者和用户的需求:MTK驱动提供了丰富的开发工具和接口,为开发者和用户提供定制化和个性化的驱动支持,方便二次开发和扩展。
2.连接设备和计算机:使用USB数据线或其他连接方式将MTK芯片的硬件设备连接到计算机上。
3.设置设备连接模式:根据设备的不同,选择合适的连接模式,如USB存储模式、USB调试模式等。
4.等待系统安装驱动:当设备连接到计算机后,操作系统会自动检测并安装相应的MTK驱动程序,期间需要等待一段时间。
5.使用设备:一旦驱动安装完成,设备就可以在计算机上正常工作,可以进行文件传输、数据交互、驱动管理等操作。
总之,MTK驱动是一款重要的软件工具,为MTK芯片的硬件设备提供了必要的支持和管理功能,使其能够在计算机系统中正常工作。
MTK的驱动和MMI经验总结
MTK的驱动和MMI经验总结1.Windows必须安装在C盘,否则会出现modis编译问题。
2.语言和输入法移植2.1资源修改–这是我们需要修改的,2.2开始MTK已经帮你做好了。
2.1.1在mcu\plutommi\Customer\CustResource\PLUTO_MMI\ref_list.txt中添加新语言的字符串资源。
2.1.2用MCT工具生成新的字库,需要注意的是Language ID必须和ref_list.txt中一致。
2.1.3输入法资源包括Zi、T9和CStar。
2.1.3.1Zia.新建mcu\vendor\inputmethod\ZI\project\PROJECTNAME\v?_official\目录。
b.将第三方提供的Zi文件拷贝到该目录。
c.将所有ZI8DatXX.c文件扩展名改成.h文件,并将其包含到IMEResZi.h中。
d.将输入资源添加到mtk_gIMELDBArray 数组中。
e.上面步骤,第三方可能已经提供IMEResZi.h文件。
如果提供了就不用这些步骤了。
2.1.3.2T9将代码放到下面目录:mcu\vendor\inputmethod\T9\project\PROJECTNAME\v?_official\移植比较麻烦,具体参考:SOP_T9_Input_Method_Resource_Generation_07A.pdfSOP_T9_Input_Method_Resource_Generation_08B.pdfSOP_T9_Input_Method_Resource_Generation_09BV2.pdf2.1.3.3CStar不说了2.2SSC有几个文件需要修改。
a.mcu\ \plutommi\mmi\SSC\SSCInc\SSCStringHandle.h:增加新的SSC码,需要和ref_list.txt、FontRes.c中的一致。
#define SSC_AUTO "*#0000#"#define SSC_SCHINESE "*#0086#"#define SSC_TCHINESE "*#0886#"#define SSC_ENGLISH "*#0044#"#define SSC_DEFAULT "*#0044#"#define SSC_SPANISH "*#0034#"//添加你的SSC码//#define SSC_XXXXX "*#00XX#"2.3mcu\ \plutommi\mmi\SSC\SSCInc\SSCStringHandle.c:将新的SSC码加入到ssc_table2表中。
MTK驱动基本介绍
MTK驱动基本介绍
MTK驱动,也称为MediaTek驱动,是一种特定于联发科技(MediaTek)芯片的驱动程序。
联发科技是全球领先的半导体解决方案提
供商之一,其产品广泛应用于移动通信、家庭娱乐、无线通信和物联网等
领域。
MTK驱动的作用是连接计算机与MTK芯片设备之间的通信,使得计算
机可以与MTK芯片设备进行数据交互和控制。
这些设备包括智能手机、平
板电脑、物联网设备以及其他使用MTK芯片的电子产品。
MTK驱动是连接
计算机和这些设备之间桥梁的关键。
MTK驱动负责与芯片设备之间的通信协议,包括数据传输、设备识别、设备控制等功能。
它通过USB接口与计算机连接,并与操作系统进行交互,将设备的功能暴露给计算机使用者。
MTK驱动的正常工作对于设备的功能
和性能至关重要。
MTK驱动的开发是一个复杂而严谨的过程。
开发人员需要深入研究MTK芯片的架构和规范,并编写适配特定芯片的驱动程序。
他们还需要进
行严格的测试和验证,以确保驱动程序在各种情况下都能正常工作。
同时,开发人员还需要与MTK芯片的生产商保持密切合作,获取相关技术支持和
更新。
总之,MTK驱动是一种桥梁,将计算机与MTK芯片设备连接起来。
它
通过通信协议实现数据传输和设备控制,使得用户可以便捷地使用MTK芯
片设备。
MTK驱动的适应性和兼容性优势使得其成为移动通信和物联网领
域的重要组成部分。
同时,MTK驱动的安装和更新也是用户使用设备时需
要考虑的重要问题。
MTK平台驱动调试笔记
分类:LINUX一、【一】调试串口的设置驱动的调式过程经常需要通过trace工具看log的,trace前需要修改手机串口,有以下三种方法设置串口1 通过手机进入工程模式设置2 修改代码,修改Nvram_user_config.c中的NVRAM_EF_PORT_SETTING_DEFAULT[]3.通过META工具修改在连上meta:左上角选中NVRAM Editor,在跳出的对话框里选择other LID,再选择NVRAM_EF_PORT_SETTING_LID,接下来read from nvram,对话框右边就会出现串口的设置情况,对调tst_port_ps(输入0)和ps_port(输入99)的值,二【【二】关于gpio口Gpio的初始化在文件gpio_drv.c里,可以用MTK提供的工具配置也可以用代码在程序里直接操作,二者的选择要看有没有定义宏__CUST_NEW__工具初始化时要注意配置codegen.dws,该文件里配置的只是对gpio口的初始化,并不是所有的gpio口都要设置成工作时的模式,尤其是当作时钟和蓝牙部分的gpiio口,初始化时就设置成工作模式的话会造成电机电流过大的。
代码初始化时DRV_WriteReg()、DRV_Reg对gpio口寄存器操作,分别定义gpio口的模式,和方向(0:输入;1:输出),对单个gpio口操作用到以下函数(以gpio25为例):GPIO_ModeSetup(25, 0);设置GPIO25为模式0GPIO_InitIO(1,25);初始化GPIO25方向为输出GPIO_WriteIO(0, 25 );设值GPIO25输入低电平0三、【三】键盘设置1)键盘定义Keypad_def.c如果定义CUST_NEW,工具中的键盘定义对应在改文件里的KEYPAD_MAPPING(keypad_drv.h);2)硬件键盘定义与软件mmi键盘的对应nKeyPadMap[](Keybrd.c)3)工程模式键盘测试函数EntryFMKeypadTest()修改键盘测试时界面显示的键的名称1. 做好上面的第一第二两步2. FactoryModeSrc.c开始部分定义添加的键所要显示的名称,值,分别应用到keypad_layout[](确定要显示的位置),keypad_value[]3.在EntryFMKeypadTest()函数中的数组IdleScreenDigits[]里添加要显示的键4)如果要设置一个键不管在什么界面下都起作用的话(如手电筒开关或则其他需求)就需要在键盘的事件响应函数static voidKeyEventHandler(KEYBRD_MESSAGE *eventKey)里设置,根据键值条用相应的响应函数,不过该函数及时在锁屏状态下也会执行的,需要根据需要添加条件语句四、关于LCDlcm背光驱动分为两种控制方式:1. pwm这个是通过调占空比来调节亮度的持续信号;2. PFM这个是通过脉冲的个数来控制LCM背光亮度。
Mediatek平台软件(驱动)开发总结
Mediatek平台软件(驱动)开发总结关于Mediatek方案总所周知,Mediatek平台凭借其低成本、高集成以及较低的开发门槛和较短的开发周期受到众多(手机、平板)方案公司的青睐。
目前Mediatek主要涉及移动通讯(Mobile Communications):包括智能手机和平板电脑;家庭娱乐领域(Home Entertainment):包括DVD、数字电视等。
在智能手机领域,Mediatek自从2009年发布第一个智能手机平台,到目前已经发布了包括单核、双核、四核、八核,众多的手机平台;而对于需求日趋旺盛的平板电脑领域,Mediatek也是迎合市场发布了MT8382、MT8389等一系列平板电脑平台。
其实,由于现在平板和手机的界线越来越模糊,功能基本一致(平板也能打电话),因此Mediatek发布的平板芯片基本上是在手机芯片的基础上稍加修改而来(或是只是单纯换一个名字,如MT6589和MT8389)。
不过对于一般的平板产品来说,都会追求更大的屏幕和良好的续航性,但是由于平板有更大的尺寸,因此可以通过增加电池容量来解决续航性的问题。
在家庭娱乐领域,Mediatek也有所涉猎。
如DVD,主要集成音频/视频解码和微处理器的MT1389方案;另外,在智能电视领域,Mediatek推出的MT5396等平台也在长虹、海信等品牌发布的智能电视产品上得到了应用。
从发布的一些参数来看,这款芯片为双核心、搭载具有一定3D性能的GPU(Mali-400MP),支持摄像头(ISP能力有限),应该是对于智能电视领域量体裁衣的一个平台。
如果其他产品使用Mediatek平台,对于一些不用的功能,首先在硬件上弃用即可(去掉底层驱动);在软件方面,可以禁掉相应服务和删除对应APK。
由于Android系统对各个功能都是模块化管理,因此理论上可以删减各个不需要的功能模块。
项目流程站在软件(驱动)开发人员的角度来说,一个完整的Mediatek方案项目大致流程为:①选择某个平台:这个选择可能是方案公司考虑Mediatek各个平台稳定度,开发前景、价格因素做出的选择;也可能是客户根据市场情况做出的决定;②外围芯片、设备的选取:包括FLASH(Mediatek会定期release一个表格,关于每个平台上认证过的每个FLASH型号)、LCD、camera(每个平台支持的LCD分辨率、camera sensor 像素都不同)、Touch Panel、常用传感器(Gsensor、Psensor、Lsensor)、PMIC、WiFi&BT&FM 芯片等;③获取代码:向Mediatek获取特定平台特定Android版本的完整源码,如果某个版本出现平台问题,Mediatek会释放相关patch;方案公司可以根据自身需要选择打上对应patch。
MTK平台驱动基本介绍
MTK平台驱动基本介绍----------MTK6239一:LCD文件位于custom\drv\LCD以菲利浦的一款240 X 400的屏为例介绍如何添加LCD驱动SIMCOM38_08B_GPRS.makLCD_MODULE = SUNRISE_2827TI_LCMMAIN_LCD_SIZE = 240 X 400Option.makCOM_DEFS_FOR_SUNRISE_2827TI_LCM = ILI9326 COLOR_LCD SUNRISE_2827TI_LCMTFT_MAINLCD WQVGA_MAINLCD在custom\drv\LCD添加SUNRISE_2827TI_LCM文件夹,下面有5个文件。
文件名同MTK 系统自带的(lcd.c、lcd_hw.h、lcd_sw.h、lcd_sw_inc.h、lcd_sw_rnd.h)。
SUNRISE -------------- 屏的厂家ILI9326 ----------------- 屏的驱动芯片LCM ---------------------- 屏240 X 400 ----------------- 屏的分辨率COLOR_LCD ---------- 彩色TFT_MAINLCD ------- 屏的类型,对应的还有CSTN,OLED。
目前主要是TFTWQVGA_MAINLCD ---- 屏的分辨率做了上述修改以后,编译时,lcd驱动就对应SUNRISE_2827TI_LCM文件夹里的驱动。
文件夹里的5个文件,通常lcd_hw.h和lcd_sw_rnd不需要修改,lcd_sw_inc.h只是定义屏的分辨率。
如下:#ifdef __MMI_MAINLCD_128X128__#define LCD_WIDTH 128#define LCD_HEIGHT 128#elif (defined(__MMI_MAINLCD_128X160__))#define LCD_WIDTH 128#define LCD_HEIGHT 160#elif (defined(__MMI_MAINLCD_176X220__))#define LCD_WIDTH 176#define LCD_HEIGHT 220#elif (defined(__MMI_MAINLCD_240X400__))#define LCD_WIDTH 240#define LCD_HEIGHT 400#endif#define UI_DEVICE_WIDTH LCD_WIDTH#define UI_DEVICE_HEIGHT LCD_HEIGHT修改比较多的是lcd.c和lcd_sw.h:lcd_sw.h#define LCD_CMD_DMA_MODE --------- 是否使用DMA方式?(DMA简单,速度快,通过MTK的寄存器进行操作,但灵活性差;非DMA方式,直接对地址操作,灵活性好,但速度会有影响。
MTK Touch panel Driver(MTK平台触摸屏驱动)
9
Driver: 2-points Calibration(2/2)
Coord. at ACD X - axis Coord. at LCD X - axis
distance
≈
distance
Hence we need two predefined calibration points to get a, b, c, d P = aX + b Q = cY + d
13 SPI_DOUT_PIN
Touch panel event flow(Touch panel task)
14
Touch panel event flow(MMI task)
15
Exercise: touch panel event
#include #include #include #include #include #include void void void void void void void void "MMI_features.h" "PixtelDataTypes.h" "wgui_categories.h" "gdi_include.h" "lcd_sw_rnd.h" "wgui_draw_manager.h"
my_pen_up_hdlr(mmi_pen_point_struct point); my_pen_down_hdlr(mmi_pen_point_struct point); my_pen_move_hdlr(mmi_pen_point_struct point); my_pen_abort_hdlr(mmi_pen_point_struct point); my_pen_repeat_hdlr(mmi_pen_point_struct point); my_pen_long_tap_hdlr(mmi_pen_point_struct point); start_handwriting(); end_handwriting();
MTK驱动调试相关总结
MTK驱动调试相关总结 2010-12-14 Ver:1.11 SIM卡2 T卡3 FLASH4 按键KEY5 IO配置6 ADC配置7 EINT配置8 FM驱动9 BT驱动10 TOUCHSCEEN驱动11 LCM驱动12 Sensor驱动13 背光灯、按键灯、振动器、PWM14 跑马灯15 移动传感器、四方传感器16 MP4、3GP播放17 音量参数、EQ参数、音频功放开关18 SMS、电话本等容量设置19 耳机插入、拔出检查、耳机按键处理20 充电器或USB插入、拔出检查、识别21 RF 配置22参考文档附录默认系统平台为MT6253,code版本:09B.W10.12.MP。
版本变更记录:Andy 2010.12.10 Ver:1.0Andy 2010-12-14 Ver:1.11 SIM卡F910(MT6253)SIM卡插槽与系统SIM卡号映射关系drv\src\switchControl_al.c// andy 2010.05.31 SIM卡插槽映射 __DRV_DUAL_SIM_INVERSE__//kal_bool sim_physicalSlotChanged;#ifdef __DRV_DUAL_SIM_INVERSE__kal_bool sim_physicalSlotChanged = KAL_TRUE ;#elsekal_bool sim_physicalSlotChanged = KAL_FALSE;#endif定制支持的SIM电压:Customer_sim_voltage_support.c/* For customer define ME support voltage of SIM *//* For 1.8V Tech. ME use ME_18V_30V *//* For 3.0V ONLY ME use ME_30V_ONLY *//* For 1.8V ONLY ME use ME_18V_ONLY */#define SIM_VOLTAGE_SUPPORT ME_18V_30Vsim_env SIM_GetCurrentEnv(void){(SIM_VOLTAGE_SUPPORT);return}MT6253的“4.3 SIM Interface”,介绍了SIM卡接口的情况。
MTKLCM驱动分析
MTKLCM驱动分析参考:/cbk861110/article/details/40931835⼀.驱动分析5.1Mtkfb.c (kernel-3.10\drivers\misc\mediatek\videox\mt6735)1.初始化mtkfb_initplatform_driver_register(&mtkfb_driver)2.重要结构体static struct fb_ops mtkfb_ops = {.owner = THIS_MODULE,.fb_open = mtkfb_open,.fb_release = mtkfb_release,.fb_setcolreg = mtkfb_setcolreg,.fb_pan_display = mtkfb_pan_display_proxy,.fb_fillrect = cfb_fillrect,.fb_copyarea = cfb_copyarea,.fb_imageblit = cfb_imageblit,.fb_cursor = mtkfb_soft_cursor,.fb_check_var = mtkfb_check_var,.fb_set_par = mtkfb_set_par,.fb_ioctl = mtkfb_ioctl,#ifdef CONFIG_COMPAT.fb_compat_ioctl = mtkfb_compat_ioctl,#endif#ifdef CONFIG_DMA_SHARED_BUFFER.fb_dmabuf_export = mtkfb_dmabuf_export,#endif};probestrstr(saved_command_line, "fps="); //得到UBOOT传过来的参数fbi = framebuffer_alloc(sizeof(struct mtkfb_device), dev); //分配fb_info结构体mtkfb_find_lcm_driver :hj101na02a_lcm_drvdisp_drv_get_lcm_driverlcm->set_util_funcs(&lcm_utils); //设置LCD操作函数lcm->get_params(lcm_params); //得到LCD的⼀些硬件参数disp_drv_init_ctrl_if //如果是DBI(mcu 屏)//LCM_CTRL_SERIAL_DBILCD_Init()LCD_ConfigSerialIF//LCM_CTRL_PARALLEL_DBILCD_Init()LCD_ConfigParallelIFLCD_SelectWriteIF //选择是串⼝还是并⼝LCD_ConfigIfFormat //配置接⼝的数据类型to_lcd_if_width //数据宽度,DBIdisp_drv_set_driving_current //设置接⼝的电流LCD_Init_IO_pad //初始化GPIOdisp_drv_init_contextDISP_GetDriverDBI :DBI_DISP_DRV 操作函数DISP_GetDriverDPI :DPI_DISP_DRVDISP_GetDriverDSI :DSI_DISP_DRV//得到LCD的⼀些参数DISP_GetScreenWidth。
MTK驱动
1.配置GPIO 并初始化gpio_drv.c内的void GPIO_init(void) 进行初始化1.DRV_WriteReg(GPIO_MODE1,0x0000) 设置模式2.DRV_Reg(GPIO_DIR1) |= 0x00FF 设置方向0 GPIOs are configured as input1 GPIOs are configured as output2.audio_pa配置音频对应Driver部分主要需要留意以下三支档案:afe.c AMP gpo settingaudcoeff.c 首先需要注意是的output channel的配置,配置错误将出现没有声音的现象。
(见audio_驱动.pdf) 此文件需要注意output channel 、FIR setting和echo参数的设置audcoeff_default.h 定义语音增强参数nvram_default_audio.c 此文件主要配置各音阶的音量AUD_VOLUME_CTN :call waiting tone, error tone, warning toneAUD_VOLUME_KEY :keypad tone]AUD_VOLUME_MIC :microphone inputAUD_VOLUME_FMR :FM radio soundAUD_VOLUME_SPH :speech sound (during phone call)AUD_VOLUME_SID :side tone (sound loop-back)AUD_VOLUME_MEDIA :music1.设置模式,方向,上拉gpio_drv.c 里配置2.afe.c 文件里void AFE_SwitchExtAmplifier( char sw_on )设置3.afe2.c 文件里void AFE_TurnOnExtAmplifier( void )void AFE_TurnOffExtAmplifier( void )进行调用.3.触摸屏先初始化,后期是自动配置1.在eint_var.c里看中断2.touch_panel_spi.h 配GPIO 口3.touch_panel_spi.c Implement serial interface4.touch_panel_custom.c Set ADC and coordinate calibration4.FM1.RDA5800_SerialComm.c 配GPIO 口2.RDA5800_drv.c 函数的实现5.跑马灯\背光灯1.custom_equipment.c 或者uem_gpio.c 中找2.SN3726_LIGHT_LED3.lcd_backlight_set6.MT6318 driver1.pmic_custom.c2.Engineer mode3.*#3646633# =>Device=>PMIC7.工程模式参数1.CustResDef.h8.软件调speecher大小1.Audcoeff.c2.DG_DL_SPEECH = 0X1000 指gain = 13.DG_MICPHONE = 0X1400 最大0x2000 gain = 29.项目(6225平台),原先做的900/1800双频,校准综测都是正常的。
MTK平台驱动调试介绍
模块调试:LCM、Backlight
LCM
Main-Panel LCD Module EMI/NFI 8080
Parallel Accelerator
LCD DMA Controller
Sub-Panel LCD Module (Opt.)
LCD DATA LCD CLK LCD CS0/1 LCD A0
• • • •
• • • • • • • • • • • • •
如果需要添加新键,除了上述外还需修改以下几处: 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,…… //定义特定的按键 KEY_XX, };
Serial Accelerator
MT 62XX
• • • • • • • • • • • • •
以SUNRISE_0255_LCM为例 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 以及型号名称;
MTK手机设备驱动编写介绍
2. WIN32 #ifndef WIN32 ……………… #endif
用该宏将真机与模拟器的代码分隔开
一. GPIO口的初使化与使用
<1> GPIO口的初始化
方法:两种: 1.工具 \custom\drv\Drv_Tool\DrvGen.exe 修改:
\custom\drv\misc_drv\IWIT23_NEP_07A_PMJ_BB\codegen\codegen.d ws 2.程序中修改:Gpio_drv.c void GPIO_init(void) <2>操作 1. 写状态 a. 模式修改 GPIO_ModeSetup(kal_uint16 pin, kal_uint16 conf_dada) b. 方向修改 void GPIO_InitIO(char direction, char port) c. 置高与置低 GPIO_WriteIO(char data, char port)
void FLICK_EINT_HISR(void) //added by Jeff Ji 071024
{
ilm_struct
*flick_ilm;
aux_id_struct *aux_id_data;
if (flick_state == LEVEL_HIGH)
{
aux_id_data = (aux_id_struct*)
<2> 并口屏:
void init_lcd_interface(void) { kal_uint32 i;
REG_LCD_ROI_CTRL=0; CLEAR_LCD_CTRL_RESET_PIN; #if
(defined(MT6219)||defined(MT6226)||defined(MT6226M)||defi ned(MT6227)||defined(MT6223)|| defined(MT6223P)) SET_LCD_PARALLEL_CE2WR_SETUP_TIME((kal_uint32)2); SET_LCD_PARALLEL_CE2WR_HOLD_TIME(2); SET_LCD_PARALLEL_CE2RD_SETUP_TIME(2); SET_LCD_PARALLEL_WRITE_WAIT_STATE(3); SET_LCD_PARALLEL_READ_LATENCY_TIME(31); SET_LCD_ROI_CTRL_CMD_LATENCY(3
MTK平台LCD驱动过程详解
MTK平台LCD驱动过程详解
首先,MTK平台LCD驱动的基本任务是将图像数据转换为可显示的信号,并通过LCD控制器将信号传输到液晶显示器上。
这个过程主要包括以下几个步骤:
1.初始化:在驱动LCD之前,需要对LCD控制器进行初始化设置。
这些设置包括选择LCD接口类型、设置像素时钟频率、配置数据线数目、设置显示像素点数等。
初始化完成后,LCD控制器就可以根据这些设置来控制LCD的操作。
2.数据处理:接下来,驱动程序需要将图像数据转换为LCD可以接受的格式。
这个过程可以包括调整图像数据的位深度、颜色格式、调整图像的分辨率等。
转换完成后,图像数据就可以传输到LCD控制器。
3.数据传输:在传输数据之前,驱动程序需要根据像素时钟频率和数据线数目等参数,计算出每一行数据需要的传输时间。
然后,通过LCD控制器将图像数据按行传输到LCD上。
传输完成后,LCD控制器会自动将数据驱动到液晶显示器的每一个像素点上。
4.功能控制:在数据传输的同时,驱动程序还需要控制LCD的各种功能,如背光控制、电源管理、色彩校正等。
这些功能控制可以通过编程接口进行设置。
5.刷新显示:一旦将图像数据传输到液晶显示器上,驱动程序可以根据需要定期刷新显示图像。
刷新可以通过设置刷新频率、调整显示内容等方式进行。
总的来说,MTK平台LCD驱动的过程可以分为初始化、数据处理、数据传输、功能控制和刷新显示等几个步骤。
通过这些步骤,驱动程序可以
将图像数据转换并传输到液晶显示器上,实现图像的显示功能。
这些步骤需要通过编程接口和LCD控制器进行交互,以完成LCD驱动的过程。
触摸屏驱动软件使用教程
触摸屏驱动软件使用教程第一章:介绍触摸屏驱动软件的作用和分类触摸屏驱动软件是指用于控制和管理触摸屏设备的软件,它能够将触摸屏的触摸信号转化为计算机可识别的输入信号。
根据不同的触摸屏技术,触摸屏驱动软件也分为电容式触摸屏驱动软件、电阻式触摸屏驱动软件、表面声波触摸屏驱动软件等。
第二章:安装触摸屏驱动软件前的准备工作在安装触摸屏驱动软件之前,我们需要确定自己所使用的触摸屏型号和操作系统。
可通过查看触摸屏设备上的标签或查阅相关文档来获取这些信息。
另外,确保计算机已连接触摸屏设备,并且能够正常工作。
第三章:电容式触摸屏驱动软件的安装与配置对于电容式触摸屏,我们需要首先下载适用于该触摸屏型号和操作系统的驱动软件。
下载完成后,双击运行安装程序,按照提示完成安装。
安装完成后,我们需要进入设备管理器,找到触摸屏驱动,确保它已启用并处于正常工作状态。
接着,我们进入控制面板,点击触摸屏选项进行软件配置,根据需要进行灵敏度调整和其他参数设置。
第四章:电阻式触摸屏驱动软件的安装与配置对于电阻式触摸屏,大多数情况下,操作系统已经自带相应的驱动软件,并且会自动识别和安装。
如果没有自动安装驱动,我们可以根据触摸屏型号去官方网站下载对应的驱动程序。
下载完成后,运行安装程序,按照提示完成安装。
安装完成后,我们同样需要进入设备管理器确认驱动已启用并正常工作。
要配置电阻式触摸屏驱动软件,可以在控制面板或者驱动软件提供的设置界面中进行灵敏度调整和其他参数配置。
第五章:表面声波触摸屏驱动软件的安装与配置表面声波触摸屏是一种利用声波传播和反射的技术来获得触摸信息的触摸屏。
安装和配置表面声波触摸屏驱动软件与电容式触摸屏驱动软件类似,首先下载适用于该触摸屏型号和操作系统的驱动软件,运行安装程序完成安装。
再次确认驱动已启用并正常工作后,进入控制面板或者驱动软件提供的设置界面进行相关参数的配置。
第六章:常见问题解决办法6.1 驱动安装失败:可以重新下载驱动软件,并按照安装说明进行操作。
MTK平台驱动调试介绍
驱动调试的基本流程
代码审查
对驱动代码进行审查,确保其正确性和可维 护性。
集成测试
将驱动程序与其他系统组件集成,进行系统 级测试。
单元测试
对驱动模块进行单元测试,确保其功能正常。
性能优化
根据测试结果,对驱动程序进行性能优化和 调整。
03
MTK平台驱动调试技术
调试工具与环境配置
调试工具
使用常见的调试工具,如GDB、LLDB等,进行驱动代码的调 试。
MTK平台的发展历程
1 2 3
起始阶段
MTK平台最初是为了满足手机市场的需求而开发, 随着智能手机的兴起,MTK平台逐渐成为主流处 理器之一。
高速发展阶段
随着移动互联网的普及,MTK平台不断推出高性 能、低功耗的处理器,逐渐占据了中低端智能手 机市场。
创新阶段
近年来,MTK平台在人工智能、物联网等领域不 断创新,推出了多款具有特色的处理器,进一步 扩大了应用领域。
THANKS
感谢观看
MTK平台的应用领域
智能手机
平板电脑
MTK平台是智能手机领域的主流处理器之 一,广泛应用于中低端手机市场。
基于MTK平台的平板电脑具有高性能、低 功耗的特点,满足了用户对于娱乐、办公 等方面的需求。
智能电视
IoT设备
MTK平台的智能电视解决方案为用户提供 了丰富的视听体验,成为智能电视市场的 主流选择之一。
MTK平台驱动调试 介绍
目录
• MTK平台简介 • MTK平台驱动调试概述 • MTK平台驱动调试技术 • MTK平台驱动调试案例 • 总结与展望
01
MTK平台简介
MTK平台的定义与特点
定义
MTK平台是一种基于ARM架构的嵌 入式处理器平台,由MediaTek公司 开发。
MTK平台驱动调试介绍
(二)EVT贴片软件的整合
1.配置 makefile
xxx_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 co3: case 4: case 5: default:
} for(i=0;i<temp;i++){ GPIO_WriteIO(0,7); for (j =0;j <100;j++) {} GPIO_WriteIO(1,7); for(j=0;j<20;j++) {} } …… } else{
模块调试:Backlight
\mcu\custom\drv\misc_drv\SIMC25_06B_BB\custom_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:
GPIO_WriteIO(0,7);
…… }
PWM模式:需要根据实际情况在Mcu\custom\drv\misc_drv\custom_hw_default.c文件中 修改PWM_Level_Info;即频率和占空比。
MTK_Touch_panel_Driver(MTK平台触摸屏驱动)
10
Driver: MTK Calibration(1/2)
2 points calibration with extra one point determination
Calibration Flow Calibration Point Position
Avoid boundary points Use relative ADC difference to verify calibration points ⇒ ADC difference is in proportion to coordinate difference
MMI framework
TouchScreen.c (plutommi\mmi\framework\eventhandling\eventssrc) TouchScreenGprot.h (plutommi\mmi\framework\eventhandling\eventsinc)
MMI GUI
The main reason is LCD size and transform speed
For example: 256*256 LCD with 12 bits ADC converter
The distance between two adjacent pixels could reach 16 units (ADC coordinate)
mtkusbdrivermtkdldriverexetouchpaddriver天语touch2触摸屏touchpanel触摸屏driver触摸屏一体机
MTK Touch panel
2010/10/14
Agenda
Introduction
Features Files Framework
TouchPanel驱动介绍
__set_bit(EV_ABS, elan_ts_input_dev->evbit); __set_bit(ABS_X, elan_ts_input_dev->absbit); __set_bit(ABS_Y, elan_ts_input_dev->absbit); __set_bit(ABS_MT_POSITION_X, elan_ts_input_dev->absbit); __set_bit(ABS_MT_POSITION_Y, elan_ts_input_dev->absbit); __set_bit(ABS_PRESSURE, elan_ts_input_dev->absbit); __set_bit(EV_SYN, elan_ts_input_dev->evbit); __set_bit(EV_KEY, elan_ts_input_dev->evbit); __set_bit(BTN_TOUCH, elan_ts_input_dev->keybit); __set_bit(BTN_2, elan_ts_input_dev->keybit); input_set_abs_params(elan_ts_input_dev, ABS_MT_TOUCH_MAJOR, 0, 16, 0, 0); input_set_abs_params(elan_ts_input_dev, ABS_X, 0, 448, 0, 0); input_set_abs_params(elan_ts_input_dev, ABS_Y, 0, 704, 0, 0); input_set_abs_params(elan_ts_input_dev, ABS_PRESSURE, 0, 255, 0, 0); ret = input_register_device(elan_ts_input_dev);
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
The main reason is LCD size and transform speed
For example: 256*256 LCD with 12 bits ADC converter
The distance between two adjacent pixels could reach 16 units (ADC coordinate)
10
Driver: MTK Calibration(1/2)
2 points calibration with extra one point determination
Calibration Flow Calibration Point Position
Avoid boundary points Use relative ADC difference to verify calibration points ⇒ ADC difference is in proportion to coordinate difference
9
Driver: 2-points Calibration(2/2)
Coord. at ACD X - axis Coord. at LCD X - axis
distance
≈
distance
Hence we need two predefined calibration points to get a, b, c, d P = aX + b Q = cY + d
MTK Touch panel
2010/10/14
Agenda
Introduction
Features Files Framework
Driver Touch Panel Introduction Touch Panel Calibration Process Touch panel event
Flow diagram Exercise: tocuh panel event
2
Features
Enable touch panel in project(CUSTOM_PROJECT.mak)
TOUCH_PANEL_SUPPORT = TRUE HAND_WRITING = MMI_HANWANG # MMI_HANWANG, MMI_PENPOWER
Enable touch panel in MMI(MMI_features.h,do not modify)
Wgui_draw_manager.c (plutommi\mmi\gui\gui_src) Wgui_draw_manager.h (plutommi\mmi\gui\gui_inc) Wgui_touch_screen.c (plutommi\mmi\gui\gui_src) Wgui_touch_screen.h (plutommi\mmi\gui\gui_inc) CustCoordinates.c (plutommi\customer\custresource) EditorPen.c (plutommi\mmi\editorpen\editorpensrc)
Touch_panel_custom.c (custom\drv\misc_drv\BOARD_VER) Touch_panel_custom.h (custom\drv\misc_drv\BOARD_VER) Touch_panel_spi.c (custom\drv\misc_drv\BOARD_VER) Touch_panel_spi.h (custom\drv\misc_drv\BOARD_VER)
How to get a touch point coordinate?
3. Use calibration data to transformed ADC value into coordinate. 4.Turn on X+, X- and repeat step 1 and step 2.
8
Driver: 2-points Calibration(1/2)
#ifdef TOUCH_PANEL_SUPPORT #define __MMI_TOUCH_SCREEN__ #endif #ifdef __MMI_TOUCH_SCREEN__ #define __MMI_TOUCH_DIAL_SCREEN__ #define __MMI_DRAW_MANAGER__ #define __MMI_WGUI_CSK_ENABLE__ #endif
13 SPI_DOUT_PIN
Touch panel event flow(Touch panel task)
14
Touch panel event flow(MMI task)
15
Exercise: touch panel event
#include #include #include #include #include #include void void void void void void void void "MMI_features.h" "PixtelDataTypes.h" "wgui_categories.h" "gdi_include.h" "lcd_sw_rnd.h" "wgui_draw_manager.h"
my_pen_up_hdlr(mmi_pen_point_struct point); my_pen_down_hdlr(mmi_pen_point_struct point); my_pen_move_hdlr(mmi_pen_point_struct point); my_pen_abort_hdlr(mmi_pen_point_struct point); my_pen_repeat_hdlr(mmi_pen_point_struct point); my_pen_long_tap_hdlr(mmi_pen_point_struct point); start_handwriting(); end_handwriting();
11
Driver: MTK Calibration(2/2)
Factory Mode
12
Driver: Custom const variables
Members TOUCH_PANEL_ADC_X_START TOUCH_PANEL_ADC_X_EDN TOUCH_PANEL_ADC_Y_START TOUCH_PANEL_ADC_Y_EDN TOUCH_PANEL_COORD_X_START TOUCH_PANEL_COORD_X_EDN TOUCH_PANEL_COORD_Y_START TOUCH_PANEL_COORD_Y_EDN TOUCH_PANEL_START_BIT TOUCH_PANEL_X_PLUS TOUCH_PANEL_Y_PLUS TOUCH_PANEL_ADC3 TOUCH_PANEL_ADC4 TOUCH_PANEL_12BIT_SAMPLE TOUCH_PANEL_8BIT_SAMPLE TOUCH_PANEL_DIFF_MODE TOUCH_PANEL_SINGLE_MODE TOUCH_PANEL_PWD_ENBLE TOUCH_PANEL_IRQ_DISABLE TOUCH_PANEL_PWD_DISABLE TOUCH_PANEL_PWD_RESER SPI_DIN_PIN SPI_CLK_PIN Description ADC of the left-upper x coordinate ADC of the right-lower x coordinate ADC of the left-upper y coordinate ADC of the right-lower y coordinate Minimum value of the x coordinate Maximum value of the x coordinate Minimum value of the y coordinate Maximum value of the y coordinate Start bit setting of touch panel module X plus setting of touch panel module Y plus setting of touch panel module ADC3 setting of touch panel module ADC4 setting of touch panel module 12 bits sample setting of touch panel module 8 bits sample setting of touch panel module Differential mode setting of touch panel module Single-ended mode setting of touch panel module Power down enable setting of touch panel module Interrupt disable setting of touch panel module Power down disable setting of touch panel module Reset setting of touch panel module GPIO used to be input GPIO used to be clock GPIO used to be output
y
( X ,Y )
q
(P , Q )
p
( P, Q) : LCD coodrinare ( X , Y ) : Touch panel coodrinare Assumption 1: X, Y are not correlative Assumption 2 : The linearity error is small enough to be ignored P = aX + b Q = cY + d