MTK驱动架构详解
MTK手机原理图分析
手机原理图分析一、手机基本电路框图:二、基带CPU(MT6226)内部框图:1、组成部分:z DSP:主要完成对语音信号的编解码、信道编码、加密、交织处理等;z ARM7:主要是对外部Memory接口、用户接口(LCD、键盘、触摸等)、语音接口、射频接口、电源管理等的命令控制,使各部分协调工作。
2、基带部分语音编码过程(DSP):GSM标准规定时隙宽为0.577ms,8个时隙为一帧,帧周期为0.577×8=4.615ms。
因此,用示波器观测GSM移动电话机收发信息,会看到周期为4.615ms、宽0.577ms的突发脉冲。
基带部分电路包括信道编/译码、加密/解密、TDMA帧形成/信道分离及基准时钟电路,它还包括话音/译码、码速适配器等电路。
来自送话器的话音信号经过8kHz抽样及A/D转换,变成13bit均匀量化的104kbit/s数据流,再由话音编码器进行RPE-LTP编码。
编码输入为每20ms一段,经话音编码压缩后变为260bit,其中LPC-LTP为72bit,RPE为188bit。
话音编码后的信号速率为13kbit/s。
同时话音编码器还提供话音活性检测(vAD)功能,即当有话音时,其SP信号为1;当无话音传输时,将SP示为0(即SID帧)。
13kbit/s 话音信号进入信道编码器进行编码。
对于话音信号的每20ms 段,信道编码器首先对话音信号中最重要的Ia 类50bit 进行分组编码(CRC 校验),产生3bit 校验位,再与132bit 的Ib 类比特组成185bit ,再加上4个尾比特“0”,组合为189bit ,这189bit 再进入1/2速率卷积码编码器,该编码限制长度为5,最后产生出378bit 。
这378bit 再与话音信号中对无线信道最不敏感的II 类78bit 组成最终的456bit 组。
同样,对于信令信号,由控制器产生并送给信道编码器,首先按FIRE(法尔)码进行分组编码(称为块编码),然后再进入1/2卷积编码,最后形成456bit 组。
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芯片的硬件设备提供了必要的支持和管理功能,使其能够在计算机系统中正常工作。
mtkwifidriver驱动的分析
管理篇接收到扫描完毕nicRxSDIOAggReceiveRFBssdio有两个通道,两个通道获取数据的流程是一样的,1)通过prEnhDataStr->rRxInfo.u.u2NumValidRx0Len可以获取到该通道目前存储有多少数据包,通道数据包的存储量只有16个,如果超过16个则是固件问题,跳过看下一个通道的2)然后获取当前freeswrfb空闲空间是否够用,不够用则看下一个通道的。
3)可接收的聚合报文(管理帧)长度(u4RxAvailAggLen)为23524)循环遍历某个通道的报文,读到报文长度+4 然后按照4个字节对齐从u4RxAvailAggLen 扣减掉。
如果空间不够则跳出。
5)遍历完之后用2352减去u4RxAvailAggLen 可以得到总的数据长度通过dma获取数据到prRxCtrl->pucRxCoalescingBufPtr中1)6)遍历通道中报文数,把每个报文拷贝到prSwRfb->pucRecvBuff中,并且填充prSwRfb->ucPacketType和prSwRfb->ucStaRecIdx2)nicRxSetupRFB3)如果prSwRfb->pvPacket为空,则先将prSwRfb置成0,然后按照2352分配sk_buff,prSwRfb->pucRecvBuff指向skb->data,prSwRfb->pvPacket指向skb1)同时,prSwRfb->prHifRxHdr指向skb->data首部。
2)nicRxFillRFB3)从prHifRxHdr->ucHerderLenOffset获取出header的offset和MACHeaderLen4)设置prSwRfb->pvHeader指向skb->data越过prHifRxHdr + HIF_RX_HDR_SIZE + u4HeaderOffset,指向的将是beacon帧结构5)重置prSwRfb->u2HeaderLen=u4MacHeaderLen 和prSwRfb->u2PacketLen为原来skb->data长度减去(HIF_RX_HDR_SIZE + u4HeaderOffset)MacHeader 如下图:nicAddScanResult该函数分为replace和add部分,先讲解add部分Add1)如果prAdapter->rWlanInfo.u4ScanResultNum小于63则继续往下走2)先将prAdapter->rWlanInfo.arScanResult[i]到aucIE之前的部分设置为03)设置prAdapter->rWlanInfo.arScanResult[i].u4Length为aucIE之前的部分的长度+IE的长度4)拷贝mac地址到prAdapter->rWlanInfo.arScanResult[i].arMacAddress5)拷贝ssid到prAdapter->rWlanInfo.arScanResult[i].rSsid.aucSsid6)设置u4Privacy、rRssi、eNetworkTypeInUse、eOpMode等7)拷贝prConfiguration到prAdapter->rWlanInfo.arScanResult[i].rConfiguration中8)拷贝rSupportedRates到prAdapter->rWlanInfo.arScanResult[i].rSupportedRates中9)拷贝u2IELength到prAdapter->rWlanInfo.arScanResult[i].u4IELength10)如果u2IELength大于0 则检查aucScanIEBuf是否够放下当前bssdesc的IE部分,如果可以的话,则拷贝到aucScanIEBuf[prAdapter->rWlanInfo.u4ScanIEBufferUsage],然后设置指针到apucScanResultIEs[i]中,接下来重置u4ScanIEBufferUsage的值。
MTK平台Camera驱动
基于MTK平台Camera驱动简介软件开发部:John.WangCamera的硬件架构ARM Image signalCMOS Sensorprocessor& resizerMemoryImage encodeLCD软件开发部:John.WangCamera模块硬件在手机上的基本架构有三种(一)Baseband控制LCD+Sensor.Baseband控制LCD,在Camera模式下Backend IC控制LCD进行各种操作。
Camera模块硬件在手机上的基本架构有三种(二)Baseband控制LCD+Backend IC,Backend IC控制Sensor。
Camera模块硬件在手机上的基本架构有三种(三)Baseband控制Backend IC,并且在非Camera模式下Baseband控制LCD,在Camera模式下Backend IC控制LCD进行各种操作。
Camera 接口信号sensor MTK cameraVCAMA, VCAMDCMDAT0~7CMVREFCMHREFCMMCLKCMPCLKCMPDNCMRSTSCLKSDACamera 接口信号signal descriptionCMVREF CMOS sensor vertical reference signal input CMHREF CMOS sensor horizontal reference signal input SCLK IIC interface clock signalSDA IIC interface data signalCMMCLK CMOS sensor master clock output CMPCLK CMOS sensor pixel clock intputCMPDN CMOS sensor power down control CMRST CMOS sensor reset signal outputVCAMA Camera module analog powerVCAMD Camera module digital powerCMDAT0~7Camera data busIIC时序控制Camera interface时序控制Camera程序架构软件开发部:John.WangCamera程序架构MMI taskCamera APP:控制应用程序逻辑,Camera的状态机,包括了preview,capture,exit等各种状态控制。
MTK原理图
手机原理图分析一、手机基本电路框图:二、基带CPU(MT6226)内部框图:1、组成部分:z DSP:主要完成对语音信号的编解码、信道编码、加密、交织处理等;z ARM7:主要是对外部Memory接口、用户接口(LCD、键盘、触摸等)、语音接口、射频接口、电源管理等的命令控制,使各部分协调工作。
2、基带部分语音编码过程(DSP):GSM标准规定时隙宽为0.577ms,8个时隙为一帧,帧周期为0.577×8=4.615ms。
因此,用示波器观测GSM移动电话机收发信息,会看到周期为4.615ms、宽0.577ms的突发脉冲。
基带部分电路包括信道编/译码、加密/解密、TDMA帧形成/信道分离及基准时钟电路,它还包括话音/译码、码速适配器等电路。
来自送话器的话音信号经过8kHz抽样及A/D转换,变成13bit均匀量化的104kbit/s数据流,再由话音编码器进行RPE-LTP编码。
编码输入为每20ms一段,经话音编码压缩后变为260bit,其中LPC-LTP为72bit,RPE为188bit。
话音编码后的信号速率为13kbit/s。
同时话音编码器还提供话音活性检测(vAD)功能,即当有话音时,其SP信号为1;当无话音传输时,将SP示为0(即SID帧)。
13kbit/s 话音信号进入信道编码器进行编码。
对于话音信号的每20ms 段,信道编码器首先对话音信号中最重要的Ia 类50bit 进行分组编码(CRC 校验),产生3bit 校验位,再与132bit 的Ib 类比特组成185bit ,再加上4个尾比特“0”,组合为189bit ,这189bit 再进入1/2速率卷积码编码器,该编码限制长度为5,最后产生出378bit 。
这378bit 再与话音信号中对无线信道最不敏感的II 类78bit 组成最终的456bit 组。
同样,对于信令信号,由控制器产生并送给信道编码器,首先按FIRE(法尔)码进行分组编码(称为块编码),然后再进入1/2卷积编码,最后形成456bit 组。
MTK驱动基本介绍
MTK驱动基本介绍
MTK驱动,也称为MediaTek驱动,是一种特定于联发科技(MediaTek)芯片的驱动程序。
联发科技是全球领先的半导体解决方案提
供商之一,其产品广泛应用于移动通信、家庭娱乐、无线通信和物联网等
领域。
MTK驱动的作用是连接计算机与MTK芯片设备之间的通信,使得计算
机可以与MTK芯片设备进行数据交互和控制。
这些设备包括智能手机、平
板电脑、物联网设备以及其他使用MTK芯片的电子产品。
MTK驱动是连接
计算机和这些设备之间桥梁的关键。
MTK驱动负责与芯片设备之间的通信协议,包括数据传输、设备识别、设备控制等功能。
它通过USB接口与计算机连接,并与操作系统进行交互,将设备的功能暴露给计算机使用者。
MTK驱动的正常工作对于设备的功能
和性能至关重要。
MTK驱动的开发是一个复杂而严谨的过程。
开发人员需要深入研究MTK芯片的架构和规范,并编写适配特定芯片的驱动程序。
他们还需要进
行严格的测试和验证,以确保驱动程序在各种情况下都能正常工作。
同时,开发人员还需要与MTK芯片的生产商保持密切合作,获取相关技术支持和
更新。
总之,MTK驱动是一种桥梁,将计算机与MTK芯片设备连接起来。
它
通过通信协议实现数据传输和设备控制,使得用户可以便捷地使用MTK芯
片设备。
MTK驱动的适应性和兼容性优势使得其成为移动通信和物联网领
域的重要组成部分。
同时,MTK驱动的安装和更新也是用户使用设备时需
要考虑的重要问题。
MTK_camera驱动流程总结_pei
Camera驱动流程总结范军君junjun.fan@目录1,Camera架构及流程简析2,初始化过程camera id检测3,Camera上电流程4,Camera打开流程Camera架构及流程简析MTK平台camera架构:Kernel部分主要有两块:一块是image sensor驱动,负责具体型号的sensor的id检测,上电,以及在preview,capture,初始化,3A等等功能设定时的寄存器配置。
另一块是isp driver,通过DMA将sensor数据流上传。
本篇主要介绍image sensor驱动的流程。
HAL层这边主要分3块,一块是imageio,主要是数据buffer上传的pipe。
一块是drv,包含imgsensor和isp的hal层控制。
最后是feature io,包含各种3A等性能配置。
本篇对HAL涉入不深,只在分析开机过程的id检测时会分析hal层的控制,属于第二块。
流程简析:主要发生在两个时间点:开机过程中camera的动作以及打开应用时camera的动作。
开机时,camera完成了sensor框架的初始化,id检测,以及上下电操作。
打开应用时,camera会有上电,完成寄存器的初始配置,向上层传送基本参数及配置信息,以及preview和capture模式循环。
初始化过程camera id检测代码分析:=>alps/mediatek/custom/common/kernel/imgsensor/kd_sensorlist.cmodule_init说明这段code在kernel初始化,也就是手机开机时运行。
在模块初始化函数中,注册一个i2c device,同时注册了一个platform driver注意driver name,匹配platform device需要名字一致。
Platform总线为虚拟总线,注册platform driver主要目的是隔离上下层,增强代码的可移植性。
MTK手机设备驱动编写介绍
•
LCD_delay_HX8306A();\
•
}
•
#define LCD_DataWrite_HX8306A(_data) \
•
{\
•
*(volatile kal_uint32 *) LCD_HX8306A_DATA_ADDR=
((_data & 0xFF00)<<2)|((_data & 0xFF)<<1);\
TD_CTRL);
construct_local_para(sizeof(aux_id_struct),
aux_id_data->aux_id = AUX_ID_FLICK_OFF;
DRV_BuildPrimitive(flick_ilm, MOD_EINT_HISR, MOD_UEM, MSG_ID_AUX_ID, aux_id_data);
3. GPIO使用中需注意的问题
MTK手机设备驱动编写介绍
二.中断的配置与使用
<1>. 中断个数
8个 EINT0, EINT1为专用中断, EINT2-7 与GPIO等功能复用
<2>. 设置中断模式
通过DRV_TOOL或Gpio_init(void)来初始化,也可在程序中通过 GPIO_ModeSetup(kal_uint16 pin, kal_uint16 conf_dada)随时修改
MTK手机设备驱动编写介绍
audcoeff_default.h
#define DEFAULT_SPEECH_LOUDSPK_MODE_PARA \ {\ 128, 224, 5128, 0, 374, 0, 400, 0 \ }
starty,kal_uint16 endx,kal_uint16 endy) • void LCD_EnterSleep_ST7549T(void) • void LCD_ExitSleep_ST7549T(void) • void LCD_SetContrast_ST7549T(kal_uint8 level)
MTK平台硬件图文讲解
使能信号,这些信号通过MT6305的电平转换以后通过SIO,SRST,SCLK跟SIM卡实现通信。
13
硬件电路原理 -电源管理 - 内置LDO输出
1.8V 2.8V 2.8V 2.8V
2.8V 1.8/3.0V
1.5V
背光灯 控制 Motor 控制
14
硬件电路原理 -电源管理 - 外部LDO
外部LDO U303为基带处理器内部的USB部分电路提供3.3V的工作电压,LDO的输入电压为电脑的USB_PWR,CPU检测到USB 数据线插入的中断以后通过GPO2_USB_EN使能U303 LDO。ADC2_TBAT为电池温度检测ADC。 MT6305内部包含系统复位电路,能够在系统上电时对基带处理器和相关数字电路进输入
3.3V
15
硬件电路原理 -基带 - 供电
基带芯片MT6226根据内部不同的功能模块其供电也各自分开,VMEM(2.8V)为存储器接口驱 动电路供电,VCORE(1.8V)为6226内核电路供电,VUSB(3.3V)为USB 内部收发器供电, VRTC(1.5V)为6226内部的实时钟电路供电,AVDD(2.8V)为IC内部的模拟电路供电, VDD(2.8V)为数字IO电路供电。
手机的射频包括接收机,发射机和频率合成器电路,软件校准也是针对这三部分的硬件参数进 行校准的
频率合成器校准(即AFC校准),手机的频率合成器由PLL锁相环构成,如下图:
AFC
VCTCXO 26MHz
EN DA CLK
/N
RF锁相环 PLL & CP
可编程分频 器 /M
LF环路滤 波器
RFVCO
天线开关DCS发射控制
8
硬件电路原理 -射频元器件识别
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系统与驱动
MTK平台:基于32bit ARM7EJ-S Risc处理器,GPRS Class12 Modem.功能扩展接口:3个port外部内存接口,3个8/16bit并行接口,Nand Flash,IrDA,USB 和MMC/SD/MS/MS Pro.时钟频率:104MHz;48K Bytes on-chip SRAM;72K Bytes MCU dedicated Tightly Coupled MemoryMCU_CLOCK = MCU_104M # MCU clock setting, MCU_13M, MCU_26M, MCU_39M, MCU_52M, MCU_104MEXT_CLOCK = EXT_26M # External clock source setting, EXT_13M, EXT_26M RF_MODULE = LENOVOSH25_06B_PMJ_MT6139E;PMIC = MT6318 # Charge Function, NONE, MT6305 or MT6318 PLA TFORM = MT6225 # Hardware Platform, MT6208, FPGA, MT6218, MT6218B, MT6219, MT6226, MT6227, MT6228, MT6229 ...etc.MCU启动流程:UART口在26Mhz环境下150ms内,若没收到start命令,它会自动从flash的0x0地址去执行。
否则:Meta模式的触发(trigger)命令,是一个目标寄存器的写命令。
寄存器:0x80120000=0x01(MT6217/ MT6218/ MT6219/ MT6226/ MT6227/)离开bootrom后,发生在flash上的第一个动作是关闭IRQ和FIQ,并且确保系统进入监视模式;Remapping,即地址0x00将被切换到SRAM上面;检测非正常reset,从flash上拷贝读/写数据,随后栈指针(sp)初始化;最后,MCU的启动序列在应用程序进入点终止;Remapping为了remapping成功,如下修改是必须的:1 SRAM开始的320Byte内存要保留,用于异常处理,异常处理代码在reset后从flash复制。
MTK HAL 及Driver 软件架构
[MTK Camera Haice Manager
Provides supported device information(by searching,...) Manages each device and decides which device to create
Image Sensor Dirver(1/3)
Sensor id and Driver name
file:
- alps\mediatek\custom\common\kernel\imgsensor\inc\kd_imgsensor.h - alps\mediatek\custom\common\kernel\imgsensor\inc\kd_imgsensor_define.h
file:
- alps\mediatek\custom\common\hal\imgsensor\imgsensor_src\sensorlist.cpp
Image IO (1/3)
Pipe
Capture Preview path config get pmem/physical address enqueue/dequeue buffer Image Io DMA config start/stop/wait DMA CamIo Pass 1 path config PostProc ROTDMA Digital zoom Cdp ROTDMA Digital zoom Olny CDP allowed concurrency process Pipe Drv
Sensor Driver
file:
- alps\mediatek\custom\common\kernel\imgsensor\$project$\$project$_sensor.c - alps\mediatek\custom\common\kernel\imgsensor\$project$\$project$_sensor.h
MTK驱动架构分析及驱动调试指引
Camera MMI程序分析(3/3)
Camera MMI仅控制应用逻辑,而避免去涉及 照相机驱动的细节。比如说进入preview过程, Camera MMI仅仅是向MDI接口模块发送一个 Preview的请求,并将自己的数据结构传给MDI 层,再由MDI层向Media task层发送请求,并最 终调用到驱动程序来控制芯片实现preview。 MMI不关心不同的芯片如何去进入preview。 OSD是通过GDI层来绘制的,因为GDI支持最 大4层的图像叠加(6228平台可支持6层GDI)
Camera MMI程序分析(2/3)
Exit Preview
Capture
Capture Contshot Capture C来自untdownCancel
Capture Burstshot
Save Done
Save
Save Burstshot Burst Save Confirm Save Confirm
Media Task总结
总结
充分了解Media Task的作用和工作流程以后, 就可以理顺从Camera应用程序到底层程序的 整个流程和逻辑,无论是应用程序还是驱动 程序编程都会变得非常的轻松。 Media Task是可扩展可更改的,所有的代码 都是开放的,我们也可以订制一些自己的东 西。比如在200万像素拍照时出现了内存不 足问题,我们就修改了对文件的操作方法。
GDI简介(Graphics Device Interface)
MTK的画图功能有两套体系,一套是 pixtel的体系,另一套是GDI。Pixtel的体 系比较老,它最开始是用来处理单层图 像的简单接口,pixtel体系也是基于GDI 基础上封装出来的。而GDI体系由于有硬 件的支持,它可以处理最多4个层数据的 叠加,有很强的表现能力。 硬件支持有:DMA的传输,图片硬件解 码,以及2D加速器等。
mtkwifidriver驱动的分析
管理篇接收到扫描完毕nicRxSDIOAggReceiveRFBssdio有两个通道,两个通道获取数据的流程是一样的,1)通过prEnhDataStr->rRxInfo.u.u2NumValidRx0Len可以获取到该通道目前存储有多少数据包,通道数据包的存储量只有16个,如果超过16个则是固件问题,跳过看下一个通道的2)然后获取当前freeswrfb空闲空间是否够用,不够用则看下一个通道的。
3)可接收的聚合报文(管理帧)长度(u4RxAvailAggLen)为23524)循环遍历某个通道的报文,读到报文长度+4 然后按照4个字节对齐从u4RxAvailAggLen 扣减掉。
如果空间不够则跳出。
5)遍历完之后用2352减去u4RxAvailAggLen 可以得到总的数据长度通过dma获取数据到prRxCtrl->pucRxCoalescingBufPtr中1)6)遍历通道中报文数,把每个报文拷贝到prSwRfb->pucRecvBuff中,并且填充prSwRfb->ucPacketType和prSwRfb->ucStaRecIdx2)nicRxSetupRFB3)如果prSwRfb->pvPacket为空,则先将prSwRfb置成0,然后按照2352分配sk_buff,prSwRfb->pucRecvBuff指向skb->data,prSwRfb->pvPacket指向skb1)同时,prSwRfb->prHifRxHdr指向skb->data首部。
2)nicRxFillRFB3)从prHifRxHdr->ucHerderLenOffset获取出header的offset和MACHeaderLen4)设置prSwRfb->pvHeader指向skb->data越过prHifRxHdr + HIF_RX_HDR_SIZE + u4HeaderOffset,指向的将是beacon帧结构5)重置prSwRfb->u2HeaderLen=u4MacHeaderLen 和prSwRfb->u2PacketLen为原来skb->data长度减去(HIF_RX_HDR_SIZE + u4HeaderOffset)MacHeader 如下图:nicAddScanResult该函数分为replace和add部分,先讲解add部分Add1)如果prAdapter->rWlanInfo.u4ScanResultNum小于63则继续往下走2)先将prAdapter->rWlanInfo.arScanResult[i]到aucIE之前的部分设置为03)设置prAdapter->rWlanInfo.arScanResult[i].u4Length为aucIE之前的部分的长度+IE的长度4)拷贝mac地址到prAdapter->rWlanInfo.arScanResult[i].arMacAddress5)拷贝ssid到prAdapter->rWlanInfo.arScanResult[i].rSsid.aucSsid6)设置u4Privacy、rRssi、eNetworkTypeInUse、eOpMode等7)拷贝prConfiguration到prAdapter->rWlanInfo.arScanResult[i].rConfiguration中8)拷贝rSupportedRates到prAdapter->rWlanInfo.arScanResult[i].rSupportedRates中9)拷贝u2IELength到prAdapter->rWlanInfo.arScanResult[i].u4IELength10)如果u2IELength大于0 则检查aucScanIEBuf是否够放下当前bssdesc的IE部分,如果可以的话,则拷贝到aucScanIEBuf[prAdapter->rWlanInfo.u4ScanIEBufferUsage],然后设置指针到apucScanResultIEs[i]中,接下来重置u4ScanIEBufferUsage的值。
MTK手机软件系统工程和配置简介
MTK是现在市场上所有国内手机设计、制造商使用的最多的一个完整的手机产品解决方案,大部分做手机的技术人员都对此有接触和了解。
不过,MTK的整套软件系统十分庞大且复杂,很多刚接触这套系统的软件工程师一时不知如何进行配置和客户化定制。
本文在此对整个MTK软件系统的工程结构和配置进行了简单介绍,希望通过此文和大家相互交流MTK软件系统的维护和修改、定制方面的心得。
MTK使用了nucleus实时操作系统,在其上做了个内核抽象层的封装,以适应多种实时操作系统,如oscar、ThreadX、nucleus。
整个软件系统包括nucleus操作系统、平台设备驱动、协议栈、文件系统、WGUI、MMI、J2ME等。
在这里MMI部分几乎包括了操作系统内核、协议栈、文件系统之上的所有部分,其中WGUI也在其中。
MTK的PC模拟版使用VC的编译器和链接器生成,ARM版使用ADS1.2的编译器和链接器生成。
因为MTK的整个软件系统是一个很庞大而且复杂的工程,并且要支持多个MTK的产品系列和多家客户的客户化支持,使用集成开发环境(IDE)已经无法胜任,而且很难做到整个工程的自动构建和资源、代码的生成。
所以MTK的软件系统使用了windows下的GNU开发工具链(MinGW)来进行工程的管理、配置和构建,MTK将MinGW放到了第三方工具中。
另外还使用了perl脚本来解析用户输入的命令行参数,因此第三方工具中还包含了ActivePerl(windows下的perl解释器)。
不过,整个软件系统并没有使用MinGW的全部工具,好象只使用了make这个工具,由几个Makefile控制了构建的过程,在编译和链接时根据最终生成PC模拟版还是ARM版而分别调用VC的编译器和链接器或ADS1.2的编译器和链接器。
接下来我们从具体的工程实践来看MTK的手机软件系统。
一. MTK手机软件系统的目录结构简介MTK手机软件系统的主要目录如下所示,因整个工程的目录树非常庞大,为简单起见和减小篇幅,去除了在工程结构中相对不重要的目录。
MTK-SD驱动
首次出关于MTK方面的驱动文章,网上也很少有这方面的文章,所以我立志要写几篇这样的文章来引导刚出道的朋友们,咱们一起努力!大家都说MTK简单,但我个人做过高通平台一年时间,然后转而做MTK平台,感觉还是能学到东西的,代码并不比所谓的高通简单,只是它做的好,封装的好,所以做这块驱动可能开发者做的事情没高通多,所以大家觉得容易,学不到东西。
但只要自己对技术执着,深入到架构的实现,还是能学到很多的。
我要让大家有这样一个思想,我们做MTK平台的不比做其他任何平台的差。
一. SD卡的基本知识:SD卡有9个pin脚(micro-SD为8个,少一个接地pin脚),如图所示,SD的数据传输方式有两种,普通SD模式和SPI模式,以SD模式为例,9个pin脚分别是VDD,VSS,CLK,以及我们需要关注的一根指令线CMD,4根数据线DAT0~DAT3。
分类:∙按存储大小,普通SD卡(<=2GB,支持FAT12/FAT16),HCSD卡(>2GB,<=32GB,支持FAT32)∙按体积大小,普通SD卡,mini-SD卡,micro-SD卡(TF卡)速度∙默认模式: 12.5MB/s∙高速模式: 25MB/s二. SD卡在MTK6573中的架构涉及到的文件有:mediatek/platform/mt6573/kernel/drivers/mmc-host/sd.cmediatek/platform/mt6573/kernel/drivers/mmc-host/mt6573_sdc.c 下面就整个驱动的流程过一下:系统起来的时候执行static int __init mt6573_sd_init(void) 在这个函数里最重要的是执行platform_driver_register(&mt6573_sd_driver),即注册到内核的虚拟总线上,注册的原则是把驱动mt6573_sd_driver各参数进行初始化。
MTK驱动基本介绍
Lcd.c
LCD_Funcs LCD_func_SSD1289 = {
LCD_Init_SSD1289,
LCD_PWRON_SSD1289,
LCD_SetContrast_SSD1289,
LCD_ON_SSD1289,
#define LCD_CtrlWrite_SSD1289(_data) \
{\
*(volatile kal_uint32 *) LCD_SSD1289_CTRL_ADDR = _data;\ --------写的是命令
LCD_delay_SSD1289();\
}
#define LCD_DataWrite_SSD1289(_data) \
#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__))
MTK平台驱动基本介绍 收藏
----------MTK6225
一:LCD
文件位于custom\drv\LCD
以华立维的一款240X320的屏为例介绍如何添加LCD驱动
gprs.mak
LCD_MODULE = HUALIWEI_SSD1289_LCM
MAIN_LCD_SIZE = 240X320
#endif
};
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公司 开发。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Camera MMI 状态机(capture)
Exit Preview
Capture Countdown
Save Done
Capture Contshot
Capture Cancel
Capture Burstshot
MTK驱动架构详解
Camera程序架构
MMI Task
Camera MMI
MDI Camera
GDI
MEDIA Task
Camera Driver
LCD Interface
HW- (LCM, ISP, MT6218, MT6219...)
Camera程序架构
MMI task
Camera APP:控制应用程序逻辑 MDI:应用程序接口层,直接操作Camera feature GDI: 处理Multi-layer,实现OSD
/* 线程配置 */
med_reset,
/* 重设 */
NULL,
/* 线程结束 */
Media Task消息
med_task_main函数是Media Task的消息泵。这 里是一个无限循环,不停从消息队列中获取消 息分发消息。
从消息队列中获取消息,通过receive_msg_ext_q函 数来实现
制LCD和Camera状态的逻辑。此文件里的函数基本 上和Cam_module.c驱动文件里的函数一一对应,它 抽取出了每个函数的一些共性的东西(主要是对芯 片状态的控制和对LCD的控制),使得在对 Cam_module.c编程的时候仅需要考虑和backend IC 硬件相关的东西。
Media Task Camera作用
除了Camera模块外,Idle screen和Media Player 等也使用GDI。
GDI和pixtel_UI的关系
GDI的实现
使用GDI_HANDLE,gdi_handle来操作 GDI对象,GDI的对象可以是layer,gif, jpeg等。 GDI函数返回一个GDI_RESULT GDI函数使用互斥来保护,进入GDI函数 时调用GDI_ENTER_CRITICAL_SECTION()退 出函数时调用GDI_EXIT_CRITICAL_SECTION()
Save Burstshot
Save
Burst Save Confirm
Save Confirm
Camera MMI
说明
Camera MMI仅控制程序的逻辑,并避免去 使用Camera Feature。比如说进入preview, Camera MMI仅仅是向MDI接口模块发送一 个Preview的请求,并将自己的数据结构传 给MDI层,再由MDI层向Media task层发送 请求,并最终调用到驱动程序来控制芯片实 现preview。
Media Task总结
总结
在充分的了解了Media Task的作用和工作流 程以后,应用程序和驱动程序的编程都变成 了一件非常的轻松的事情。
我觉得Media Task并非是不可扩展或不可更 改的,如果我们对它有了充分的了解以后, 也可以在它的状态机中定制一些自己的东西。
Media Task总结
在我们进行200万以上的高象素的Camera 驱动程序评估的时候已经发现了Media Task的一些小问题,Media Task程序原来 的架构是很浪费内存空间。这成为我们 平台实现高象素Camera的一个瓶颈,于 是我们又针对Core Logic芯片的特性对 Media Task的Camera部分进行了一些改进。 (在后面的章节,再详细介绍这部分内 容)
Media Task
Media Task模块分成4个部分:
Camera Audio Image Video
Media Task
Media Task模块有以下的作用:
管理硬件资源(camera,audio,ect.),为上层程序提 供方便和统一的接口。
使用一个单独的线程,能更好的处理实时性很强的 任务,如Camera,Audio,jpeg decoder。
阻塞MMI的命令是CAM_WAIT_EVENT (XXX), 当Media task 调用CAM_SET_EVENT (XXX)时, 恢复MMI线程。
Preview实现
下面我们来看看Preview函数从上层到底层的调 用
mmi_camera_preview_start(MMI逻辑控制) mdi_camera_preview_start(数据转换) mdi_camera_preview_start_internal(数据打包,OSD 层绘制,设置当前LCD的ID) media_cam_preview(发消息,阻塞MMI线程) cam_send_preview_req(消息排队) med_task_main(检查消息) med_maincam_main(识别消息) cam_preview_req_hdlr(消息处理,控制驱动程序)
Media Task线程从med_create开始创建,其实 med_create函数只是将入口地址传递给库里的 函数,由里面的函数来创建线程。
Med_create中传入了以下的函数:
med_task_main,
/* 线程入口,消息泵 */
med_init,
/* 初始化 ,指定空间分配*/
NULL,
Media Task Camera具有以下一些作用:
封装了Camera驱动程序 控制了消息循环 进行出错判断,控制一些超时等待以及硬件
错误的处理逻辑 不改变原来Media Task架构的前提下,我们
也可以配置一些关键的参数(见 med_global.h中的可配置参数)
Media Task Camera
设置当前活动模块,通过stack_set_active_module_id 分发消息,通过消息号,找到对应的消息处理函数,
使用med_main函数。程序里面有很大的一个消息索 引 释放返回消息数据内存区域,free_ilm
Media Task消息
从med_maincam_main相应的消息处 理函数,这时从MDI发过来的一个消息 才被识别,并进入相应的消息处理函数。 这时,我们回过头来再来看我们前面在 MDI章节所分析的Preview实现的例子, 会更清晰一些。 原来的例子:Preview实现
Media Task封装了硬件驱动程序的API,使得其他 的线程可以方便的调用。
Mp3的背景播放功能,也是通过Media Task实现
Media Task功能很强,管理方便,但它也不是 完美无缺的
Camera和Mp3播放不能同时使用 讲另一个Audio和Image解码冲突的案例
Media Task的由来
OSD是通过GDI层来绘制的,因为GDI支持 最大4层的图像叠加
Media Device Interface
MDI模块是Media Device Interface的缩写。 MDI模块的作用是向多媒体APP程序提供 一个简单易用的API,使得应用程序编程 更加容易。 MMI程序员在编程的时候可以不用知道 MMI如何同Media Task或其他的Drvier如 何进行通信。 MDI模块分为MDI Audio和MDI Camera。
Camera硬件架构
Camera模块硬件在手机上的基本架构有三种:
Baseband控制LCD+Sensor,Baseband有jpeg的编解 码功能(如6219),这种架构的编程相对简单。
Baseband控制LCD+Backend IC,Backend IC控制 Sensor。这时Backend IC的处理能力会相对较弱, 硬件结构也比较简单(如PAP1301)。
Prview的状态机
MSG hpreview_req_hdlr对可能出 错的各种情况做了判断,并在程序设计的时候 尽量的去考虑实时性。 Msg handler对各种逻辑的判断,并不涉及太多 的硬件特性,更多的是对消息逻辑的控制,在 一定时间没有驱动程序相应,或者Power check 失败等情况,就返回并通过SetEvent来释放被 阻塞的MMI线程。 MSG handler函数属于Media task模块
硬件支持有:DMA的传输,图片硬件解 码,以及2D加速器等。
GDI应用
大部分的菜单使用Pixtel_UI来绘制,因为没有 必要使用复杂的GDI。 Camera程序必须使用GDI来实现,因为MTK的 Camera驱动程序比较特殊,我看过的大部分手 机都不支持在Preview区域以内的地方叠加东西 (象框除外)。也就是说一般的手机只支持两 层叠加的OSD,因为有了GDI,MTK支持3层 叠加。
Baseband MT6219
LCM
Camera硬件架构
架构2 (PAP1301)
Baseband
LCM
MT6218B
Sensor
PAP1301
Camera Backend
Camera硬件架构
架构3(CL712S8)
Baseband
MT6218B
LCM
Sensor
CL712S8
使用)
状态机
Ext_camera.c
Media Task Camera主要有两个文件,前面所讲 的都是Cam_msg_handler.c部分。还有一个在更 底层一些的Ext_camera.c文件。虽然都属于 Media Task模块,但两个文件的分工不同:
Cam_msg_handler.c主要负责处理和控制消息 Ext_camera.c文件则主要是封装驱动程序,并负责控
Camera MDI
Camera MDI提供Camera相关的API,它 有以下几个主要的作用:
提供简单易用的Camera接口 负责从MMI task向Media Task发送并处理消