This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

AM57x EMIF_RegisterConfig_v2.xlsm issue

Expert 1385 points
Other Parts Discussed in Thread: AM5728, DRA726

Hi,

I have used the AM57x EMIF Tools to generate the result register value on worksheet "result register".

I copy to this :

/* =========================================================================					
 *   Copyright (C) 2015 Texas Instruments Incorporated					
 *					
 *   All rights reserved. Property of Texas Instruments Incorporated.					
 *   Restricted rights to use, duplicate or disclose this code are					
 *   granted through contract.					
 *					
 *   The program may not be used without the written permission					
 *   of Texas Instruments Incorporated or against the terms and conditions					
 *   stipulated in the agreement under which this program has been					
 *   supplied.					
 * ========================================================================= */					
					
/*					
 *  AM571x_DDR3L_532MHz_TI_EVM_config.c					
 *     Created on: 05/31/2016					
 *     Created with: EMIF_RegisterConfig_v1.0.0					
 */					
					
#include "emif4d5_wrapper.h"					
					
const struct dpll_params AM571x_DDR3L_532MHz_TI_EVM_pll_params = {					
    .m = 266,					
    .n = 4,					
    .m2 = 2,					
    .m4_h11 = 8					
};					
					
const struct ctrl_ioregs AM571x_DDR3L_532MHz_TI_EVM_ctrl_ioregs = {					
    .ctrl_ddr3ch = 0x80808080,					
    .ctrl_ddrch = 0x40404040,					
    .ctrl_ddrio_0 = 0x00094A40,					
    .ctrl_ddrio_1 = 0x00000000,					
    .ctrl_emif_sdram_config_ext = 0x0000C123					
};					
					
const struct dmm_lisa_map_regs AM571x_DDR3L_532MHz_TI_EVM_dmm_regs = {					
    .dmm_lisa_map_0 = 0x00000000,					
    .dmm_lisa_map_1 = 0x00000000,					
    .dmm_lisa_map_2 = 0x80500100,					
    .dmm_lisa_map_3 = 0xFF020100,					
    .is_ma_present = 0x1					
};					
					
const struct emif_regs AM571x_DDR3L_532MHz_TI_EVM_emif_regs = {					
    .sdram_config_init = 0x61851AB2,					
    .sdram_config = 0x61851AB2,					
    .sdram_config2 = 0x00000000,					
    .ref_ctrl = 0x000040F1,					
    .ref_ctrl_final = 0x00001035,					
    .sdram_tim1 = 0xCCCF36B3,					
    .sdram_tim2 = 0x305A7FDA,					
    .sdram_tim3 = 0x407F8558,					
    .read_idle_ctrl = 0x00050000,					
    .zq_config = 0x5007190B,					
    .temp_alert_config = 0x00000000,					
    .emif_rd_wr_lvl_rmp_ctl = 0x80000000,					
    .emif_rd_wr_lvl_ctl = 0x00000000,					
    .emif_ddr_phy_ctlr_1_init = 0x0824400B,					
    .emif_ddr_phy_ctlr_1 = 0x0E24400B,					
    .emif_rd_wr_exec_thresh = 0x00000305					
};					
					
/*					
 * DLL Ratio Values are an estimate based on trace lengths. Either 					
 * software leveling or hardware leveling should be performed to					
 * determine final DLL values.					
 */					
const unsigned int AM571x_DDR3L_532MHz_TI_EVM_emif1_ext_phy_regs [] = {					
    ,	// EMIF1_EXT_PHY_CTRL_1				
    ,	// EMIF1_EXT_PHY_CTRL_2				
    ,	// EMIF1_EXT_PHY_CTRL_3				
    ,	// EMIF1_EXT_PHY_CTRL_4				
    ,	// EMIF1_EXT_PHY_CTRL_5				
    ,	// EMIF1_EXT_PHY_CTRL_6				
    ,	// EMIF1_EXT_PHY_CTRL_7				
    ,	// EMIF1_EXT_PHY_CTRL_8				
    ,	// EMIF1_EXT_PHY_CTRL_9				
    ,	// EMIF1_EXT_PHY_CTRL_10				
    ,	// EMIF1_EXT_PHY_CTRL_11				
    ,	// EMIF1_EXT_PHY_CTRL_12				
    ,	// EMIF1_EXT_PHY_CTRL_13				
    ,	// EMIF1_EXT_PHY_CTRL_14				
    ,	// EMIF1_EXT_PHY_CTRL_15				
    ,	// EMIF1_EXT_PHY_CTRL_16				
    ,	// EMIF1_EXT_PHY_CTRL_17				
    ,	// EMIF1_EXT_PHY_CTRL_18				
    ,	// EMIF1_EXT_PHY_CTRL_19				
    ,	// EMIF1_EXT_PHY_CTRL_20				
    ,	// EMIF1_EXT_PHY_CTRL_21				
    ,	// EMIF1_EXT_PHY_CTRL_22				
    ,	// EMIF1_EXT_PHY_CTRL_23				
    ,	// EMIF1_EXT_PHY_CTRL_24				
    ,	// EMIF1_EXT_PHY_CTRL_25				
    ,	// EMIF1_EXT_PHY_CTRL_26				
    ,	// EMIF1_EXT_PHY_CTRL_27				
    ,	// EMIF1_EXT_PHY_CTRL_28				
    ,	// EMIF1_EXT_PHY_CTRL_29				
    ,	// EMIF1_EXT_PHY_CTRL_30				
    ,	// EMIF1_EXT_PHY_CTRL_31				
    ,	// EMIF1_EXT_PHY_CTRL_32				
    ,	// EMIF1_EXT_PHY_CTRL_33				
    ,	// EMIF1_EXT_PHY_CTRL_34				
    ,	// EMIF1_EXT_PHY_CTRL_35				
    	// EMIF1_EXT_PHY_CTRL_36				
};					
		
					
struct emif_cfg AM571x_DDR3L_532MHz_TI_EVM = {					
    .platform = "AM571x_DDR3L_532MHz_TI_EVM",					
    .EMIF2_DEFINED = 0,					
    .pll_regs = &AM571x_DDR3L_532MHz_TI_EVM_pll_params,					
    .ctrl_regs = &AM571x_DDR3L_532MHz_TI_EVM_ctrl_ioregs,					
    .dmm_regs = &AM571x_DDR3L_532MHz_TI_EVM_dmm_regs,					
    .regs = &AM571x_DDR3L_532MHz_TI_EVM_emif_regs,					
    .phy_regs1 = AM571x_DDR3L_532MHz_TI_EVM_emif1_ext_phy_regs,					
					
};					
					
But the AM571x_DDR3L_532MHz_TI_EVM_emif1_ext_phy_reg is empty.

How can I determine these values? I have seen the AM572x_ddr_config.gel file, but I don't konw how to use it?
Can you give me some description for the details ?

  • But the AM571x_DDR3L_532MHz_TI_EVM_emif1_ext_phy_reg is empty.
    How can I determine these values?
    I have seen the AM572x_ddr_config.gel file, but I don't konw how to use it?
    Can you give me some description for the details ?
  • I will ask the software team to comment.
  • Can you post your worksheet?
  • Yes this link is www.ti.com/.../sprac36. Thank you very much !
  • I know where the document is located. I am asking about the worksheet you filled.
  • I just only modify the TI SOC Part Number item for Ti AM5728 evm board.

    I found that note as follow in worksheet "register values"

    /*                    
     * DLL Ratio Values are an estimate based on trace lengths. Either                     
     * software leveling or hardware leveling should be performed to                    
     * determine final DLL values.                    
     */   

    but i don't know how to  do software leveling and hardware leveling to estimate these values.

  • You cannot expect to get correct data by modifying only the device part number. This worksheet requires a lot of input values based on your board design. Please read the PDF carefully and follow all steps.
  • I had the same problem with the empty array using libreoffice. I tried with libreoffice on Linux and in windows 10 on using virtual box

    That is with the DRA but this should be rather similar for the am parts.

    I had different results on Linux and windows with libreoffice

    With libreoffice on windows 10 I only had problem with that empty array.

    On libreoffice on Linux there were  some #REF! instead of actual data, that is a flag for "impossible to evaluate"

    const struct emif_regs DRA72x_DDR3L_666MHz_actia_dra726_emif_regs = {    
        #REF!
        #REF!
        .sdram_config2 = 0x00000000,    
        .ref_ctrl = 0x0000514D,    
        .ref_ctrl_final = 0x0000144A,    
        .sdram_tim1 = 0xD113783C,    
        .sdram_tim2 = 0x30B37FE3,    
        .sdram_tim3 = 0x409F8AD8,    
        .read_idle_ctrl = 0x00050000,    
        .zq_config = 0x5007190B,    
        .temp_alert_config = 0x00000000,    
        .emif_rd_wr_lvl_rmp_ctl = 0x80000000,    
        .emif_rd_wr_lvl_ctl = 0x00000000,    
        #REF!  
        #REF!   
        .emif_rd_wr_exec_thresh = 0x00000305    
    };    
        
    /*    
     * DLL Ratio Values are an estimate based on trace lengths. Either     
     * software leveling or hardware leveling should be performed to    
     * determine final DLL values.    
     */    
    const unsigned int DRA72x_DDR3L_666MHz_actia_dra726_emif1_ext_phy_regs [] = {    
        ,    // EMIF1_EXT_PHY_CTRL_1
        ,    // EMIF1_EXT_PHY_CTRL_2
        ,    // EMIF1_EXT_PHY_CTRL_3
        ,    // EMIF1_EXT_PHY_CTRL_4
        ,    // EMIF1_EXT_PHY_CTRL_5
        ,    // EMIF1_EXT_PHY_CTRL_6
        ,    // EMIF1_EXT_PHY_CTRL_7
        ,    // EMIF1_EXT_PHY_CTRL_8
        ,    // EMIF1_EXT_PHY_CTRL_9
        ,    // EMIF1_EXT_PHY_CTRL_10
        ,    // EMIF1_EXT_PHY_CTRL_11
        ,    // EMIF1_EXT_PHY_CTRL_12
        ,    // EMIF1_EXT_PHY_CTRL_13
        ,    // EMIF1_EXT_PHY_CTRL_14
        ,    // EMIF1_EXT_PHY_CTRL_15
        ,    // EMIF1_EXT_PHY_CTRL_16
        ,    // EMIF1_EXT_PHY_CTRL_17
        ,    // EMIF1_EXT_PHY_CTRL_18
        ,    // EMIF1_EXT_PHY_CTRL_19
        ,    // EMIF1_EXT_PHY_CTRL_20
        ,    // EMIF1_EXT_PHY_CTRL_21
        ,    // EMIF1_EXT_PHY_CTRL_22
        ,    // EMIF1_EXT_PHY_CTRL_23
        ,    // EMIF1_EXT_PHY_CTRL_24
        ,    // EMIF1_EXT_PHY_CTRL_25
        ,    // EMIF1_EXT_PHY_CTRL_26
        ,    // EMIF1_EXT_PHY_CTRL_27
        ,    // EMIF1_EXT_PHY_CTRL_28
        ,    // EMIF1_EXT_PHY_CTRL_29
        ,    // EMIF1_EXT_PHY_CTRL_30
        ,    // EMIF1_EXT_PHY_CTRL_31
        ,    // EMIF1_EXT_PHY_CTRL_32
        ,    // EMIF1_EXT_PHY_CTRL_33
        ,    // EMIF1_EXT_PHY_CTRL_34
        ,    // EMIF1_EXT_PHY_CTRL_35
            // EMIF1_EXT_PHY_CTRL_36
    };    

    I ask our hardware engineer to run the script on his windows 7 and got correct stuff with the exact same spreadsheet

    This tells me that you should do away with the basic only scripts and switch to perl or python or warn us that you only want to support Microsoft so we don't waste hours trying to figure out where we messed up. I only have on license of excel and it runs on windows. I cannot afford to waste time booting on windows to run script that I should normally be able to run on Linux. Forcing the use of windows only script for linux development is ridiculous.

    Sorry if that offends I just wasted half a day on this nonsense and am not in a very good mood.

    Michel