preload和LK電源管理分析


一.proload電源管理分析

pmic_init

    //detect V battery Drop 
    pmic_DetectVbatDrop(); //檢測是否是PMIC_VBAT_DROP
        pmic_read_interface( MT6328_STRUP_CON9, (&just_rst), MT6328_PMIC_JUST_PWRKEY_RST_MASK, MT6328_PMIC_JUST_PWRKEY_RST_SHIFT );
pmic_config_interface(MT6328_STRUP_CON9, 1, MT6328_PMIC_CLR_JUST_RST_MASK, MT6328_PMIC_CLR_JUST_RST_SHIFT);
if(just_rst)
vbat_status = PMIC_VBAT_DROP;
else
vbat_status = PMIC_VBAT_NOT_DROP;
    if(hw_check_battery()==1) //探測電池是否存在,如果存在
pmic_disable_usbdl_wo_battery();  //關閉usb下載模式
    pmic_6328_efuse_management //pmic熔斷保護機制,比電池過壓保護等
    upmu_set_rg_vio18_184(); //設置VIO18的校准電壓
    mt6311_driver_probe();
        mt6311_hw_component_detect
            update_mt6311_chip_id(); //獲取id,看看pmic是否存在
        if(g_mt6311_hw_exist==1)
            mt6311_hw_init //硬件寄存器的一些初始化
        g_mt6311_driver_ready=1;
    pl_check_bat_protect_status //檢測電池狀態//單獨分析1
       
 
 
//單獨分析1
 pl_check_bat_protect_status //檢測電池狀態
        bat_val = get_bat_sense_volt(5);  //得到bat sense電壓
        chr_volt= get_charger_volt(1);  //得到charger電壓
        #if defined(MTK_FAN5405_SUPPORT)
        fan5405_hw_init();  //如果是fan5404需要初始化一下
        #endif
        while (bat_val < BATTERY_LOWVOL_THRESOLD)  //mtk默認3.3v,宇龍1.5v
        {   mtk_wdt_restart //重新開始看門狗計數
            if(upmu_is_chr_det() == KAL_FALSE) //如果沒有充電器
                break
            chr_volt= get_charger_volt(1); //charge電壓大於6.5v
                break;
            pchr_turn_on_charging 
                pmic_config_interface(MT6328_PMIC_RG_CS_VTH_ADDR,0xc 。。) //450ma
            #if defined(MTK_FAN5405_SUPPORT)
            fan5405_turn_on_charging(); //如果電壓fan5405啟動充電
            #endif
            for(i=0;i<10;i++)
            {   current=get_charging_current(1);
chr_volt=get_charger_volt(1);
if(current<100 && chr_volt<4400)  //如果電流小於100 && 電壓低於4400V
                    cnt++;
            }
            if(cnt>=8) //大於8就直接停止充電
                pchr_turn_on_charging(KAL_FALSE);
            bat_val = get_bat_sense_volt(5);
        }
 
 
 
 
二.LK電源管理相關
Mt_battery.c (bootable\bootloader\lk\platform\mt6735)
#if defined(MTK_BQ24296_SUPPORT) 
#define SWCHR_POWER_PATH  //帶路徑管理的充電芯片
#endif
 
mt65xx_bat_init
    #if defined(SWCHR_POWER_PATH)
    bat_vol = get_i_sense_volt(1); //ADC_isense
    #else
    bat_vol = get_bat_sense_volt(1); //ADC_batsense
    #endif
    #if defined(MTK_FAN5405_SUPPORT)  //resolve 5405 register lock
    pchr_turn_on_charging(KAL_TRUE); //開始充電
    #endif
    if(g_boot_mode == KERNEL_POWER_OFF_CHARGING_BOOT && (pmic_get_register_value(PMIC_PWRKEY_DEB)==0) ) //電源鍵沒有按下
        g_boot_reason_change = true; //充電啟動模式
    rtc_boot_check(false);  //不是定時器啟動
    if (bat_vol < BATTERY_LOWVOL_THRESOLD) //MTK默認是3.45V,如果小於3.45在里面循環充電,大於就跳出開機,單獨分析1
    fgauge_initialization(NULL); //初始化 fgauge
    pchr_turn_on_charging(KAL_FALSE); //關閉充電
    get_dlpt_imix_r(); //得到電阻值
    pchr_turn_on_charging(KAL_TRUE); //開始充電
    check_bat_protect_status //看單獨分析1里面的check_bat_protect_status
 
              
                   
    
單獨分析1
if (bat_vol < BATTERY_LOWVOL_THRESOLD) //MTK默認是3.45V,如果小於3.45在里面循環充電,大於就跳出開機
        if(g_boot_mode == KERNEL_POWER_OFF_CHARGING_BOOT && upmu_is_chr_det() == KAL_TRUE) //關機充電模式
            check_bat_protect_status
                #if defined(SWCHR_POWER_PATH)
                bat_val = get_i_sense_volt(5);
                #else
                bat_val = get_bat_sense_volt(5);
                #endif
                while (bat_val < BATTERY_LOWVOL_PROTECT) //小於3.3V
                    mtk_wdt_restart(); //重啟看門狗
                    pchr_turn_on_charging(KAL_TRUE); //開始充電
                             設置pmic充電電流等......
                        bq24296_hw_init(); //充電芯片初始化設置
                        bq24296_charging_enable(bEnable); //開始充電
                        bq24296_dump_register //打印充電芯片寄存器值
                    mdelay(5000); //5S
                 #if defined(SWCHR_POWER_PATH) //再次讀取電池電壓
                bat_val = get_i_sense_volt(5);
                #else
                bat_val = get_bat_sense_volt(5);
                #endif
            else //正常開機
                mt_disp_show_low_battery(); //顯示低電圖片
                    init_fb_screen();
                    fill_animation_logo(LOW_BATTERY_INDEX, mt_get_fb_addr(), mt_get_tempfb_addr(), logo_addr, phical_screen);
                    mt_disp_update(0, 0, CFG_DISPLAY_WIDTH, CFG_DISPLAY_HEIGHT);
                mt65xx_leds_brightness_set(MT65XX_LED_TYPE_LCD, LOW_BAT_LEDS_BRIGHT); //設置背光亮度
 
 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM