2148956_en-US

キャンセル
次の結果を表示 
表示  限定  | 次の代わりに検索 
もしかして: 

2148956_en-US

2148956_en-US

DRAM_SDCLK0 of i.MX7D is about 270MHz,  it's slow !

Hi.

When CCM_ANALOG_PLL_DDR is set to 0x0000302C, DRAM_SDCLK0 is 132MHz.

So when the TEST_DIV_SELECT bit of CCM_ANALOG_PLL_DDR is set to 0x01 and set to 0x0020302C, DRAM_SDCLK0 is about 270MHz.

It is half of 533Mhz.

DRAM_PHYM_ALT_CLK_ROOT and DRAM_ALT_CLK_ROOT are set to DDR_PLL_DIV2.

Is there a setting to set it to 1/2?

Best regards.


Re: DRAM_SDCLK0 of i.MX7D is about 270MHz,  it's slow !

Hi Joanxie.

Thank you.

There is a 1/2 difference between the calculated result and the actual DDR_SDCKE.

I don't know why, but I'll end it here for now.

As the frequency increases, the voltage level of DDR_SDCLKE decreases.

So I think about lowering the frequency.

Best regards.

Re: DRAM_SDCLK0 of i.MX7D is about 270MHz,  it's slow !

the driver I showed just tell you the formula, you need read the register CCM_ANALOG_PLL_DDR, CCM_ANALOG_PLL_DDR_NUM and  CCM_ANALOG_PLL_DDR_DENOM, to check if they are correct

Re: DRAM_SDCLK0 of i.MX7D is about 270MHz,  it's slow !

Hi Joanxie.

I'm building uboot-2022.01.

The code you showed is get_ddrc_clk(void).

What I found in this code

   reg = readl(&ccm_reg->root[DRAM_CLK_ROOT].target_root;

DRAM_CLK_ROOT, which is not written in "Fugure 5-7.DRAM_Clock Structure", is loaded into reg.

The initial value of DRAM_CLK_ROOT was 0x00000001.

Clearing DRAM_CLK_ROOT made it display correctly.

However, DRAM_SDCKE0 is 270MHz. Is this correct? I checked it with an oscilloscope.

Best regards.

Re: DRAM_SDCLK0 of i.MX7D is about 270MHz,  it's slow !

I checked the source code as below

https://github.com/nxp-imx/uboot-imx/blob/lf_v2025.04/arch/arm/mach-imx/mx7/clock.c#L162

checked the function decode_pll

case PLL_DDR:
reg = readl(&ccm_anatop->pll_ddr);

if (reg & CCM_ANALOG_PLL_DDR_POWERDOWN_MASK)
return 0;

num = ccm_anatop->pll_ddr_num;
denom = ccm_anatop->pll_ddr_denom;

if (reg & CCM_ANALOG_PLL_DDR_BYPASS_MASK)
return MXC_HCLK;

div_sel = (reg & CCM_ANALOG_PLL_DDR_DIV_SELECT_MASK) >>
CCM_ANALOG_PLL_DDR_DIV_SELECT_SHIFT;

return infreq * (div_sel + num / denom);

so the formula is 24M*(DIV_SELECT+(NUM/DENOM)), div_sel is from CCM_ANALOG_PLL_DDR, mum is from CCM_ANALOG_PLL_DDR_NUM) and denom is from CCM_ANALOG_PLL_DDR_DENOM

Re: DRAM_SDCLK0 of i.MX7D is about 270MHz,  it's slow !

Hi Joanxie.

I understand the diagram you explained.

However, the reference manual does not explain which register FASTMIX is.

Please tell me the register name.

In this case, should TEST_DIV_SELECT of CCM_ANALOG_PLL_DDRn be set to 0x00?

Best regards.

Re: DRAM_SDCLK0 of i.MX7D is about 270MHz,  it's slow !

Is there a setting to set it to 1/2?

>what do you mean? do you mean you need 533Mhz for DRAM_SDCLK, right?

joanxie_0-1754714689138.png

refer to the figure 5-7, The dedicate DRAM_PLL is used to generate 2x clock at 1066MHz, and use a divider to divide it by 2 to get 533MHz clock with good duty cycle. This 533MHz clock will be
used as the PHY_MCLK. Meanwhile, the 1066MHz clock will also be divided by 2 with
the 1/N divider to get 533MHz as the PHY_CLK, there is a 1/N divider used to divide the PHY clockdown to lower frequency such as 266MHz or 133MHz. The 1/N divider is a 3-bit divider
so N can be 2 to 8. so just set this 1/N to 1/2, you can get 533Mhz

タグ(1)
評価なし
バージョン履歴
最終更新日:
‎11-21-2025 06:12 PM
更新者: