锐单电子商城 , 一站式电子元器件采购平台!
  • 电话:400-990-0325

6223开机流程分析

时间:2022-10-30 10:00:00 sml4749二极管

MTK

1说明:...4

2术语:...4

3系统启动流程框图:...4

4MMI开机过程:...4

4.1MMI TASK..4

4.2启动过程分支...7

4.3MMI启动流程图...8

4.4MMI启动函数调用过程和说明...9

5APP INIT...14

6开机过程--l4 \UEM\NVRAM\MED...15

6.1BMT.15

6.2UEM..15

6.3NVRAM..16

6.4L4C.16

6.5UEM..16

6.6MOD_MED..17

6.7&nbs;   UEM..17

6.8     L4C.17

6.9     信令流程图...18

7    开机过程--BMT\PMIC...24

8    开机过程--BOOT...24

9    l4介绍:...24

9.1     COMMON..24

9.2     Architecture.24

9.3     L4 TASK..25

9.4     L4C Module.27

9.5     UEM Module.27

9.6     RAC Module.28

9.7     TCM Module.28

9.8     SMLAL Module.28

9.9     CSM Module.28

9.10   SMU Module.28

9.11    PHB Module.29

9.12   ATCI Module.29

10      MED介绍:...29

11   KEY PAD介绍:...29

11.1    简单说明...29

11.2    文件...30

11.3    相关部分...30

12      BMT介绍:...31

13      PROGRESS...31

13.1       进程优先级...32

13.2       进程创建...33

14      BOOT...35

14.1   MCU块图...35

14.2   MEMORY重映射...35

14.3   PWR ON..37

14.4   PMU..38

14.5   BOOT.40

15      其他:...40

15.1       相关变量和数据结构...40

15.2   _boot_mode.43

15.3   system_boot_mode.43

15.4   _IsBootForUSBAT.44

15.5   PWRon.44

15.6       开机LOGO..45

15.7       默认时间...46

15.8   KAL的初始化...46

15.9   RTC的初始化...46

15.10     Initialize单步之后的流程//6253.47

15.11     寄存器...47

 


 

 

1         说明:

 

 

2         术语:

 

DCL (Driver Common Layer)

MPUMemory Protection Unit

 

 

 

3         系统开机流程框图

 

 

 

 

 

 

1         MMI开机过程:

 

1.1       MMI TASK

TASK创建:

TaskInit.c

mmi_create()

    {

        MMI_task,   /* task entry function */

        MMI_Init,   /* task initialization function */

        NULL,

    };

 

 

另留意Mmi_create.c文件里有

mmi_create(comptask_handler_struct **handle)

{

       static comptask_handler_struct mmi_handler_info =

       {

              mmi_task_main,                   /* task entry function */

              NULL,                  /* task initialization function */

       };

}

这个文件的函数不执行具体内容,看这个文件出现的作用和是否生效。(简单分析,它由#ifndef PLUTO_MMI这个宏来控制,应该是给AT版本使用的,因为AT版本不需要MMI界面,另这个文件也不在LIS文件之中。)

 

MMI初始化执行在系统的栈初始过程中,先执行。

-000|MMI_Init(task_indx = INDX_MMI)

-001|stack_init_tasks(asm)

-002|stack_init(asm)

-003|mainp(asm)

-004|Application_Initialize()

-005|INC_Initialize(asm)

-006|MTK_Initialize(asm)

----|end of frame

    |

 

任务启动执行在进程创建过程中,后执行。进入MMI TASK后,开始没有有效信号,任务空转,等到键盘发出信号提示开机后,MMI TASK正式开机。

-000|MMI_task(entry_param = 0x00126E28)

-001|TCC_Task_Shell(asm)

----|end of frame

    |

    |

 

队列管理:

 

 

 

 

初始化:

 

 

 

 

 

重要信号:

MSG_ID_MMI_EQ_POWER_ON_IND

MMI TASK收到的很早一个信号,给MMI提示开机。

 

MSG_ID_MMI_EQ_PWNON_DUAL_SIM_IND

在开机动画过程中会收到

 

 

重要变量:

g_pwr_context

g_pwr_context_2

 

g_charbat_context

StartUpTime

 

 

g_phnset_cntx

 

 

1.2       开机流程分支

 

类型:无锁、SIM1 PIN1SIM2 PIN1SIM1 PUKSIM2 PUKSIM1 SML(5)SIM2 SML(5)PHONE LOCK

开机模式:飞行模式、只开卡1,只开卡2,开双卡

开机方式:按键、闹钟、充电。。。   

POWER_ON_KEYPAD            = 0 ,

       POWER_ON_ALARM                ,

       POWER_ON_CHARGER_IN             ,

       POWER_ON_EXCEPTION         ,

       POWER_ON_USB               ,

       POWER_ON_UNINIT                ,

       POWER_ON_PRECHARGE = 8

卡状态:不插卡、只插卡1,只插卡2,插双卡

卡类型:正常卡、无效卡、欠费卡;

卡兼容:慢卡、协议不兼容卡、不同协议版本的卡等。

 

组合起来就相当庞大的分支,下面是一个组合矩阵的示例:

 

 

 

1.1       MMI启动流程图

以按键开机举例,正常的双卡开机,没有锁的MMI开机流程图如下:

 

 

 

 

 

1.1       MMI启动函数调用过程和说明

 

MSG_ID_MMI_EQ_POWER_ON_IND

在MMI_Task()中,进入:

switch (p->poweron_mode)

       case POWER_ON_KEYPAD:

mmi_bootup_entry_disk_check

                根据FS_SanityCheck()结果执行不同流程。一般走FS_NO_ERROR

                mmi_bootup_exit_disk_check()

                  mmi_frm_power_on_init_procedure

                     进行一系列的应用初始化,包括InitializeAll

                  mmi_bootup_entry_flight_mode_query()空函数

                     FlightModeCheckBeforeAnimation()判断飞行模式

MTPNP_AD_Bootup

PowerOnNormalMode

会发送信令PRT_NW_CFUN_STATE_REQ

L4,让l4c_nw_cfun_state_req()得到执行,启

动网络和SMU等功能,这个事件在双卡项目会

收到两次

                        mmi_bootup_exit_flight_mode_query();

                         mmi_bootup_entry_animation()定时器执行

                         等待期间,会来下面的事件

                          MSG_ID_MMI_EQ_BATTERY_STATUS_IND

                          (这个颜色的信号都是被CATCHER弄丢了的,所以

CATCHER不可以全信)

。。。。。。

   

这里有一个调用栈,是对上面过程的一个验证:

-000|mmi_bootup_exit_flight_mode_query()

-001|PowerOnNormalMode()

-002|MTPNP_AD_Bootup()

-003|FlightModeCheckBeforeAnimation()

-004|mmi_bootup_exit_disk_check()

-005|mmi_bootup_entry_disk_check()

-006|MMI_task(?)

-007|TCC_Task_Shell(asm)

----|end of frame

 

 

代码里关于开机流程有一个简单过程说明

     * Power On Procedure

     *

     * Power On Display      NAND       SIM        Net Search    Idle Scr

     * #----------------------#----------#----------#-------------#-----------#

     * (option)    (option)    (option)

                        

mmi_bootup_entry_animation()

       mmi_pwron_entry_animation_screen()

         ShowCategory166Screen(mmi_pwron_show_image_callback() )

进入并播放动画,通过回调函数进入后面的流程。

            

            播放动画期间,会来下面的事件(选取比较重要的部分事件)

             MSG_ID_MMI_SMU_SIM_STATUS_UPDATE_IND

             MSG_ID_MMI_SMU_STARTUP_INFO_IND

               smu_main : MSG_ID_SIM_START_CNF 26 0 0

smu_main : MSG_ID_SIM_MMI_SECURITY_IND 26 0 0

 

SML-SIM2 feature: m_handle_chv_validation begin

smu_main : MSG_ID_SIM_MMRR_READY_IND 26 0 0

              (这部分蓝色的位置不太确定,蓝色表示安全检查)

 

MSG_ID_MMI_EQ_PWNON_DUAL_SIM_IND

               ( sim_config_status = 2 , sim_insert_status = 3 都是双卡 )

 

MSG_ID_MMI_NW_PWNON_DUAL_SIM_IND

 

MSG_ID_MMI_NW_CFUN_STATE_RSP

 

MSG_ID_MMI_CPHS_MMI_INFO_IND

 

MSG_ID_L4AUD_AUDIO_PLAY_FINISH_IND

 

MSG_ID_MMI_SMU_PASSWORD_REQUIRED_IND

 

MSG_ID_MMI_NW_SEL_MODE_IND

 

MSG_ID_MMI_RAC_ACTIVATED_ IND

 

MSG_ID_MMI_SMU_CHECK_PIN_STATUS_RSP

 

mmi_pwron_show_image_callback

      状态不同走的流程也不同,下面是进入这个函数之后的调用栈:

-000|PowerOnBatteryIndicationCompletePhase2()

-001|mmi_bootup_entry_security_check()

-002|mmi_bootup_exit_low_battery_warning()

-003|BatteryCheckAfterPowerOnAnimation()

-004|mmi_bootup_entry_low_battery_warning()

-005|mmi_bootup_exit_animation()

-006|CallBackPowerOnAnimationComplete(?)

-007|mmi_pwron_show_image_callback(?)

-008|cat166_animation_complete_callback_int(?)

-009|gdi_anim_callback_timer(?)

-010|L4CallBackTimer(?)

-011|evshed_timer_handler(asm)

-012|EvshedMMITimerHandler(?)

-013|MMI_task(?)

-014|TCC_Task_Shell(asm)

----|end of frame

 

在这之后,会根据安全检查走不同的开机流程,或直接走IDLE,或进入SimPasswdReqResponse()进行安全验证,这个时候会有一下信令交互和界面交互。关于安全验证,会另有专题介绍,本文档专注于开机流程到进入IDLE的过程。

 

MSG_ID_MMI_SMU_SIM_STATUS_UPDATE_IND

MSG_ID_MMI_SMU_STARTUP_INFO_IND

。。。。。。

MSG_ID_MMI_NW_MMRR_SERVICE_STATUS_IND

MSG_ID_MMI_NW_ATTACH_IND

 

MSG_ID_MMI_SAT_SETUP_MENU_IND

 

如果需要安全检查,则安全检查后收到事件

MSG_ID_MMI_READY_TO_IDLE_SCREEN_IND

它会触发下面的栈流程进入IDLE

-000|EntryIdleScreen()  到这里,historyData已经被清空;这里有根据启动模式走不同的分

支;进搜网mmi_idle_entry_searching_screen()

-001|mmi_idle_entry_dual_sim_root_screen() 这里有根据卡在位的状态进入不同的分支

-002|BeforeEntryIdleScr()

-003|mmi_bootup_exit_welcome_screen()

-004|ShowWelcomeScr()           这里有显示开机问候的分支处理

-005|exit_custom_startup_screen()  这个分支有关闭动画的行为

-006|goto_opening_screen()    会有InitAllApplications进行初始化

-007|mmi_ready_to_idle_screen_ind_hdlr()

-008|mmi_frm_execute_current_protocol_handler(eventID = 5289, MsgStruct = 0x0, m

-009|ProtocolEventHandler(eventID = 5289, MsgStruct = 0x0, mod_src = 68, peerBuf

-010|MMI_task(?)

-011|TCC_Task_Shell(asm)

----|end of frame

 

 

mmi_idle_entry_searching_screen()

MSG_ID_MMI_PHB_STARTUP_BEGIN_IND

MSG_ID_MMI_SAT_SETUP_MENU_RES_RSP

MSG_ID_MMI_SAT_NO_OTHER_CMD_IND

 

MSG_ID_MMI_EMAIL_INIT_RSP

 

再回IDLE,基本上算完成了开机流程,之后还会收到很多事件,如关于网络、短信、电话吧、EMAILMMSWAPSAT等。这些模块的启动和完成,要另外单独再分析。

|EntryIdleScreen()

 

 

 

1          APP INIT

网络、短信、电话吧、EMAILMMSWAPSIMSATNVRAM

 

 

   kal_bool     phb_ready_flag;

   kal_bool     sms_ready_flag;

   kal_bool     ciss_ready_flag;

   kal_bool     tcm_ready_flag;

   kal_bool    mmi_ready_flag;  

   kal_bool sms_init_sent; //true: MSG_ID_L4CSMSAL_INIT_REQ is sent 

 

 

 

 

 

3         开机过程--l4 \UEM\NVRAM\MED

 

下面是从BMT开始,到MSG_ID_MMI_EQ_POWER_ON_IND发送给MMI TASK的一个流程分析。

3.1       BMT

 

bmt_task_main()

任务启动,即发送MSG_ID_DRVUEM_POWER_ON_INDMOD_UEM

 

3.2       UEM

 

uem_main

MSG_ID_DRVUEM_POWER_ON_IND

uemdrv_power_on_ind_hdlr()

uem_poweron_timer_expiry_hdlr()TARGET执行这个函数,模拟器跳过,执行下一个

uemdrv_keypad_power_on_ind()

            l4cuem_power_on_ind()

               发送MSG_ID_NVRAM_STARTUP_REQMOD_NVRAM

根据开机原因不同,uemdrv_power_on_ind_hdlr会执行的不同的函数,我们调试的是键盘开机,所以是uemdrv_keypad_power_on_ind()。

typedef enum{

         PWRKEYPWRON = 0,

         CHRPWRON     = 1,

         RTCPWRON = 2,

         CHRPWROFF = 3,

         WDTRESET = 4, /*NORMAL*/

         ABNRESET = 5,  /*ABNORMAL RESET*/

         USBPWRON = 6, 

         USBPWRON_WDT = 7,

         PRECHRPWRON = 8,

         UNKNOWN_PWRON = 0xF9    

}power_on_enum;

 

 

3.3       NVRAM

nvram_main

MSG_ID_NVRAM_STARTUP_REQ

nvram_startup_handler()

nvram_startup_confirm()

        完成几个NV项的处理后,发确认信号MSG_ID_NVRAM_STARTUP_CNFUEM.

 

3.4       L4C

l4c_main

MSG_ID_NVRAM_STARTUP_CNF

nvram_startup_cnf_hdlr()

l4c_send_msg_to_uem(MSG_ID_L4CUEM_STARTUP_REQ)

 

3.5       UEM

MSG_ID_L4CUEM_STARTUP_REQ

ueml4c_startup_req_hdlr()

uem_startup_process()

uem_send_msg_to_nvram(MSG_ID_NVRAM_READ_REQ, NVRAM_EF_UEM_RMI_DATA_LID, 0, 0);

。。。

通过和NVRAM的几个读交互

uemnvm_read_data_cnf_hdlr()

NVRAM_EF_UEM_RMI_DATA_LID

    NVRAM_EF_CUST_HW_LEVEL_TBL_LID

    NVRAM_EF_UEM_MANUFACTURE_DATA_LID

    然后发出uem_send_msg_to_aud(MSG_ID_MED_STARTUP_REQ)MOD_MED

 

3.6       MOD_MED

med_main.c

MSG_ID_MED_STARTUP_REQ

med_startup_hdlr()

    启动相关模块和进行一些初始化,然后发送aud_send_startup_cnf(MED_RES_OK)

MSG_ID_MED_STARTUP_CNF

 

3.7       UEM

MSG_ID_MED_STARTUP_CNF

uemaud_startup_cnf_hdlr

    发送MSG_ID_L4CUEM_STARTUP_CNFL4,并做一些简单的硬件初始,如语音通道、RTC

 

3.8       L4C

MSG_ID_L4CUEM_STARTUP_CNF

通过L4特有的函数数组映射方法,对应到

l4cuem_startup_cnf_hdlr()

l4c_eq_power_on_lind()

l4a_eq_power_on_lind()

   发送MSG_ID_MMI_EQ_POWER_ON_INDMMI TASK,至此,MMI TASK收到开机事件的流程结束了。

 

 

1.1       信令流程图

 

 

 

 

元器件数据手册IC替代型号,打造电子元器件IC百科大全!

相关文章