rt1062 spread spectrum

cancel
Showing results for 
Show  only  | Search instead for 
Did you mean: 

rt1062 spread spectrum

523 Views
seobi
Contributor I

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 Kudos
5 Replies

498 Views
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 Kudos

492 Views
seobi
Contributor I

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 Kudos

409 Views
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 Kudos

399 Views
seobi
Contributor I

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

0 Kudos

381 Views
DanielRuvalcaba
NXP TechSupport
NXP TechSupport

Thanks for letting me know.

Have a great day.

 

Regards,

Daniel.

0 Kudos