こんにちは。
CCM_ANALOG_PLL_DDR が 0x0000302C に設定されている場合、DRAM_SDCLK0 は 132MHz になります。
SO、CCM_ANALOG_PLL_DDR の TEST_DIV_SELECT ビットが 0x01 に設定され、0x0020302C に設定されている場合、DRAM_SDCLK0 は約 270MHz になります。
533Mhzの半分です。
DRAM_PHYM_ALT_CLK_ROOT と DRAM_ALT_CLK_ROOT は DDR_PLL_DIV2 に設定されています。
1/2にする設定はありますか?
よろしくお願いいたします。
こんにちは、ジョアンシー。
よろしくお願いします。
計算結果と実際の DDR_SDCKE には 1/2 の差があります。
理由は分かりませんが、とりあえずここで終わりにします。
周波数が高くなると、DDR_SDCLKE の電圧レベルは低下します。
SO、頻度を下げようと考えています。
よろしくお願いいたします。
私が示したドライバは式を教えてくれるので、 CCM_ANALOG_PLL_DDR、CCM_ANALOG_PLL_DDR_NUM、CCM_ANALOG_PLL_DDR_DENOMレジスタを読み取って、正しいかどうかを確認する必要があります。
こんにちは、ジョアンシー。
uboot-2022.01をビルディングしています。
示したコードは get_ddrc_clk(void) です。
このコードで見つけたもの
reg = readl(&ccm_reg->root[DRAM_CLK_ROOT].target_root;
「図5-7.DRAM_Clock構造」に記載されていないDRAM_CLK_ROOTがregにロードされます。
DRAM_CLK_ROOTの初期値は0x00000001でした。
DRAM_CLK_ROOT をクリアすると正しく表示されるようになりました。
ただし、DRAM_SDCKE0 は 270MHz です。これは正しいですか?オシロスコープで確認しました。
よろしくお願いいたします。
以下のようにソースコードを確認しました
https://github.com/nxp-imx/uboot-imx/blob/lf_v2025.04/arch/arm/mach-imx/mx7/clock.c#L162
decode_pll関数をチェックした
CASE PLL_DDR:
reg = readl(&ccm_anatop->pll_ddr);
(reg & CCM_ANALOG_PLL_DDR_POWERDOWN_MASK) の場合
0を返します。
num = ccm_anatop->pll_ddr_num;
denom = ccm_anatop->pll_ddr_denom;
(reg & CCM_ANALOG_PLL_DDR_BYPASS_MASK) の場合
MXC_HCLK を返します。
div_sel = (reg & CCM_ANALOG_PLL_DDR_DIV_SELECT_MASK) >>
CCM_ANALOG_PLL_DDR_DIV_SELECT_SHIFT;
頻度を返します * (div_sel + num / denom);
SO、式は24M *(DIV_SELECT+(NUM/DENOM))、div_selはCCM_ANALOG_PLL_DDRから、mumはCCM_ANALOG_PLL_DDR_NUMから、denomはCCM_ANALOG_PLL_DDR_DENOMから取得されます。
こんにちは、ジョアンシー。
説明していただいた図は理解できました。
しかし、リファレンスマニュアルには、FASTMIX がどのレジスタであるかは説明されていません。
レジスター名を教えてください。
このCASE、CCM_ANALOG_PLL_DDRn の TEST_DIV_SELECT を 0x00 に設定する必要がありますか?
よろしくお願いいたします。
1/2にする設定はありますか?
>どういう意味ですか? DRAM_SDCLKに533Mhzが必要だということですか?
図5-7を参照してください。専用のDRAM_PLLを使用して1066MHzの2倍クロックを生成し、分周器を使用してそれを2で分割して、デューティサイクルが良好な533MHzクロックを生成します。この533MHzクロックは
PHY_MCLK として使用されます。一方、1066MHzのクロックも2で割られ、
1/N 分周器を使用して 533MHz を PHY_CLK として取得するほか、PHY クロックを 266MHz や 133MHz などの低い周波数に分割するために使用される 1/N 分周器があります。1/N除算器は3ビットの除算器である
Nは2から8までの範囲で設定できます。SO、1/Nを1/2に設定すると533MHzになります。