有的可能烧入不了,或者无法开就需要调节 时序 电压和频率

1、修改DDR时序
    vendor/mediatek/proprietary/bootable/bootloader/preloader/tools/emigen/MT6735/MemoryDeviceList_MT6737M.xls
    1. 其中 H9CCNNN8GTMLAR 为 2G DRAM(8192+8192),可配置为1G DRAM(8192 或 4096+4096),其余均不需动
    2. 其中MODE_REG3由“0x00020003”修改为“0x00010003” -> 增强驱动能力
    3. 其中CONA_VAL不对会导致编译报错
     Samsung     KMK7U000VM_B309    MCP(eMMC+LPDDR2)    4096+4096    MT6735_EVB    0x1501004B375530304D (4096+4096) 1GDRAM
     KMK7U000VM_B309    Samsung    2048    2048    128    0    0    0    0    7634944    7460                    (7460)   8GDROM

2、修改DDR频率 - 需要关闭DVFS
    1. vendor/mediatek/proprietary/bootable/bootloader/preloader/platform/mt6735/src/drivers/pll2.c
        void mt_pll_post_init(void)
        +    /*
                if (D2Plus == 1) {
                    mt_mempll_init(DDR1280, PLL_MODE_1);
                    memfreq_val = 1280000;
                } else {
                    mt_mempll_init(DDR1066, PLL_MODE_1);
                    memfreq_val = 1066000;
                }
        +    */
        +    mt_mempll_init(DDR1066, PLL_MODE_1);    // DDR800
        +    memfreq_val = 1066000;                    // 800000

2. 如果缺少所需频率,可以自己添加:
        vendor/mediatek/proprietary/bootable/bootloader/preloader/platform/mt6735/src/drivers/pll2.c
        void mt_mempll_init(int type, int pll_mode)
            else  if (type == DDR850) 
            {
                *((UINT32P)(DDRPHY_BASE + (0x0183 <<2))) = (*((UINT32P)(DDRPHY_BASE + (0x0183 <<2))) & (~mempll2_vco_div_sel)) | 0x00000000; //RG_MEMPLL2_VCO_DIV_SEL =0;
                *((UINT32P)(DDRPHY_BASE + (0x0185 <<2))) = (*((UINT32P)(DDRPHY_BASE + (0x0185 <<2))) & (~mempll3_vco_div_sel)) | 0x00000000; //RG_MEMPLL3_VCO_DIV_SEL =0;
                *((UINT32P)(DDRPHY_BASE + (0x0187 <<2))) = (*((UINT32P)(DDRPHY_BASE + (0x0187 <<2))) & (~mempll4_vco_div_sel)) | 0x00000000; //RG_MEMPLL4_VCO_DIV_SEL =0;
                *((UINT32P)(DDRPHY_BASE + (0x0189 <<2))) = (*((UINT32P)(DDRPHY_BASE + (0x0189 <<2))) & (~pllc1_dmss_pcw_ncpo_30_0)) | (0x338da215 << 1); //RG_DMSS_PCW_NCPO[30:0]
               
                if ((pll_mode == PLL_MODE_3) || (pll_mode == PLL_MODE_2))
                {
                    *((UINT32P)(DDRPHY_BASE + (0x0182 <<2))) = (*((UINT32P)(DDRPHY_BASE + (0x0182 <<2))) & (~mempll2_fbdiv_6_0)) | (0x0000000d << 2); //RG_MEMPLL2_FBDIV = 7'h0d;
                    *((UINT32P)(DDRPHY_BASE + (0x0184 <<2))) = (*((UINT32P)(DDRPHY_BASE + (0x0184 <<2))) & (~mempll3_fbdiv_6_0)) | (0x0000000d << 2); //RG_MEMPLL3_FBDIV = 7'h0d;
                    *((UINT32P)(DDRPHY_BASE + (0x0186 <<2))) = (*((UINT32P)(DDRPHY_BASE + (0x0186 <<2))) & (~mempll4_fbdiv_6_0)) | (0x0000000d << 2); //RG_MEMPLL4_FBDIV = 7'h0d;
                }
                else
                {
                    *((UINT32P)(DDRPHY_BASE + (0x0182 <<2))) = (*((UINT32P)(DDRPHY_BASE + (0x0182 <<2))) & (~mempll2_fbdiv_6_0)) | (0x00000034 << 2); //RG_MEMPLL2_FBDIV = 7'h34;
                    *((UINT32P)(DDRPHY_BASE + (0x0184 <<2))) = (*((UINT32P)(DDRPHY_BASE + (0x0184 <<2))) & (~mempll3_fbdiv_6_0)) | (0x00000034 << 2); //RG_MEMPLL3_FBDIV = 7'h34;
                    *((UINT32P)(DDRPHY_BASE + (0x0186 <<2))) = (*((UINT32P)(DDRPHY_BASE + (0x0186 <<2))) & (~mempll4_fbdiv_6_0)) | (0x00000034 << 2); //RG_MEMPLL4_FBDIV = 7'h34;
                }
            }
        vendor/mediatek/proprietary/bootable/bootloader/preloader/platform/mt6735/src/drivers/inc/pll2.h
        enum {
            DDR533   = 533,
        +    DDR850    = 850,
            DDR938   = 938,
            DDR1066  = 1066,
            DDR1280  = 1280,
            DDR1333  = 1333,
            DDR1466  = 1466,
        };
    
    3.4两步骤关闭DVFS(动态电压频率调节) - 不修改的话内核会动态调节,修改频率不会生效
    3. alps\vendor\mediatek\proprietary\bootable\bootloader\preloader\platform\mt6735\src\drivers\inc\dramc2.h
        -    #define ENABLE_DFS
        +    //#define ENABLE_DFS

4. alps/kernel-3.18/drivers/misc/mediatek/base/power/mt6735/mt_vcore_dvfs_2.c
        -    static bool feature_en __nosavedata = 1;       /* if feature disable, then keep HPM */
        +    static bool feature_en __nosavedata = 0;       /* if feature disable, then keep HPM */

3、修改DDR电压
    电压调节函数
      pmic_Vcore_adjust(); 
      pmic_Vmem_adjust(); 
      pmic_Vmem_Cal_adjust(); 
    方法一:
    vendor/mediatek/proprietary/bootable/bootloader/preloader/platform/mt6735/src/drivers/emi.c 
        else if ((emi_set->type & 0xF) == TYPE_LPDDR3)
        {
            #ifdef REXTDN_ENABLE
                ett_rextdn_sw_calibration();
            #endif
        +    pmic_config_interface(MT6328_SLDO_ANA_CON0, 0, 0x3, 0);        // 1.24V 参数中第一位寄存器值,第二位就是我们要设的电压值,第三位读取位数
        +    pmic_config_interface(MT6328_SLDO_ANA_CON1, 0x0D, 0xF, 8);    // +0.6V

方法二:
    1. 在preloader初始化的时候添加调整DDR电压的步骤
        vendor/mediatek/proprietary/bootable/bootloader/preloader/platform/mt6735/src/drivers/platform.c
            void platform_pre_init(void)
            {
                mtk_timer_init();
                g_boot_time = get_timer(0);
                mtk_uart_init(UART_SRC_CLK_FRQ, CFG_LOG_BAUDRATE);
                mt_gpio_init();
                clk_buf_all_on();
                pwrap_init_preloader();

i2c_hw_init();
                check_charger_boost_status();
            #if !CFG_FPGA_PLATFORM
                pmic_ret = pmic_init();
        +    #ifdef DRAM_HQA
        +        dram_HQA_adjust_voltage();
        +    #endif
                mt_pll_post_init();
            #endif

2. 添加一些宏用做选择电压等级
        vendor/mediatek/proprietary/bootable/bootloader/preloader/platform/mt6735/src/drivers/inc/emi.h
            +    #define DRAM_HQA 
            +    #define HVcore
            +    //#define NV
            +    //#define LVcore
            +    //#define HVcore_LVmem
            +    //#define LVcore_HVmem

3. 实现调整电压的函数
       vendor/mediatek/proprietary/bootable/bootloader/preloader/platform/mt6735/src/drivers/emi.c 
    -    #ifdef pmic_HQA_TCs        // 此宏没开
    +    #if 1
    +    void dram_HQA_adjust_voltage(void)
        {
            #ifdef HVcore  //HV (Vc=1.375V, Vm=1.3V
                pmic_Vcore_adjust(1); // 1.24V          
                pmic_Vmem_adjust(1);  // 1.39V
                pmic_Vmem_Cal_adjust(0);  // +0.10V (1.3V)                
                print("[DRAM HQA]========== HV ==========\r\n");    // LOG 显示走这里
            #endif

#ifdef NV     //NV (Vc=1.15V, Vm=1.22V)
                pmic_Vcore_adjust(1); // 1.15V       
                pmic_Vmem_adjust(0);  // 1.20V
                pmic_Vmem_Cal_adjust(1);  // +0.02V (1.22V)            
                print("[DRAM HQA]========== NV ==========\r\n");
            #endif

#ifdef LVcore //LV (Vc=1.09375V, Vm=1.16V
                pmic_Vcore_adjust(2); // 1.09375V
                pmic_Vmem_adjust(0);  // 1.20V
                pmic_Vmem_Cal_adjust(2);  // -0.04V(1.16V)        
                print("[DRAM HQA]========== LV ==========\r\n");
            #endif

#ifdef HVcore_LVmem   //HVcore_LVmem (Vc=1.375V, Vm=1.16V)
                pmic_Vcore_adjust(0); // 1.375V          
                pmic_Vmem_adjust(0);  // 1.20V
                pmic_Vmem_Cal_adjust(2);  // -0.04V(1.16V)              
                print("[DRAM HQA]========== HVcLVm ==========\r\n");
            #endif

#ifdef LVcore_HVmem   //LVcore_HVmem (Vc=1.09375V, Vm=1.3V)
                pmic_Vcore_adjust(2); // 1.09375V
                pmic_Vmem_adjust(0);  // 1.20V
                pmic_Vmem_Cal_adjust(0);  // +0.10V (1.3V)                      
                print("[DRAM HQA]========== LVcHVm ==========\r\n");
            #endif
    +    }

4、打开DDR重新校验 - 使每次回复出厂设置后DDR重新校验
    适用于eng版
     vendor/mediatek/proprietary/bootable/bootloader/preloader/platform/mt6735/src/drivers/inc/emi.h
        -    #define DDR_RESERVE_MODE
        +    //#define DDR_RESERVE_MODE
5:开机重启 一般是emmc速度问题
        kernel-3.18/arch/arm/boot/dts/hys6737m_35_m0.dts
                msdc-sys-suspend;
                mmc-ddr-1_8v;
                mmc-hs200-1_8v;
-               mmc-hs400-1_8v;
                non-removable;
                pinctl = <&mmc0_pins_default>;
                register_setting = <&mmc0_register_setting_default>;
                
eMMC 里 DDR52 HS200 HS400 这些名词指的是不同的速度

DDR52就是最高 52M clock,数据速率就是 52 x 2 = 104
    HS200 就是最高 200M clock,单通道,数据速率也是 200
    HS400 也是最高 200M clock,但是是双通道,所以数据速率是 200 x 2 = 400

HS200和HS400 是 5.0 协议才有的。
    
Modename        Data Rate IO voltage  Bus Width Frequency  Max Data Transfer
MMC card        Single     3/1.8/1.2V    1,4,8    0-26MH            26MB/s
HightSpeedSDR    Single        3/1.8/1.2V    1,4,8    0-52MH            52MB/s
HightSpeedSDR    Dual        3/1.8/1.2V    4,8        0-52MH            104MB/s
HS200            Single        1.8/1.2V    4,8        0-200MH            200MB/s
HS400            Dual        1.8/1.2V    8        0-200MH            400MB/s
    
五:判断 MCU 型号
    ./vendor/mediatek/proprietary/bootable/bootloader/preloader/custom/hys6737m_35_m0/hys6737m_35_m0.mk
        4:MACH_TYPE=mt6737m
    ./vendor/mediatek/proprietary/bootable/bootloader/preloader/custom/hys6737m_35_m0/hys6737m_35_m0.mk
        24:export MTK_PLATFORM MACH_TYPE
    ./vendor/mediatek/proprietary/bootable/bootloader/preloader/platform/mt6735/feature.mak:529
        C_OPTION += -DMACH_TYPE_$(shell echo $(MACH_TYPE) | tr '[a-z]' '[A-Z]')
        //C_OPTION +=DMACH_TYPE_MT6737M
./vendor/mediatek/proprietary/bootable/bootloader/preloader/platform/mt6735/feature.mak:530:export MACH_TYPE
./vendor/mediatek/proprietary/bootable/bootloader/preloader/platform/mt6735/src/drivers/makefile 
    ifeq ("$(MACH_TYPE)","mt6735")
        MOD_SRC  += pll.c
        MOD_SRC  += mt_ptp.c
    endif

ifeq ("$(MACH_TYPE)","mt6737m")            //mt6737m  频率调节
        MOD_SRC  += pll2.c
        MOD_SRC  += mt_ptp.c
    endif
./vendor/mediatek/proprietary/bootable/bootloader/preloader/tools/emigen/emigen.mk 
    EMIGEN_FILE_LIST := $(addprefix $(EMIGEN_OUT)/,$(ALL_EMIGEN_FILE))
    CUSTOM_MEMORY_HDR := $(MTK_PATH_CUSTOM)/inc/custom_MemoryDevice.h
    ifeq ($(MACH_TYPE),mt6735m)
    MEMORY_DEVICE_XLS := $(D_ROOT)/tools/emigen/MT6735/MemoryDeviceList_MT6737T.xls
    else ifeq ($(MACH_TYPE),mt6737m)                                                //mt6737m  增加flash exce表
    MEMORY_DEVICE_XLS := $(D_ROOT)/tools/emigen/MT6735/MemoryDeviceList_MT6737M.xls
    else
    MEMORY_DEVICE_XLS := $(D_ROOT)/tools/emigen/$(MTK_PLATFORM)/MemoryDeviceList_$(MTK_PLATFORM).xls  
    endif
    ifeq ($(PLATFORM), mt2601)
    MEMORY_DEVICE_XLS := $(TOOL_PATH)/emigen/$(MTK_PLATFORM)/MemoryDeviceList_$(MTK_PLATFORM).xls  
    EMIGEN_SCRIPT := $(TOOL_PATH)/emigen/$(MTK_PLATFORM)/emigen.pl
    else
    EMIGEN_SCRIPT := $(D_ROOT)/tools/emigen/$(MTK_PLATFORM)/emigen.pl
    endif
vendor/mediatek/proprietary/bootable/bootloader/preloader/platform/mt6735/src/drivers/inc/pll.h    
    #ifndef PLL_H
    #define PLL_H

#if defined(MACH_TYPE_MT6735) || defined(MACH_TYPE_MT6737T)
        #include "pll1.h"
    #elif defined(MACH_TYPE_MT6735M) || defined(MACH_TYPE_MT6737M)
        #include "pll2.h"
    #elif defined(MACH_TYPE_MT6753)
        #include "pll3.h"
    #endif

#endif            //判断调用哪个 pll

【MTK】EMMC移植问题【二】相关推荐

  1. mtk camera 移植步骤

    mtk camera 移植步骤: 1, Kernel层驱动代码文件添加 /mediatek/custom/doov92_wet_tdd/kernel/imgsensor/下添加imx179_mipi_ ...

  2. mtk 驱动(55)---mtk指纹移植

    mtk指纹移植 1.      硬件连接 看原理图可知,指纹芯片有六个只要功能引脚,POWER, RST, MI, MO,CLK, EINT,再dws中将spi的四个引脚和中断脚配置好,mt6753只 ...

  3. 基于荔枝派Lichee Nano(全志f1c100s)的kernel移植(二)

    基于荔枝派Lichee Nano(全志f1c100s)的kernel移植(二) 1.获取源代码 2.linux内核修改dts设备树文件 3.内核配置修改 3.1.使用命令进入配置界面 3.2.支持jf ...

  4. mtk camera移植

    mtk camera 移植步骤: 1, Kernel层驱动代码文件添加 /mediatek/custom/doov92_wet_tdd/kernel/imgsensor/下添加imx179_mipi_ ...

  5. Exynos4412 内核移植(二)—— 内核编译过程分析

    内核的编译同样是从Makefile 来分析: 一.内核源码结构 Linux内核文件数目近2万,出去其他架构CPU的相关文件,他们分别位于顶层目录下的17个子目录,各个目录功能独立,下面是常用目录: a ...

  6. 基于tiny4412的u-boot移植(二)_ git clone

    转载于  :  http://www.cnblogs.com/pengdonglin137/p/5080645.html 作者信息 作者:彭东林 邮箱:pengdonglin137@163.com Q ...

  7. 基于tiny4412的u-boot移植(二)

    作者信息 作者:彭东林 邮箱:pengdonglin137@163.com QQ: 405728433 平台介绍 开发环境:win7 64位 + VMware11 + Ubuntu14.04 64位 ...

  8. arm linux 内核配置,嵌入式 Linux开发Kernel移植(二)——kernel内核配置和编译

    嵌入式 Linux开发Kernel移植(二)--kernel内核配置和编译 本文选择linux 2.6.35.7版本kernel进行实践. 一.linux kernel源码目录分析 Kbuild,Ke ...

  9. 2012 12 02 FL2440开发板的U-boot-2010.09版本移植(二)片上系统SoC初始化移植

    -------------------------------------------------------- 在"<2012 10 02> FL2440开发板的U-boot- ...

最新文章

  1. 面试官:换人!他连 TCP 这几个参数都不懂
  2. Python 报错 SyntaxError: invalid syntax 解决方法
  3. 尚硅谷最新版JavaWeb全套教程,java web零基础入门完整版(一)
  4. makefile:2: *** 遗漏分隔符 。 停止
  5. 模板:拓展kmp(Z函数)
  6. (十三) 深入浅出TCPIP之setsockopt参数详解
  7. 法兰程序CAD开发的进展
  8. tensorflow函数记录
  9. java int ==_Java 位运算符和 int 类型的实现
  10. Samba共享目录的多用户权限设置案例
  11. 为什么在WSE配置中不要选择Establish Secure Session
  12. Matlab 边界提取
  13. 单片机74LS164C语言例子,74ls164单片机编程汇总(跑马灯/驱动数码管)
  14. java抽象类计算正方体面积_根据下面的接口和抽象类,去实现一个正方体类(Cube)计算它表面积和体积(必须实现接口和继承抽象类),并...
  15. 宠物卡牌大赛奖励发放结束公告
  16. 关于DDK中的编译知识
  17. 2021-08-11王汕8.12黄金TD走势外汇黄金价格,现货白银TD投资操作策略
  18. 想在Word中查找所有中文(西文)怎么办?
  19. 3dMax需要什么样的硬件环境才能更好的工作?
  20. 小啊呜产品读书笔记001:《邱岳的产品手记-08》第15讲 产品案例分析:Mimo与LearnPython的导学之趣 第16讲 在内部产品中找到产品经理的价值

热门文章

  1. swift 与 oc 有哪些区别
  2. csp认证python环境说明
  3. word怎样从第三页开始设置页码
  4. java哈夫曼编码与译码_哈夫曼树与编码译码实现
  5. Rails litte tip
  6. JAVA毕业设计健身房管理系统计算机源码+lw文档+系统+调试部署+数据库
  7. 基于物联网的智能厨房安全监测系统-下位机程序
  8. 2901-View-Gallery
  9. 宽带ISAR高分辨成像技术综述
  10. 文档模型 TMX 1.4b