Hi, I think the wisest choice is probably to switch to FEI mode first to use the internal oscillator before booting a new image. That is the same mode that the mcu comes up in after a hardware reset.
There are some relevant PRs open on GitHub for the Kinetis clocking: https://github.com/RIOT-OS/RIOT/pull/6986 move k64f clock configuration to board config https://github.com/RIOT-OS/RIOT/pull/6978 MCG improvements Best regards, Joakim On Jun 12, 2017 16:36, "Francisco Javier Acosta Padilla" < francisco.aco...@inria.fr> wrote: Hi again! I just made it work, though is super strange why it works… I did: static void cpu_clock_init(void) { /* setup system prescalers */ SIM->CLKDIV1 = ( SIM_CLKDIV1_OUTDIV1(0) | /* Core/System clock divider */ SIM_CLKDIV1_OUTDIV2(1) | /* Bus clock divider */ SIM_CLKDIV1_OUTDIV3(1) | /* FlexBus divider, not used in Mulle */ SIM_CLKDIV1_OUTDIV4(3)); /* Flash clock divider */ //SIM->CLKDIV1 = (uint32_t)SIM_CLKDIV1_60MHZ; /* RMII RXCLK */ SIM->SCGC5 |= SIM_SCGC5_PORTA_MASK; PORTA->PCR[18] &= ~(PORT_PCR_ISF_MASK | PORT_PCR_MUX(0x07)); kinetis_mcg_set_mode(KINETIS_MCG_PEE); } And it works… any explanation? I took the values from the k60f code (mulle) which seems to be completely different to the values contained in the macro SIM_CLKDIV1_60MHZ (0, 0, 1, 2 values). Therefore, I have no idea on which speed the clock is running. BTW, with this code also works for a “normal” build, compiling and flashing as usual. I’ll look at the manual to see why we do that on RIOT (it’s not documented) and maybe submit some PRs to both add doc and fix the setup if needed. Cheers, -- Francisco Javier Acosta Padilla Research Engineer at INRIA Saclay INFINE Team On 12 June 2017 at 15:16:28, Francisco Javier Acosta Padilla ( francisco.aco...@inria.fr) wrote: Hi RIOT devs! I’m currently working on the RIOT port for MCUBoot[1], which takes the frdm-k64f board as a reference board, and that’s also supported by RIOT and other OSs using MCUBoot. My first goal is to provide a “bootable” image compiled in RIOT and booted by MCUBoot built for mynewt. The work is going well so far, but I’m facing a problem which was also present while coding the RIOT bootloader. Namely, the problem is that the bootloader initialises the clock to a specific speed to run the booting algorithm, which goal is to boot an OS in another flash position, an thus the clock is initialised again leading to a clock crash. Does anyone knows a “safe” way to reset the clock config to afterwards configure it to the desired speed? Currently, as the code shows for the k64f, the assumption is that the clock is in it’s default condition, which is true when a reset is triggered, but now in this new context it’s not true anymore. I have seen some examples here [2] and here [3] which I tried without success. Thanks in advance! Cheers, -- Francisco Javier Acosta Padilla Research Engineer at INRIA Saclay INFINE Team [1] https://github.com/runtimeco/mcuboot/ [2] https://github.com/apache/incubator-mynewt-core/blob/ master/hw/mcu/nxp/src/ext/sdk-2.0-frdm-k64f_b160321/devices/ MK64F12/drivers/fsl_clock.h#L897 [3] https://github.com/RIOT-OS/RIOT/blob/master/boards/mulle/board.c#L170 _______________________________________________ devel mailing list devel@riot-os.org https://lists.riot-os.org/mailman/listinfo/devel
_______________________________________________ devel mailing list devel@riot-os.org https://lists.riot-os.org/mailman/listinfo/devel