rt1062 spread spectrum

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

rt1062 spread spectrum

1,127件の閲覧回数
seobi
Contributor III

I'm working on a project using RT1062 and MCUXpresso IDE.
During the EMC test, the signal strength of 200Mhz was too high, so I wanted to use the spread spectrum function.

To use the spread spectrum, we set the spread spectrum by calling BOARD_SysPllConfigSpreadSpectrum() after BOARD_BootClockRUN().

The setting method is as follows.

void BOARD_SysPllConfigSpreadSpectrum()
{
const clock_sys_pll_config_t sysPllConfig_BOARD_BootClockRUN =
{
.loopDivider = 1, /* PLL loop divider, Fout = Fin * ( 20 + loopDivider*2 + numerator / denominator ) */
.numerator = 0, /* 30 bit numerator of fractional loop divider */
.denominator = 2400, /* 30 bit denominator of fractional loop divider */
.src=0, /* Bypass clock source, 0 - OSC 24M, 1 - CLK1_P and CLK1_N */
#if SPREAD_SPECTRUM_RANGE == SPREAD_RANGE_24M
.ss_enable = 1;
.ss_step = 6;
.ss_stop = 2400;
#elif SPREAD_SPECTRUM_RANGE == SPREAD_RANGE_12M
.ss_enable = 1;
.ss_step = 6;
.ss_stop = 1200;
#elif SPREAD_SPECTRUM_RANGE == SPREAD_RANGE_6M
.ss_enable = 1;
.ss_step = 6;
.ss_stop = 600;
#elif SPREAD_SPECTRUM_RANGE != NO_SPREAD_RANGE
#error SPREAD SPRECTRUM PARAMETER ERROR
#endif
};

CLOCK_InitSysPll(&sysPllConfig_BOARD_BootClockRUN);
}

int cpuInit(void)
{
BOARD_ConfigMPU();
BOARD_InitPins();

BOARD_BootClockRUN();
#if defined(__SPREAD_SPECTRUM__)
BOARD_SysPllConfigSpreadSpectrum();
#endif

BOARD_InitDebugConsole();
BOARD_InitModuleClock();

if (BOARD_InitSEMC() != kStatus_Success)
{
// PRINTF("\r\n SEMC SDRAM Init Failed\r\n");
return -1;
}

SysTick_Config(USEC_TO_COUNT(1000U, SYS_TICK_SOURCE_CLOCK));

return 0;
}


I set up the spread spectrum using only the formula below.
- Spectrum spread range = Fref * ss_stop/DENOM
- Modulation frequency = Fref * ss_step/(2*ss_stop)

I have a few questions here.

1) Is it correct to call BOARD_SysPllConfigSpreadSpectrum() after calling BOARD_BootClockRUN() as mentioned above?
There was no change at all, and when I searched the community, it said that it is usually done before sdram initialization, so I called it before BOARD_InitSEMC(). (cpuInit())

2) By adjusting the PLL loop divider (loopDivider) and numerator values, the Fout value becomes 528Mhz.
Is there no association between the Fout value and the SDRAM 200MHz clock?
What are the settings to apply 200Mhz spread spectrum?

Please let me know what I did wrong..

Regards,

0 件の賞賛
返信
5 返答(返信)

1,102件の閲覧回数
DanielRuvalcaba
NXP TechSupport
NXP TechSupport

Hi,

 

By any chance have you already taken a look to AN12879? I believe it will be helpful for you.

Can you confirm?

 

Regards,

Daniel.

0 件の賞賛
返信

1,096件の閲覧回数
seobi
Contributor III

Yes, I looked at AN12879 and was able to find the formula below in that document.

- Spectrum spread range = Fref * ss_stop/DENOM
- Modulation frequency = Fref * ss_step/(2*ss_stop)

I created the above function based on that formula, but the signal strength does not change.

Additionally, I analyzed the code and found that the semc clock is coming from kCLOCK_PllArm(600Mhz) div 3. In this case, does spread spectrum not work?

0 件の賞賛
返信

1,013件の閲覧回数
DanielRuvalcaba
NXP TechSupport
NXP TechSupport

Hi,

 

Please try to use System PLL (PLL2) for Spread Spectrum.

DanielRuvalcaba_0-1706204839457.png

Please also take a look to section 14.6.1.3.2 in the RT1060 RM.

 

Regards,

Daniel.

0 件の賞賛
返信

1,003件の閲覧回数
seobi
Contributor III

Thank you for your help. We changed it to PLL2 and confirmed that it operates normally.

0 件の賞賛
返信

985件の閲覧回数
DanielRuvalcaba
NXP TechSupport
NXP TechSupport

Thanks for letting me know.

Have a great day.

 

Regards,

Daniel.

0 件の賞賛
返信